From 942aec5e4b79a77431f4d9f17bf9c5919bb1f844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=20Lepp=C3=A4nen?= Date: Fri, 11 Aug 2017 14:59:46 +0300 Subject: [PATCH] Corrected lwip to enable disabling of ipcp and ipv6cp protocols --- .../lwip-interface/lwip/src/include/netif/ppp/ppp.h | 4 ++++ .../lwip-interface/lwip/src/netif/ppp/lwip_ipcp.c | 5 +++++ .../lwip-interface/lwip/src/netif/ppp/lwip_ipv6cp.c | 5 +++++ features/FEATURE_LWIP/lwip-interface/ppp_lwip.cpp | 2 ++ 4 files changed, 16 insertions(+) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip/src/include/netif/ppp/ppp.h b/features/FEATURE_LWIP/lwip-interface/lwip/src/include/netif/ppp/ppp.h index d9ea097efd..23260a9c5d 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip/src/include/netif/ppp/ppp.h +++ b/features/FEATURE_LWIP/lwip-interface/lwip/src/include/netif/ppp/ppp.h @@ -336,6 +336,10 @@ struct ppp_pcb_s { unsigned int ipv6cp_is_up :1; /* have called ip6cp_up() */ unsigned int if6_up :1; /* True when the IPv6 interface is up. */ #endif /* PPP_IPV6_SUPPORT */ +#if PPP_IPV4_SUPPORT && PPP_IPV6_SUPPORT + unsigned int ipcp_disabled :1; /* disable ipcp */ + unsigned int ipv6cp_disabled :1; /* disable ipv6cp */ +#endif unsigned int lcp_echo_timer_running :1; /* set if a timer is running */ #if VJ_SUPPORT unsigned int vj_enabled :1; /* Flag indicating VJ compression enabled. */ diff --git a/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipcp.c b/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipcp.c index b7c766eb0b..05108a0628 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipcp.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipcp.c @@ -671,6 +671,11 @@ static void ipcp_close(ppp_pcb *pcb, const char *reason) { * ipcp_lowerup - The lower layer is up. */ static void ipcp_lowerup(ppp_pcb *pcb) { +#if PPP_IPV4_SUPPORT && PPP_IPV6_SUPPORT + if (pcb->ipcp_disabled) { + return; + } +#endif fsm *f = &pcb->ipcp_fsm; fsm_lowerup(f); } diff --git a/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipv6cp.c b/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipv6cp.c index 11c18df743..f1592c6faf 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipv6cp.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip/src/netif/ppp/lwip_ipv6cp.c @@ -473,6 +473,11 @@ static void ipv6cp_close(ppp_pcb *pcb, const char *reason) { * ipv6cp_lowerup - The lower layer is up. */ static void ipv6cp_lowerup(ppp_pcb *pcb) { +#if PPP_IPV4_SUPPORT && PPP_IPV6_SUPPORT + if (pcb->ipv6cp_disabled) { + return; + } +#endif fsm_lowerup(&pcb->ipv6cp_fsm); } diff --git a/features/FEATURE_LWIP/lwip-interface/ppp_lwip.cpp b/features/FEATURE_LWIP/lwip-interface/ppp_lwip.cpp index 28fb61ecd6..d1646540ba 100644 --- a/features/FEATURE_LWIP/lwip-interface/ppp_lwip.cpp +++ b/features/FEATURE_LWIP/lwip-interface/ppp_lwip.cpp @@ -335,11 +335,13 @@ extern "C" nsapi_error_t ppp_lwip_if_init(struct netif *netif, const nsapi_ip_st } #endif +#if LWIP_IPV4 && LWIP_IPV6 if (stack == IPV4_STACK) { my_ppp_pcb->ipv6cp_disabled = true; } else if (stack == IPV6_STACK) { my_ppp_pcb->ipcp_disabled = true; } +#endif return NSAPI_ERROR_OK; }