Classes |
struct | eth_addr |
struct | eth_hdr |
| Ethernet header. More...
|
struct | etharp_hdr |
| the ARP message, see RFC 826 ("Packet format") More...
|
Defines |
#define | ETHARP_HWADDR_LEN 6 |
#define | SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) |
#define | SIZEOF_ETHARP_HDR 28 |
#define | SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) |
#define | ARP_TMR_INTERVAL 5000 |
| 5 seconds period
|
#define | ETHTYPE_ARP 0x0806U |
#define | ETHTYPE_IP 0x0800U |
#define | ETHTYPE_VLAN 0x8100U |
#define | ETHTYPE_PPPOEDISC 0x8863U |
#define | ETHTYPE_PPPOE 0x8864U |
#define | ETHADDR32_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) |
| MEMCPY-like macro to copy to/from struct eth_addr's that are local variables or known to be 32-bit aligned within the protocol header.
|
#define | ETHADDR16_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) |
| MEMCPY-like macro to copy to/from struct eth_addr's that are no local variables and known to be 16-bit aligned within the protocol header.
|
#define | ARP_REQUEST 1 |
| ARP message types (opcodes).
|
#define | ARP_REPLY 2 |
#define | LWIP_ARP_FILTER_NETIF 0 |
| Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) to a filter function that returns the correct netif when using multiple netifs on one hardware interface where the netif's low-level receive routine cannot decide for the correct netif (e.g.
|
#define | etharp_init() |
#define | etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) |
| For Ethernet network interfaces, we might want to send "gratuitous ARP"; this is an ARP packet sent by a node in order to spontaneously cause other nodes to update an entry in their ARP cache.
|
#define | eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0) |
Functions |
void | etharp_tmr (void) |
| Clears expired entries in the ARP table.
|
s8_t | etharp_find_addr (struct netif *netif, ip_addr_t *ipaddr, struct eth_addr **eth_ret, ip_addr_t **ip_ret) |
| Finds (stable) ethernet/IP address pair from ARP table using interface and IP address index.
|
err_t | etharp_output (struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr) |
| Resolve and fill-in Ethernet address header for outgoing IP packet.
|
err_t | etharp_query (struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q) |
| Send an ARP request for the given IP address and/or queue a packet.
|
err_t | etharp_request (struct netif *netif, ip_addr_t *ipaddr) |
| Send an ARP request packet asking for ipaddr.
|
err_t | ethernet_input (struct pbuf *p, struct netif *netif) |
| Process received ethernet frames.
|
Variables |
PACK_STRUCT_BEGIN struct eth_addr | PACK_STRUCT_STRUCT |
| Ethernet header.
|
struct eth_addr ethbroadcast | ethzero |
Resolve and fill-in Ethernet address header for outgoing IP packet.
For IP multicast and broadcast, corresponding Ethernet addresses are selected and the packet is transmitted on the link.
For unicast addresses, the packet is submitted to etharp_query(). In case the IP address is outside the local network, the IP address of the gateway is used.
- Parameters:
-
| netif | The lwIP network interface which the IP packet will be sent on. |
| q | The pbuf(s) containing the IP packet to be sent. |
| ipaddr | The IP address of the packet destination. |
- Returns:
- ERR_RTE No route to destination (no gateway to external networks), or the return type of either etharp_query() or etharp_send_ip().
Send an ARP request for the given IP address and/or queue a packet.
If the IP address was not yet in the cache, a pending ARP cache entry is added and an ARP request is sent for the given address. The packet is queued on this entry.
If the IP address was already pending in the cache, a new ARP request is sent for the given address. The packet is queued on this entry.
If the IP address was already stable in the cache, and a packet is given, it is directly sent and no ARP request is sent out.
If the IP address was already stable in the cache, and no packet is given, an ARP request is sent out.
- Parameters:
-
| netif | The lwIP network interface on which ipaddr must be queried for. |
| ipaddr | The IP address to be resolved. |
| q | If non-NULL, a pbuf that must be delivered to the IP address. q is not freed by this function. |
- Note:
- q must only be ONE packet, not a packet queue!
- Returns:
- ERR_BUF Could not make room for Ethernet header.
- ERR_MEM Hardware address unknown, and no more ARP entries available to query for address or queue the packet.
- ERR_MEM Could not queue packet due to memory shortage.
- ERR_RTE No route to destination (no gateway to external networks).
- ERR_ARG Non-unicast address given, those will not appear in ARP cache.