|
|
|
|
@ -102,7 +102,7 @@ struct etharp_entry {
|
|
|
|
|
*/ |
|
|
|
|
struct etharp_q_entry *q; |
|
|
|
|
#endif |
|
|
|
|
struct ip_addr ipaddr; |
|
|
|
|
ip_addr_t ipaddr; |
|
|
|
|
struct eth_addr ethaddr; |
|
|
|
|
enum etharp_state state; |
|
|
|
|
u8_t ctime; |
|
|
|
|
@ -123,12 +123,12 @@ static u8_t etharp_cached_entry;
|
|
|
|
|
#if LWIP_NETIF_HWADDRHINT |
|
|
|
|
#define NETIF_SET_HINT(netif, hint) if (((netif) != NULL) && ((netif)->addr_hint != NULL)) \ |
|
|
|
|
*((netif)->addr_hint) = (hint); |
|
|
|
|
static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif); |
|
|
|
|
static s8_t find_entry(ip_addr_t *ipaddr, u8_t flags, struct netif *netif); |
|
|
|
|
#else /* LWIP_NETIF_HWADDRHINT */ |
|
|
|
|
static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags); |
|
|
|
|
static s8_t find_entry(ip_addr_t *ipaddr, u8_t flags); |
|
|
|
|
#endif /* LWIP_NETIF_HWADDRHINT */ |
|
|
|
|
|
|
|
|
|
static err_t update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags); |
|
|
|
|
static err_t update_arp_entry(struct netif *netif, ip_addr_t *ipaddr, struct eth_addr *ethaddr, u8_t flags); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Some checks, instead of etharp_init(): */ |
|
|
|
|
@ -229,9 +229,9 @@ etharp_tmr(void)
|
|
|
|
|
*/ |
|
|
|
|
static s8_t |
|
|
|
|
#if LWIP_NETIF_HWADDRHINT |
|
|
|
|
find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif) |
|
|
|
|
find_entry(ip_addr_t *ipaddr, u8_t flags, struct netif *netif) |
|
|
|
|
#else /* LWIP_NETIF_HWADDRHINT */ |
|
|
|
|
find_entry(struct ip_addr *ipaddr, u8_t flags) |
|
|
|
|
find_entry(ip_addr_t *ipaddr, u8_t flags) |
|
|
|
|
#endif /* LWIP_NETIF_HWADDRHINT */ |
|
|
|
|
{ |
|
|
|
|
s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; |
|
|
|
|
@ -468,7 +468,7 @@ etharp_send_ip(struct netif *netif, struct pbuf *p, struct eth_addr *src, struct
|
|
|
|
|
* @see pbuf_free() |
|
|
|
|
*/ |
|
|
|
|
static err_t |
|
|
|
|
update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags) |
|
|
|
|
update_arp_entry(struct netif *netif, ip_addr_t *ipaddr, struct eth_addr *ethaddr, u8_t flags) |
|
|
|
|
{ |
|
|
|
|
s8_t i; |
|
|
|
|
u8_t k; |
|
|
|
|
@ -545,8 +545,8 @@ update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *e
|
|
|
|
|
* @return table index if found, -1 otherwise |
|
|
|
|
*/ |
|
|
|
|
s8_t |
|
|
|
|
etharp_find_addr(struct netif *netif, struct ip_addr *ipaddr, |
|
|
|
|
struct eth_addr **eth_ret, struct ip_addr **ip_ret) |
|
|
|
|
etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr, |
|
|
|
|
struct eth_addr **eth_ret, ip_addr_t **ip_ret) |
|
|
|
|
{ |
|
|
|
|
s8_t i; |
|
|
|
|
|
|
|
|
|
@ -631,7 +631,7 @@ etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p)
|
|
|
|
|
struct etharp_hdr *hdr; |
|
|
|
|
struct eth_hdr *ethhdr; |
|
|
|
|
/* these are aligned properly, whereas the ARP header fields might not be */ |
|
|
|
|
struct ip_addr sipaddr, dipaddr; |
|
|
|
|
ip_addr_t sipaddr, dipaddr; |
|
|
|
|
u8_t i; |
|
|
|
|
u8_t for_us; |
|
|
|
|
#if LWIP_AUTOIP |
|
|
|
|
@ -662,7 +662,7 @@ etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p)
|
|
|
|
|
|
|
|
|
|
/* RFC 826 "Packet Reception": */ |
|
|
|
|
if ((hdr->hwtype != htons(HWTYPE_ETHERNET)) || |
|
|
|
|
(hdr->_hwlen_protolen != htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr))) || |
|
|
|
|
(hdr->_hwlen_protolen != htons((ETHARP_HWADDR_LEN << 8) | sizeof(ip_addr_t))) || |
|
|
|
|
(hdr->proto != htons(ETHTYPE_IP)) || |
|
|
|
|
(ethhdr->type != htons(ETHTYPE_ARP))) { |
|
|
|
|
LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, |
|
|
|
|
@ -724,8 +724,8 @@ etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p)
|
|
|
|
|
that would allocate a new pbuf. */ |
|
|
|
|
hdr->opcode = htons(ARP_REPLY); |
|
|
|
|
|
|
|
|
|
SMEMCPY(&hdr->dipaddr, &hdr->sipaddr, sizeof(struct ip_addr)); |
|
|
|
|
SMEMCPY(&hdr->sipaddr, &netif->ip_addr, sizeof(struct ip_addr)); |
|
|
|
|
SMEMCPY(&hdr->dipaddr, &hdr->sipaddr, sizeof(ip_addr_t)); |
|
|
|
|
SMEMCPY(&hdr->sipaddr, &netif->ip_addr, sizeof(ip_addr_t)); |
|
|
|
|
|
|
|
|
|
LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", |
|
|
|
|
(netif->hwaddr_len == ETHARP_HWADDR_LEN)); |
|
|
|
|
@ -802,7 +802,7 @@ etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p)
|
|
|
|
|
* or the return type of either etharp_query() or etharp_send_ip(). |
|
|
|
|
*/ |
|
|
|
|
err_t |
|
|
|
|
etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr) |
|
|
|
|
etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr) |
|
|
|
|
{ |
|
|
|
|
struct eth_addr *dest, mcastaddr; |
|
|
|
|
|
|
|
|
|
@ -893,7 +893,7 @@ etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr)
|
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
err_t |
|
|
|
|
etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q) |
|
|
|
|
etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q) |
|
|
|
|
{ |
|
|
|
|
struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr; |
|
|
|
|
err_t result = ERR_MEM; |
|
|
|
|
@ -1049,8 +1049,8 @@ static
|
|
|
|
|
err_t |
|
|
|
|
etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, |
|
|
|
|
const struct eth_addr *ethdst_addr, |
|
|
|
|
const struct eth_addr *hwsrc_addr, const struct ip_addr *ipsrc_addr, |
|
|
|
|
const struct eth_addr *hwdst_addr, const struct ip_addr *ipdst_addr, |
|
|
|
|
const struct eth_addr *hwsrc_addr, const ip_addr_t *ipsrc_addr, |
|
|
|
|
const struct eth_addr *hwdst_addr, const ip_addr_t *ipdst_addr, |
|
|
|
|
const u16_t opcode) |
|
|
|
|
{ |
|
|
|
|
struct pbuf *p; |
|
|
|
|
@ -1103,13 +1103,13 @@ etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr,
|
|
|
|
|
} |
|
|
|
|
/* Copy struct ip_addr2 to aligned ip_addr, to support compilers without
|
|
|
|
|
* structure packing. */
|
|
|
|
|
SMEMCPY(&hdr->sipaddr, ipsrc_addr, sizeof(struct ip_addr)); |
|
|
|
|
SMEMCPY(&hdr->dipaddr, ipdst_addr, sizeof(struct ip_addr)); |
|
|
|
|
SMEMCPY(&hdr->sipaddr, ipsrc_addr, sizeof(ip_addr_t)); |
|
|
|
|
SMEMCPY(&hdr->dipaddr, ipdst_addr, sizeof(ip_addr_t)); |
|
|
|
|
|
|
|
|
|
hdr->hwtype = htons(HWTYPE_ETHERNET); |
|
|
|
|
hdr->proto = htons(ETHTYPE_IP); |
|
|
|
|
/* set hwlen and protolen together */ |
|
|
|
|
hdr->_hwlen_protolen = htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr)); |
|
|
|
|
hdr->_hwlen_protolen = htons((ETHARP_HWADDR_LEN << 8) | sizeof(ip_addr_t)); |
|
|
|
|
|
|
|
|
|
ethhdr->type = htons(ETHTYPE_ARP); |
|
|
|
|
/* send ARP query */ |
|
|
|
|
@ -1133,7 +1133,7 @@ etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr,
|
|
|
|
|
* any other err_t on failure |
|
|
|
|
*/ |
|
|
|
|
err_t |
|
|
|
|
etharp_request(struct netif *netif, struct ip_addr *ipaddr) |
|
|
|
|
etharp_request(struct netif *netif, ip_addr_t *ipaddr) |
|
|
|
|
{ |
|
|
|
|
LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); |
|
|
|
|
return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, |
|
|
|
|
|