From 8e5663a32fec755a4b5b7efe8e0db5285e3f2d7f Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Mon, 29 Feb 2016 22:17:42 +0100 Subject: [PATCH] Minor: Avoid ip_input() call indirection for when only IPv4 or IPv6 are enabled --- src/core/ip.c | 26 +++++++------------------- src/include/lwip/ip.h | 13 +++++++++++-- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/core/ip.c b/src/core/ip.c index 4f431be6..aa42fba7 100644 --- a/src/core/ip.c +++ b/src/core/ip.c @@ -43,7 +43,11 @@ #include "lwip/ip_addr.h" #include "lwip/ip.h" +/** Global data for both IPv4 and IPv6 */ +struct ip_globals ip_data; + #if LWIP_IPV4 && LWIP_IPV6 + const ip_addr_t ip_addr_any_type = IPADDR_ANY_TYPE_INIT; /** Convert IP address string (both versions) to numeric. @@ -79,19 +83,10 @@ ipaddr_aton(const char *cp, ip_addr_t *addr) return 0; } -#endif /* LWIP_IPV4 && LWIP_IPV6 */ - -/** Global data for both IPv4 and IPv6 */ -struct ip_globals ip_data; - -/* If both IP versions are enabled, this function can dispatch packets to the correct one. - * If only IPv4 is enabled, this directly maps at ip4_input. - * May be used as netif input function. - */ +/* If both IP versions are enabled, this function can dispatch packets to the correct one. */ err_t ip_input(struct pbuf *p, struct netif *inp) { -#if LWIP_IPV4 && LWIP_IPV6 if (p != NULL) { if (IP_HDR_GET_VERSION(p->payload) == 6) { return ip6_input(p, inp); @@ -99,15 +94,8 @@ ip_input(struct pbuf *p, struct netif *inp) return ip4_input(p, inp); } return ERR_VAL; -#else /* LWIP_IPV4 && LWIP_IPV6 */ - -#if LWIP_IPV4 - return ip4_input(p, inp); -#else /* LWIP_IPV4 */ - return ip6_input(p, inp); -#endif /* LWIP_IPV4 */ - -#endif /* LWIP_IPV4 && LWIP_IPV6 */ } +#endif /* LWIP_IPV4 && LWIP_IPV6 */ + #endif /* LWIP_IPV4 || LWIP_IPV6 */ diff --git a/src/include/lwip/ip.h b/src/include/lwip/ip.h index f1bb0ed7..d42fe681 100644 --- a/src/include/lwip/ip.h +++ b/src/include/lwip/ip.h @@ -249,7 +249,11 @@ extern struct ip_globals ip_data; ip6_netif_get_local_ip(netif, ip_2_ip6(dest)) : \ ip4_netif_get_local_ip(netif)) #define ip_debug_print(is_ipv6, p) ((is_ipv6) ? ip6_debug_print(p) : ip4_debug_print(p)) + +err_t ip_input(struct pbuf *p, struct netif *inp); + #elif LWIP_IPV4 /* LWIP_IPV4 && LWIP_IPV6 */ + #define ip_output(p, src, dest, ttl, tos, proto) \ ip4_output(p, src, dest, ttl, tos, proto) #define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ @@ -263,7 +267,11 @@ extern struct ip_globals ip_data; #define ip_netif_get_local_ip(netif, dest) \ ip4_netif_get_local_ip(netif) #define ip_debug_print(is_ipv6, p) ip4_debug_print(p) + +#define ip_input ip4_input + #elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */ + #define ip_output(p, src, dest, ttl, tos, proto) \ ip6_output(p, src, dest, ttl, tos, proto) #define ip_output_if(p, src, dest, ttl, tos, proto, netif) \ @@ -277,6 +285,9 @@ extern struct ip_globals ip_data; #define ip_netif_get_local_ip(netif, dest) \ ip6_netif_get_local_ip(netif, dest) #define ip_debug_print(is_ipv6, p) ip6_debug_print(p) + +#define ip_input ip6_input + #endif /* LWIP_IPV6 */ #define ip_route_get_local_ip(src, dest, netif, ipaddr) do { \ @@ -284,8 +295,6 @@ extern struct ip_globals ip_data; (ipaddr) = ip_netif_get_local_ip(netif, dest); \ }while(0) -err_t ip_input(struct pbuf *p, struct netif *inp); - #ifdef __cplusplus } #endif