mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-05-19 22:56:57 +08:00
Clean up LWIP_NETIF_HWADDRHINT a bit: create a struct holding the hint(s) and pass a pointer to that struct around. That way we are free to add more hints if required (e.g. see task #11620)
This commit is contained in:
@@ -63,11 +63,11 @@ extern "C" {
|
||||
#define LWIP_IP_CHECK_PBUF_REF_COUNT_FOR_TX(p) LWIP_ASSERT("p->ref == 1", (p)->ref == 1)
|
||||
#endif
|
||||
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
#define IP_PCB_ADDRHINT ;u8_t addr_hint
|
||||
#else
|
||||
#define IP_PCB_ADDRHINT
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
#if LWIP_NETIF_USE_HINTS
|
||||
#define IP_PCB_NETIFHINT ;struct netif_hint netif_hints
|
||||
#else /* LWIP_NETIF_USE_HINTS */
|
||||
#define IP_PCB_NETIFHINT
|
||||
#endif /* LWIP_NETIF_USE_HINTS */
|
||||
|
||||
/** This is the common part of all PCB types. It needs to be at the
|
||||
beginning of a PCB type definition. It is located here so that
|
||||
@@ -84,7 +84,7 @@ extern "C" {
|
||||
/* Time To Live */ \
|
||||
u8_t ttl \
|
||||
/* link layer address resolution hint */ \
|
||||
IP_PCB_ADDRHINT
|
||||
IP_PCB_NETIFHINT
|
||||
|
||||
struct ip_pcb {
|
||||
/* Common members of all PCB types */
|
||||
@@ -248,11 +248,11 @@ extern struct ip_globals ip_data;
|
||||
(IP_IS_V6(dest) ? \
|
||||
ip6_output_if(p, ip_2_ip6(src), LWIP_IP_HDRINCL, 0, 0, 0, netif) : \
|
||||
ip4_output_if(p, ip_2_ip4(src), LWIP_IP_HDRINCL, 0, 0, 0, netif))
|
||||
/** Output IP packet with addr_hint */
|
||||
#define ip_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) \
|
||||
/** Output IP packet with netif_hint */
|
||||
#define ip_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) \
|
||||
(IP_IS_V6(dest) ? \
|
||||
ip6_output_hinted(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, addr_hint) : \
|
||||
ip4_output_hinted(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, addr_hint))
|
||||
ip6_output_hinted(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, netif_hint) : \
|
||||
ip4_output_hinted(p, ip_2_ip4(src), ip_2_ip4(dest), ttl, tos, proto, v))
|
||||
/**
|
||||
* @ingroup ip
|
||||
* Get netif for address combination. See \ref ip6_route and \ref ip4_route
|
||||
@@ -280,8 +280,8 @@ err_t ip_input(struct pbuf *p, struct netif *inp);
|
||||
ip4_output_if(p, src, dest, ttl, tos, proto, netif)
|
||||
#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \
|
||||
ip4_output_if_src(p, src, dest, ttl, tos, proto, netif)
|
||||
#define ip_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) \
|
||||
ip4_output_hinted(p, src, dest, ttl, tos, proto, addr_hint)
|
||||
#define ip_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) \
|
||||
ip4_output_hinted(p, src, dest, ttl, tos, proto, netif_hint)
|
||||
#define ip_output_if_hdrincl(p, src, dest, netif) \
|
||||
ip4_output_if(p, src, LWIP_IP_HDRINCL, 0, 0, 0, netif)
|
||||
#define ip_route(src, dest) \
|
||||
@@ -300,8 +300,8 @@ err_t ip_input(struct pbuf *p, struct netif *inp);
|
||||
ip6_output_if(p, src, dest, ttl, tos, proto, netif)
|
||||
#define ip_output_if_src(p, src, dest, ttl, tos, proto, netif) \
|
||||
ip6_output_if_src(p, src, dest, ttl, tos, proto, netif)
|
||||
#define ip_output_hinted(p, src, dest, ttl, tos, proto, addr_hint) \
|
||||
ip6_output_hinted(p, src, dest, ttl, tos, proto, addr_hint)
|
||||
#define ip_output_hinted(p, src, dest, ttl, tos, proto, netif_hint) \
|
||||
ip6_output_hinted(p, src, dest, ttl, tos, proto, netif_hint)
|
||||
#define ip_output_if_hdrincl(p, src, dest, netif) \
|
||||
ip6_output_if(p, src, LWIP_IP_HDRINCL, 0, 0, 0, netif)
|
||||
#define ip_route(src, dest) \
|
||||
|
||||
@@ -75,10 +75,10 @@ err_t ip4_output_if(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *des
|
||||
u8_t ttl, u8_t tos, u8_t proto, struct netif *netif);
|
||||
err_t ip4_output_if_src(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest,
|
||||
u8_t ttl, u8_t tos, u8_t proto, struct netif *netif);
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
#if LWIP_NETIF_USE_HINTS
|
||||
err_t ip4_output_hinted(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest,
|
||||
u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint);
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
u8_t ttl, u8_t tos, u8_t proto, struct netif_hint *netif_hint);
|
||||
#endif /* LWIP_NETIF_USE_HINTS */
|
||||
#if IP_OPTIONS_SEND
|
||||
err_t ip4_output_if_opt(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest,
|
||||
u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options,
|
||||
|
||||
@@ -66,10 +66,10 @@ err_t ip6_output_if(struct pbuf *p, const ip6_addr_t *src, const ip6_add
|
||||
u8_t hl, u8_t tc, u8_t nexth, struct netif *netif);
|
||||
err_t ip6_output_if_src(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest,
|
||||
u8_t hl, u8_t tc, u8_t nexth, struct netif *netif);
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
#if LWIP_NETIF_USE_HINTS
|
||||
err_t ip6_output_hinted(struct pbuf *p, const ip6_addr_t *src, const ip6_addr_t *dest,
|
||||
u8_t hl, u8_t tc, u8_t nexth, u8_t *addr_hint);
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
u8_t hl, u8_t tc, u8_t nexth, struct netif_hint *netif_hint);
|
||||
#endif /* LWIP_NETIF_USE_HINTS */
|
||||
#if LWIP_IPV6_MLD
|
||||
err_t ip6_options_add_hbh_ra(struct pbuf * p, u8_t nexth, u8_t value);
|
||||
#endif /* LWIP_IPV6_MLD */
|
||||
|
||||
@@ -225,6 +225,15 @@ u8_t netif_alloc_client_data_id(void);
|
||||
#define netif_get_client_data(netif, id) (netif)->client_data[(id)]
|
||||
#endif
|
||||
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
#define LWIP_NETIF_USE_HINTS 1
|
||||
struct netif_hint {
|
||||
u8_t addr_hint;
|
||||
};
|
||||
#else /* LWIP_NETIF_HWADDRHINT */
|
||||
#define LWIP_NETIF_USE_HINTS 0
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
|
||||
/** Generic data structure used for all lwIP network interfaces.
|
||||
* The following fields should be filled in by the initialization
|
||||
* function for the device driver: hwaddr_len, hwaddr[], mtu, flags */
|
||||
@@ -345,9 +354,9 @@ struct netif {
|
||||
filter table of the ethernet MAC. */
|
||||
netif_mld_mac_filter_fn mld_mac_filter;
|
||||
#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
u8_t *addr_hint;
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
#if LWIP_NETIF_USE_HINTS
|
||||
struct netif_hint *hints;
|
||||
#endif /* LWIP_NETIF_USE_HINTS */
|
||||
#if ENABLE_LOOPBACK
|
||||
/* List of packets to be queued for ourselves. */
|
||||
struct pbuf *loop_first;
|
||||
@@ -501,9 +510,11 @@ err_t netif_add_ip6_address(struct netif *netif, const ip6_addr_t *ip6addr, s8_t
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
#define NETIF_SET_HWADDRHINT(netif, hint) ((netif)->addr_hint = (hint))
|
||||
#define NETIF_SET_HINTS(netif, netifhint) (netif)->hints = (netifhint)
|
||||
#define NETIF_RESET_HINTS(netif) (netif)->hints = NULL
|
||||
#else /* LWIP_NETIF_HWADDRHINT */
|
||||
#define NETIF_SET_HWADDRHINT(netif, hint)
|
||||
#define NETIF_SET_HINTS(netif, netifhint)
|
||||
#define NETIF_RESET_HINTS(netif)
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
|
||||
u8_t netif_name_to_index(const char *name);
|
||||
|
||||
Reference in New Issue
Block a user