mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-08-09 09:03:49 +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:
@@ -118,10 +118,10 @@ static u8_t etharp_cached_entry;
|
||||
#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
|
||||
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
#define ETHARP_SET_HINT(netif, hint) if (((netif) != NULL) && ((netif)->addr_hint != NULL)) \
|
||||
*((netif)->addr_hint) = (hint);
|
||||
#define ETHARP_SET_ADDRHINT(netif, addrhint) do { if (((netif) != NULL) && ((netif)->hints != NULL)) { \
|
||||
(netif)->hints->addr_hint = (addrhint); }} while(0)
|
||||
#else /* LWIP_NETIF_HWADDRHINT */
|
||||
#define ETHARP_SET_HINT(netif, hint) (etharp_cached_entry = (hint))
|
||||
#define ETHARP_SET_ADDRHINT(netif, addrhint) (etharp_cached_entry = (addrhint))
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
|
||||
|
||||
@@ -850,9 +850,9 @@ etharp_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr)
|
||||
}
|
||||
}
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
if (netif->addr_hint != NULL) {
|
||||
if (netif->hints != NULL) {
|
||||
/* per-pcb cached entry was given */
|
||||
u8_t etharp_cached_entry = *(netif->addr_hint);
|
||||
u8_t etharp_cached_entry = netif->hints->addr_hint;
|
||||
if (etharp_cached_entry < ARP_TABLE_SIZE) {
|
||||
#endif /* LWIP_NETIF_HWADDRHINT */
|
||||
if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) &&
|
||||
@@ -878,7 +878,7 @@ etharp_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr)
|
||||
#endif
|
||||
(ip4_addr_cmp(dst_addr, &arp_table[i].ipaddr))) {
|
||||
/* found an existing, stable entry */
|
||||
ETHARP_SET_HINT(netif, i);
|
||||
ETHARP_SET_ADDRHINT(netif, i);
|
||||
return etharp_output_to_arp_index(netif, q, i);
|
||||
}
|
||||
}
|
||||
@@ -988,7 +988,7 @@ etharp_query(struct netif *netif, const ip4_addr_t *ipaddr, struct pbuf *q)
|
||||
/* stable entry? */
|
||||
if (arp_table[i].state >= ETHARP_STATE_STABLE) {
|
||||
/* we have a valid IP->Ethernet address mapping */
|
||||
ETHARP_SET_HINT(netif, i);
|
||||
ETHARP_SET_ADDRHINT(netif, i);
|
||||
/* send the packet */
|
||||
result = ethernet_output(netif, q, srcaddr, &(arp_table[i].ethaddr), ETHTYPE_IP);
|
||||
/* pending entry? (either just created or already pending */
|
||||
|
||||
@@ -1006,7 +1006,7 @@ ip4_output(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest,
|
||||
return ip4_output_if(p, src, dest, ttl, tos, proto, netif);
|
||||
}
|
||||
|
||||
#if LWIP_NETIF_HWADDRHINT
|
||||
#if LWIP_NETIF_USE_HINTS
|
||||
/** Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint
|
||||
* before calling ip_output_if.
|
||||
*
|
||||
@@ -1019,7 +1019,7 @@ ip4_output(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest,
|
||||
* @param ttl the TTL value to be set in the IP header
|
||||
* @param tos the TOS value to be set in the IP header
|
||||
* @param proto the PROTOCOL to be set in the IP header
|
||||
* @param addr_hint address hint pointer set to netif->addr_hint before
|
||||
* @param netif_hint netif output hint pointer set to netif->hint before
|
||||
* calling ip_output_if()
|
||||
*
|
||||
* @return ERR_RTE if no route is found
|
||||
@@ -1027,7 +1027,7 @@ ip4_output(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest,
|
||||
*/
|
||||
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)
|
||||
u8_t ttl, u8_t tos, u8_t proto, struct netif_hint *netif_hint)
|
||||
{
|
||||
struct netif *netif;
|
||||
err_t err;
|
||||
@@ -1041,13 +1041,13 @@ ip4_output_hinted(struct pbuf *p, const ip4_addr_t *src, const ip4_addr_t *dest,
|
||||
return ERR_RTE;
|
||||
}
|
||||
|
||||
NETIF_SET_HWADDRHINT(netif, addr_hint);
|
||||
NETIF_SET_HINTS(netif, netif_hint);
|
||||
err = ip4_output_if(p, src, dest, ttl, tos, proto, netif);
|
||||
NETIF_SET_HWADDRHINT(netif, NULL);
|
||||
NETIF_RESET_HINTS(netif);
|
||||
|
||||
return err;
|
||||
}
|
||||
#endif /* LWIP_NETIF_HWADDRHINT*/
|
||||
#endif /* LWIP_NETIF_USE_HINTS*/
|
||||
|
||||
#if IP_DEBUG
|
||||
/* Print an IP header by using LWIP_DEBUGF
|
||||
|
||||
Reference in New Issue
Block a user