Skip to content

Commit 924ca57

Browse files
committed
RDKB-63098: [ONESTACK]-Handle IPv6 delegation for business
vs residential Partner ID as part of single build Reason for change: Prefix delegation handling Test Procedure: - Build OneStack Image - In Business-mode, Check dibbler server is started and server.conf has prefix-delegation class - In Residential-mode, check whether device behaves as a non-CBR device Risks: None Priority: P1 Signed-off-by: rirfha948 <rasina_irfhan@comcast.com>
1 parent ebc1292 commit 924ca57

File tree

7 files changed

+393
-91
lines changed

7 files changed

+393
-91
lines changed

source-arm/TR-181/board_sbapi/cosa_dhcpv6_apis.c

Lines changed: 216 additions & 64 deletions
Large diffs are not rendered by default.

source-arm/TR-181/board_sbapi/cosa_ip_apis.c

Lines changed: 85 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@
7171
#include "secure_wrapper.h"
7272
#include "safec_lib_common.h"
7373

74+
#ifdef _ONESTACK_PRODUCT_REQ_
75+
#include <rdkb_feature_mode_gate.h>
76+
#endif
7477
extern void* g_pDslhDmlAgent;
7578
extern ANSC_HANDLE bus_handle;
7679

@@ -1485,9 +1488,8 @@ ULONG CosaDmlIPv6addrGetV6Status(PCOSA_DML_IP_V6ADDR p_dml_v6addr, PCOSA_DML_IP_
14851488

14861489
return COSA_DML_IP6_ADDRSTATUS_Invalid;
14871490
}
1488-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
14891491
PCOSA_DML_IP_V6ADDR
1490-
CosaDmlIPGetIPv6Addresses
1492+
CosaDmlIPGetIPv6Addresses_PD
14911493
(
14921494
PCOSA_DML_IP_IF_FULL2 p_ipif,
14931495
PULONG p_num
@@ -1541,9 +1543,8 @@ CosaDmlIPGetIPv6Addresses
15411543
#endif
15421544
return p_dml_addr;
15431545
}
1544-
#else
15451546
PCOSA_DML_IP_V6ADDR
1546-
CosaDmlIPGetIPv6Addresses
1547+
CosaDmlIPGetIPv6Addresses_NONPD
15471548
(
15481549
PCOSA_DML_IP_IF_FULL2 p_ipif,
15491550
PULONG p_num
@@ -1618,8 +1619,40 @@ CosaDmlIPGetIPv6Addresses
16181619
#endif
16191620
return p_dml_addr;
16201621
}
1622+
PCOSA_DML_IP_V6ADDR
1623+
CosaDmlIPGetIPv6Addresses(
1624+
PCOSA_DML_IP_IF_FULL2 p_ipif,
1625+
PULONG p_num
1626+
)
1627+
{
1628+
#ifdef _ONESTACK_PRODUCT_REQ_
1629+
1630+
/* OneStack → runtime PD decision */
1631+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
1632+
{
1633+
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
1634+
return CosaDmlIPGetIPv6Addresses_PD(p_ipif, p_num);
1635+
#else
1636+
/* safety fallback */
1637+
return CosaDmlIPGetIPv6Addresses_NONPD(p_ipif, p_num);
1638+
#endif
1639+
}
1640+
else
1641+
{
1642+
return CosaDmlIPGetIPv6Addresses_NONPD(p_ipif, p_num);
1643+
}
1644+
1645+
#else /* Legacy (non-OneStack) builds */
1646+
1647+
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
1648+
return CosaDmlIPGetIPv6Addresses_PD(p_ipif, p_num);
1649+
#else
1650+
return CosaDmlIPGetIPv6Addresses_NONPD(p_ipif, p_num);
1651+
#endif
16211652

16221653
#endif
1654+
}
1655+
16231656

16241657

16251658
static int
@@ -1754,7 +1787,11 @@ IPIF_getEntry_for_Ipv6Pre
17541787
if (g_ipif_be_bufs[ulIndex].ulNumOfV6Pre >= MAX_IPV6_ENTRY_NUM)
17551788
break;
17561789

1757-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
1790+
#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
1791+
#if defined(_ONESTACK_PRODUCT_REQ_)
1792+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
1793+
#endif
1794+
{
17581795
#if defined(_COSA_INTEL_USG_ARM_) || defined(_COSA_BCM_ARM_) || defined(_COSA_BCM_MIPS_)
17591796
/* We just put this prefix into erouter0 && brlan0 entry */
17601797
if ( ulIndex > 0 && ulIndex != 3)
@@ -1771,11 +1808,18 @@ IPIF_getEntry_for_Ipv6Pre
17711808
p_dml_v6pre->Origin = (ulIndex == 0) ? COSA_DML_IP6PREFIX_ORIGIN_PrefixDelegation : COSA_DML_IP6PREFIX_ORIGIN_Child;
17721809
else
17731810
break;
1774-
#else
1811+
}
1812+
#endif
1813+
#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
1814+
#if defined(_ONESTACK_PRODUCT_REQ_)
1815+
if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
1816+
#endif
1817+
{
17751818
#ifdef _COSA_INTEL_USG_ARM_
17761819
/* We just put this prefix into erouter0 entry */
17771820
if ( ulIndex > 0 )
17781821
break;
1822+
}
17791823
#endif
17801824

17811825
p_dml_v6pre = &g_ipif_be_bufs[ulIndex].V6PreList[g_ipif_be_bufs[ulIndex].ulNumOfV6Pre];
@@ -4073,9 +4117,8 @@ CosaDmlIpIfGetV6Addr2
40734117
/*
40744118
* IP Interface IPv6Prefix
40754119
*/
4076-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
40774120
PCOSA_DML_IP_V6PREFIX
4078-
CosaDmlIPGetIPv6Prefixes
4121+
CosaDmlIPGetIPv6Prefixes_PD
40794122
(
40804123
PCOSA_DML_IP_IF_FULL2 p_ipif,
40814124
PULONG p_num
@@ -4127,9 +4170,8 @@ CosaDmlIPGetIPv6Prefixes
41274170

41284171
return p_dml_pref;
41294172
}
4130-
#else
41314173
PCOSA_DML_IP_V6PREFIX
4132-
CosaDmlIPGetIPv6Prefixes
4174+
CosaDmlIPGetIPv6Prefixes_NONPD
41334175
(
41344176
PCOSA_DML_IP_IF_FULL2 p_ipif,
41354177
PULONG p_num
@@ -4207,8 +4249,41 @@ CosaDmlIPGetIPv6Prefixes
42074249
}
42084250
#endif
42094251
}
4252+
PCOSA_DML_IP_V6PREFIX
4253+
CosaDmlIPGetIPv6Prefixes(
4254+
PCOSA_DML_IP_IF_FULL2 p_ipif,
4255+
PULONG p_num
4256+
)
4257+
{
4258+
#ifdef _ONESTACK_PRODUCT_REQ_
4259+
4260+
/* OneStack → runtime PD decision */
4261+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
4262+
{
4263+
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
4264+
return CosaDmlIPGetIPv6Prefixes_PD(p_ipif, p_num);
4265+
#else
4266+
/* safety fallback */
4267+
return CosaDmlIPGetIPv6Prefixes_NONPD(p_ipif, p_num);
4268+
#endif
4269+
}
4270+
else
4271+
{
4272+
return CosaDmlIPGetIPv6Prefixes_NONPD(p_ipif, p_num);
4273+
}
4274+
4275+
#else /* Legacy (non-OneStack) builds */
4276+
4277+
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
4278+
return CosaDmlIPGetIPv6Prefixes_PD(p_ipif, p_num);
4279+
#else
4280+
return CosaDmlIPGetIPv6Prefixes_NONPD(p_ipif, p_num);
4281+
#endif
42104282

42114283
#endif
4284+
}
4285+
4286+
42124287

42134288
/**********************************************************************
42144289

source/TR-181/include/cosa_dhcpv6_apis.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@
125125
#define COSA_DML_WANIface_ADDR_VLDTM_SYSEVENT_NAME "tr_%s_dhcpv6_client_addr_vldtm"
126126
#endif
127127

128-
#if defined (CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined (INTEL_PUMA7)
128+
#if defined (CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined (INTEL_PUMA7) || defined(_ONESTACK_PRODUCT_REQ_)
129129
#define COSA_DML_DHCPV6S_ADDR_SYSEVENT_NAME "ipv6_"COSA_DML_DHCPV6_SERVER_IFNAME"-addr"
130130
#else
131131
#define COSA_DML_DHCPV6S_ADDR_SYSEVENT_NAME "tr_"COSA_DML_DHCPV6_SERVER_IFNAME"_dhcpv6_server_v6addr"
@@ -1357,7 +1357,7 @@ CosaDmlDhcpv6sGetIAPDPrefixes
13571357
ULONG* pSize
13581358
);
13591359

1360-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
1360+
#if defined (CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
13611361
/**
13621362
* @brief Get IAPD prefixes (alternative implementation).
13631363
*

source/TR-181/include/cosa_ip_apis.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,18 @@ CosaDmlIPGetIPv6Addresses
824824
PULONG p_num
825825
);
826826

827+
PCOSA_DML_IP_V6ADDR
828+
CosaDmlIPGetIPv6Addresses_PD
829+
(
830+
PCOSA_DML_IP_IF_FULL2 p_ipif,
831+
PULONG p_num
832+
);
833+
PCOSA_DML_IP_V6ADDR
834+
CosaDmlIPGetIPv6Addresses_NONPD
835+
(
836+
PCOSA_DML_IP_IF_FULL2 p_ipif,
837+
PULONG p_num
838+
);
827839
/**
828840
* @brief Add a new IPv6 address to an interface.
829841
*
@@ -933,6 +945,18 @@ CosaDmlIPGetIPv6Prefixes
933945
PULONG p_num
934946
);
935947

948+
PCOSA_DML_IP_V6PREFIX
949+
CosaDmlIPGetIPv6Prefixes_PD
950+
(
951+
PCOSA_DML_IP_IF_FULL2 p_ipif,
952+
PULONG p_num
953+
);
954+
PCOSA_DML_IP_V6PREFIX
955+
CosaDmlIPGetIPv6Prefixes_NONPD
956+
(
957+
PCOSA_DML_IP_IF_FULL2 p_ipif,
958+
PULONG p_num
959+
);
936960
/**
937961
* @brief Get the number of IPv6 prefixes on an interface.
938962
*

source/TR-181/integration_src.shared/Makefile.am

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,6 @@ libCcspPandM_integration_src_shared_la_CPPFLAGS = -I$(top_srcdir)/source/TR-181/
3232

3333
libCcspPandM_integration_src_shared_la_SOURCES = cosa_ethernet_apis_multilan.c cosa_ip_apis_multilan.c cosa_x_cisco_com_multilan_apis.c
3434
libCcspPandM_integration_src_shared_la_LDFLAGS = -lccsp_common
35+
if ONESTACK_PRODUCT_REQ
36+
libCcspPandM_integration_src_shared_la_LDFLAGS += -ldevicemode -lonestack_syscfg -lonestack_log -lrdkb_feature_mode_gate
37+
endif

source/TR-181/integration_src.shared/cosa_ip_apis_multilan.c

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@
7878
#include "linux/sockios.h"
7979
#include <sys/ioctl.h>
8080
#include "safec_lib_common.h"
81-
82-
81+
#ifdef _ONESTACK_PRODUCT_REQ_
82+
#include <rdkb_feature_mode_gate.h>
83+
#endif
8384
/**********************************************************************
8485
HELPER FUNCTIONS
8586
**********************************************************************/
@@ -2393,7 +2394,11 @@ CosaDmlIpIfMlanGetV6Addr2
23932394
}
23942395
return ANSC_STATUS_SUCCESS;
23952396
#else
2396-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
2397+
#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
2398+
#if defined(_ONESTACK_PRODUCT_REQ_)
2399+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
2400+
#endif
2401+
{
23972402
int iReturnValue = CCSP_SUCCESS;
23982403
char pParamPath[64] = {0};
23992404
unsigned int RecordType = 0;
@@ -2476,14 +2481,21 @@ CosaDmlIpIfMlanGetV6Addr2
24762481

24772482
}
24782483
return ANSC_STATUS_SUCCESS;
2479-
#else
2484+
}
2485+
#endif
2486+
#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
2487+
#if defined(_ONESTACK_PRODUCT_REQ_)
2488+
if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
2489+
#endif
2490+
{
24802491
/*
24812492
* No IPv6 support for Multi-LAN at the moment
24822493
* It should not have got here at all!
24832494
*/
24842495
return ANSC_STATUS_UNAPPLICABLE;
2485-
2496+
}
24862497
#endif
2498+
return ANSC_STATUS_SUCCESS;
24872499
#endif
24882500

24892501
}
@@ -2685,7 +2697,11 @@ CosaDmlIpIfMlanGetV6Prefix2
26852697

26862698
return ANSC_STATUS_SUCCESS;
26872699
#else
2688-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
2700+
#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
2701+
#if defined(_ONESTACK_PRODUCT_REQ_)
2702+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
2703+
#endif
2704+
{
26892705
int iReturnValue = CCSP_SUCCESS;
26902706
char pParamPath[64] = {0};
26912707
unsigned int RecordType = 0;
@@ -2771,14 +2787,21 @@ CosaDmlIpIfMlanGetV6Prefix2
27712787
}
27722788

27732789
return ANSC_STATUS_SUCCESS;
2774-
#else
2790+
}
2791+
#endif
2792+
#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
2793+
#if defined(_ONESTACK_PRODUCT_REQ_)
2794+
if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
2795+
#endif
2796+
{
27752797
/*
27762798
* No IPv6 support for Multi-LAN at the moment
27772799
* It should not have got here at all!
27782800
*/
27792801
return ANSC_STATUS_UNAPPLICABLE;
2780-
2802+
}
27812803
#endif
2804+
return ANSC_STATUS_SUCCESS;
27822805
#endif
27832806
}
27842807

source/TR-181/middle_layer_src/cosa_dhcpv6_dml.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@
7373
#include "ansc_string_util.h"
7474
#include "safec_lib_common.h"
7575
#include "cosa_drg_common.h"
76-
76+
#ifdef _ONESTACK_PRODUCT_REQ_
77+
#include <rdkb_feature_mode_gate.h>
78+
#endif
7779
#define MIN 60
7880
#define HOURS 3600
7981
#define DAYS 86400
@@ -4605,16 +4607,31 @@ Pool1_GetParamStringValue
46054607
(PUCHAR)"brlan0" /* When brlan0 works ,change to "brlan0"*/
46064608
);
46074609
#endif
4608-
4610+
#if defined(_ONESTACK_PRODUCT_REQ_)
4611+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
4612+
{
4613+
pString = CosaUtilGetFullPathNameByKeyword
4614+
(
4615+
(PUCHAR)"Device.IP.Interface.",
4616+
(PUCHAR)"Name",
4617+
(PUCHAR)pPool->Cfg.Interface /* When brlan0 works ,change to "brlan0"*/
4618+
);
4619+
}
4620+
#endif
46094621
if ( pString )
46104622
{
46114623
if ( AnscSizeOfString((const char*)pString) < *pUlSize)
46124624
{
46134625
rc = strcpy_s(pValue, *pUlSize, (char*) pString);
46144626
ERR_CHK(rc);
46154627
#if defined (MULTILAN_FEATURE)
4616-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
4628+
#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
4629+
#if defined(_ONESTACK_PRODUCT_REQ_)
4630+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
4631+
#endif
4632+
{
46174633
AnscFreeMemory(pString);
4634+
}
46184635
#endif
46194636
#else
46204637
AnscFreeMemory(pString);
@@ -4625,8 +4642,13 @@ Pool1_GetParamStringValue
46254642
{
46264643
*pUlSize = AnscSizeOfString((const char*)pString)+1;
46274644
#if defined (MULTILAN_FEATURE)
4628-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
4645+
#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
4646+
#if defined(_ONESTACK_PRODUCT_REQ_)
4647+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
4648+
#endif
4649+
{
46294650
AnscFreeMemory(pString);
4651+
}
46304652
#endif
46314653
#else
46324654
AnscFreeMemory(pString);
@@ -4691,11 +4713,14 @@ Pool1_GetParamStringValue
46914713
if (strcmp(ParamName, "IAPDPrefixes") == 0)
46924714
{
46934715
/* collect value */
4694-
#ifdef CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION
4716+
#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_)
4717+
#if defined(_ONESTACK_PRODUCT_REQ_)
4718+
if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION))
4719+
#endif
4720+
{
46954721
return CosaDmlDhcpv6sGetIAPDPrefixes2(&pPool->Cfg, pValue, pUlSize);
4696-
#else
4722+
}
46974723
#endif
4698-
46994724
return update_pValue(pValue,pUlSize, (char*)pPool->Info.IAPDPrefixes);
47004725
}
47014726

0 commit comments

Comments
 (0)