diff --git a/configure.ac b/configure.ac index 58fccc0f..04238f0d 100644 --- a/configure.ac +++ b/configure.ac @@ -112,7 +112,7 @@ AC_ARG_ENABLE([dhcp_manager], ], [echo "dhcp manager is disabled"]) AM_CONDITIONAL(DHCPMANAGER_ENABLED, test "x$DHCPMANAGER_SUPPORT_ENABLED" = xtrue) - +AM_CONDITIONAL([ONESTACK_PRODUCT_REQ], [test "x$ONESTACK_PRODUCT_REQ" = "xtrue"]) dnl Checks for header files. AC_CHECK_HEADERS([limits.h memory.h stdlib.h string.h sys/socket.h unistd.h]) diff --git a/source/WanManager/Makefile.am b/source/WanManager/Makefile.am index 9f922b6e..a2a50bb7 100644 --- a/source/WanManager/Makefile.am +++ b/source/WanManager/Makefile.am @@ -48,3 +48,7 @@ wanmanager_SOURCES += wanmgr_dhcp_event_handler.c else wanmanager_LDADD += -ldhcp_client_utils endif + +if ONESTACK_PRODUCT_REQ +wanmanager_LDADD += -ldevicemode -lonestack_syscfg -lonestack_log -lrdkb_feature_mode_gate +endif diff --git a/source/WanManager/wanmgr_dhcp_legacy_apis.c b/source/WanManager/wanmgr_dhcp_legacy_apis.c index c8c4cf6a..383f88cb 100644 --- a/source/WanManager/wanmgr_dhcp_legacy_apis.c +++ b/source/WanManager/wanmgr_dhcp_legacy_apis.c @@ -36,7 +36,9 @@ #include #include #include "secure_wrapper.h" - +#ifdef _ONESTACK_PRODUCT_REQ_ +#include +#endif #if defined(_DT_WAN_Manager_Enable_) int _get_shell_output2(char * cmd, char * dststr) { @@ -226,12 +228,16 @@ WanMgr_DmlDhcpv6Init { DSLHDMAGNT_CALLBACK * pEntry = NULL; CcspTraceWarning(("Inside %s %d \n", __FUNCTION__, __LINE__)); -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && ! defined(_CBR_PRODUCT_REQ_) && ! defined(_BCI_FEATURE_REQ) +#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && ! defined(_CBR_PRODUCT_REQ_) && ! defined(_BCI_FEATURE_REQ) && !defined(_ONESTACK_PRODUCT_REQ_) #else -/* handle message from wan dchcp6 client */ - WanMgr_DmlDhcpv6SMsgHandler(NULL); - + #ifdef _ONESTACK_PRODUCT_REQ_ + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + /* handle message from wan dhcp6 client */ + WanMgr_DmlDhcpv6SMsgHandler(NULL); + } #endif @@ -734,16 +740,34 @@ dhcpv6c_dbg_thrd(void * in) sprintf(v6pref+strlen(v6pref), "/%d", pref_len); else { -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) +#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) + #if defined(_ONESTACK_PRODUCT_REQ_) + if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) + #endif + { sprintf(v6pref+strlen(v6pref), "/%d", pref_len); -#else + } +#endif +#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) + #if defined(_ONESTACK_PRODUCT_REQ_) + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) + #endif + { sprintf(v6pref+strlen(v6pref), "/%d", 64); + } #endif } #endif char cmd[100]; -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && defined(_CBR_PRODUCT_REQ_) +#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && \ + defined(_CBR_PRODUCT_REQ_) && \ + !defined(_ONESTACK_PRODUCT_REQ_) #else + +#ifdef _ONESTACK_PRODUCT_REQ_ + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { char out1[100]; char *token = NULL;char *pt; char s[2] = ","; @@ -812,6 +836,7 @@ dhcpv6c_dbg_thrd(void * in) } } } + } #endif char previous_v6pref[128] = {0}; sysevent_get(sysevent_fd, sysevent_token, "ipv6_prefix", previous_v6pref, sizeof(previous_v6pref)); @@ -1229,14 +1254,21 @@ dhcpv6c_dbg_thrd(void * in) v_secure_system("sysevent set firewall-restart"); bRestartFirewall = FALSE; } -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && (defined(_CBR_PRODUCT_REQ_) || defined(_BCI_FEATURE_REQ)) +#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && \ + (defined(_CBR_PRODUCT_REQ_) || defined(_BCI_FEATURE_REQ_)) && \ + !defined(_ONESTACK_PRODUCT_REQ_) #else +#ifdef _ONESTACK_PRODUCT_REQ_ + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { #ifdef LAN_MGR_SUPPORT v_secure_system("sysevent set dhcpv6_raserver-restart"); #else v_secure_system("sysevent set zebra-restart"); #endif + } #endif } diff --git a/source/WanManager/wanmgr_dhcpv6_apis.c b/source/WanManager/wanmgr_dhcpv6_apis.c index d3f4fcd9..94343683 100644 --- a/source/WanManager/wanmgr_dhcpv6_apis.c +++ b/source/WanManager/wanmgr_dhcpv6_apis.c @@ -38,7 +38,10 @@ extern token_t sysevent_token; extern ANSC_HANDLE bus_handle; extern char g_Subsystem[32]; -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && defined(_COSA_BCM_MIPS_) +#ifdef _ONESTACK_PRODUCT_REQ_ +#include +#endif +#if (defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && defined(_COSA_BCM_MIPS_)) || defined(_ONESTACK_PRODUCT_REQ_) #include #endif #define CLIENT_DUID_FILE "/var/lib/dibbler/client-duid" @@ -444,15 +447,31 @@ static int _dibbler_client_operation(char * arg) CcspTraceInfo(("%s stop\n", __func__)); /*TCXB6 is also calling service_dhcpv6_client.sh but the actuall script is installed from meta-rdk-oem layer as the intel specific code had to be removed */ +#ifdef _ONESTACK_PRODUCT_REQ_ + if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) + { + + sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_client-stop", "", 0); + } + else + { +#if defined(CORE_NET_LIB) + v_secure_system("/usr/bin/service_dhcpv6_client dhcpv6_client_service_disable"); + CcspTraceInfo(("%s Calling service_dhcpv6_client.c with dhcpv6_client_service_disable from wanmgr_dhcpv6_apis.c\n", __func__)); +#else + v_secure_system("/etc/utopia/service.d/service_dhcpv6_client.sh disable &"); +#endif + } +#else #if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && ! defined(DHCPV6_PREFIX_FIX) - sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_client-stop", "", 0); + sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_client-stop", "", 0); #elif defined(CORE_NET_LIB) - v_secure_system("/usr/bin/service_dhcpv6_client dhcpv6_client_service_disable"); - CcspTraceInfo(("%s Calling service_dhcpv6_client.c with dhcpv6_client_service_disable from wanmgr_dhcpv6_apis.c\n", __func__)); + v_secure_system("/usr/bin/service_dhcpv6_client dhcpv6_client_service_disable"); + CcspTraceInfo(("%s Calling service_dhcpv6_client.c with dhcpv6_client_service_disable from wanmgr_dhcpv6_apis.c\n", __func__)); #else - v_secure_system("/etc/utopia/service.d/service_dhcpv6_client.sh disable &"); + v_secure_system("/etc/utopia/service.d/service_dhcpv6_client.sh disable &"); +#endif #endif - #ifdef _COSA_BCM_ARM_ if (TRUE == WanManager_IsApplicationRunning (CLIENT_BIN, NULL)) { @@ -548,15 +567,30 @@ static int _dibbler_client_operation(char * arg) /*TCXB6 is also calling service_dhcpv6_client.sh but the actuall script is installed from meta-rdk-oem layer as the intel specific code had to be removed */ CcspTraceInfo(("%s Callin service_dhcpv6_client.sh enable \n", __func__)); +#ifdef _ONESTACK_PRODUCT_REQ_ + if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) + { + sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_client-start", "", 0); + } + else + { +#if defined(CORE_NET_LIB) + v_secure_system("/usr/bin/service_dhcpv6_client dhcpv6_client_service_enable"); + CcspTraceInfo(("%s Calling service_dhcpv6_client.c with dhcpv6_client_service_enable from wanmgr_dhcpv6_apis.c\n", __func__)); +#else + v_secure_system("/etc/utopia/service.d/service_dhcpv6_client.sh enable &"); +#endif + } +#else #if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && ! defined(DHCPV6_PREFIX_FIX) - sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_client-start", "", 0); + sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_client-start", "", 0); #elif defined(CORE_NET_LIB) - v_secure_system("/usr/bin/service_dhcpv6_client dhcpv6_client_service_enable"); - CcspTraceInfo(("%s Calling service_dhcpv6_client.c with dhcpv6_client_service_enable from wanmgr_dhcpv6_apis.c\n", __func__)); + v_secure_system("/usr/bin/service_dhcpv6_client dhcpv6_client_service_enable"); + CcspTraceInfo(("%s Calling service_dhcpv6_client.c with dhcpv6_client_service_enable from wanmgr_dhcpv6_apis.c\n", __func__)); #else v_secure_system("/etc/utopia/service.d/service_dhcpv6_client.sh enable &"); #endif - +#endif #ifdef _COSA_BCM_ARM_ /* Dibbler-init is called to set the pre-configuration for dibbler */ CcspTraceInfo(("%s dibbler-init.sh Called \n", __func__)); @@ -1774,13 +1808,24 @@ ANSC_STATUS wanmgr_handle_dhcpv6_event_data(DML_VIRTUAL_IFACE * pVirtIf) if (strcmp(pDhcp6cInfoCur->sitePrefix, pNewIpcMsg->sitePrefix) != 0) { CcspTraceInfo(("%s %d new prefix = %s, current prefix = %s \n", __FUNCTION__, __LINE__, pNewIpcMsg->sitePrefix, pDhcp6cInfoCur->sitePrefix)); -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) - /* Use the delegated prefix length directly for platforms that support prefix delegation to LAN clients */ - strncpy(prefix, pVirtIf->IP.Ipv6Data.sitePrefix, sizeof(prefix) - 1); -#else - strncat(prefix, "/64", sizeof(prefix) - 1); +#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + /* Use the delegated prefix length directly for platforms that support prefix delegation to LAN clients */ + strncpy(prefix, pVirtIf->IP.Ipv6Data.sitePrefix, sizeof(prefix) - 1); + } +#endif +#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + strncat(prefix, "/64", sizeof(prefix) - 1); + } #endif - sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_FIELD_IPV6_PREFIX, prefix, 0); + sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_FIELD_IPV6_PREFIX, prefix, 0); } } } @@ -1977,11 +2022,22 @@ int setUpLanPrefixIPv6(DML_VIRTUAL_IFACE* pVirtIf) char previousPrefix[BUFLEN_48] = {0}; char previousPrefix_vldtime[BUFLEN_48] = {0}; char previousPrefix_prdtime[BUFLEN_48] = {0}; -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) - /* Use the delegated prefix length directly for platforms that support prefix delegation to LAN clients */ - strncpy(lanPrefix, pVirtIf->IP.Ipv6Data.sitePrefix, sizeof(lanPrefix) - 1); -#else - strncat(lanPrefix, "/64", sizeof(lanPrefix) - strlen(lanPrefix) - 1); +#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + /* Use the delegated prefix length directly for platforms that support prefix delegation to LAN clients */ + strncpy(lanPrefix, pVirtIf->IP.Ipv6Data.sitePrefix, sizeof(lanPrefix) - 1); + } +#endif +#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + strncat(lanPrefix, "/64", sizeof(lanPrefix) - strlen(lanPrefix) - 1); + } #endif sysevent_get(sysevent_fd, sysevent_token, SYSEVENT_FIELD_IPV6_PREFIX, previousPrefix, sizeof(previousPrefix)); sysevent_get(sysevent_fd, sysevent_token, SYSEVENT_FIELD_IPV6_PREFIXVLTIME, previousPrefix_vldtime, sizeof(previousPrefix_vldtime)); @@ -2086,11 +2142,22 @@ int setUpLanPrefixIPv6(DML_VIRTUAL_IFACE* pVirtIf) syscfg_set_string(SYSCFG_FIELD_IPV6_PREFIX_ADDRESS, pVirtIf->IP.Ipv6Data.pdIfAddress); sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_FIELD_TR_BRLAN0_DHCPV6_SERVER_ADDRESS, set_value, 0); CcspTraceInfo(("%s %d new prefix = %s\n", __FUNCTION__, __LINE__, pVirtIf->IP.Ipv6Data.sitePrefix)); -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) - /* Use the delegated prefix length directly for platforms that support prefix delegation to LAN clients */ - strncpy(prefix, pVirtIf->IP.Ipv6Data.sitePrefix, sizeof(prefix) - 1); -#else - strncat(prefix, "/64", sizeof(prefix) - 1); +#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + /* Use the delegated prefix length directly for platforms that support prefix delegation to LAN clients */ + strncpy(prefix, pVirtIf->IP.Ipv6Data.sitePrefix, sizeof(prefix) - 1); + } +#endif +#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + strncat(prefix, "/64", sizeof(prefix) - 1); + } #endif sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_FIELD_IPV6_PREFIX, prefix, 0); sysevent_set(sysevent_fd, sysevent_token, "lan_prefix", prefix, 0); @@ -2129,21 +2196,32 @@ int setUpLanPrefixIPv6(DML_VIRTUAL_IFACE* pVirtIf) CcspTraceWarning(("%s: setting lan-restart\n", __FUNCTION__)); sysevent_set(sysevent_fd, sysevent_token, "lan-restart", "1", 0); -#if defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && ! defined(DHCPV6_PREFIX_FIX) - CcspTraceWarning(("%s: setting dhcpv6_server-restart\n", __FUNCTION__)); - sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_server-restart", "", 0); -#else - // Below code copied from CosaDmlDHCPv6sTriggerRestart(FALSE) PAm function. - int fd = 0; - char str[32] = "restart"; - fd= open(DHCPS6V_SERVER_RESTART_FIFO, O_RDWR); - if (fd < 0) +#if (defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) && ! defined(DHCPV6_PREFIX_FIX)) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif + { + CcspTraceWarning(("%s: setting dhcpv6_server-restart\n", __FUNCTION__)); + sysevent_set(sysevent_fd, sysevent_token, "dhcpv6_server-restart", "", 0); + } +#endif +#if !defined(CISCO_CONFIG_DHCPV6_PREFIX_DELEGATION) || defined(_ONESTACK_PRODUCT_REQ_) +#if defined(_ONESTACK_PRODUCT_REQ_) + if (!isFeatureSupportedInCurrentMode(FEATURE_IPV6_DELEGATION)) +#endif { - fprintf(stderr, "open dhcpv6 server restart fifo when writing.\n"); - return 1; + // Below code copied from CosaDmlDHCPv6sTriggerRestart(FALSE) PAm function. + int fd = 0; + char str[32] = "restart"; + fd= open(DHCPS6V_SERVER_RESTART_FIFO, O_RDWR); + if (fd < 0) + { + fprintf(stderr, "open dhcpv6 server restart fifo when writing.\n"); + return 1; + } + write( fd, str, sizeof(str) ); + close(fd); } - write( fd, str, sizeof(str) ); - close(fd); #endif #endif #endif @@ -2157,7 +2235,7 @@ ANSC_STATUS WanMgr_Handle_Dhcpv6_NetLink_Address_Event(IPv6NetLinkAddrEvent *pst if( NULL == pstAddrEvent ) { - CcspTraceError(("%s %d - Invalid memory \n", __FUNCTION__, __LINE__)); + CcspTraceError(("%s %d - Invalid memory \n", __FUNCTION__, __LINE__)); return ret; }