43 #if LWIP_ARP || LWIP_ETHERNET
59 #ifdef LWIP_HOOK_FILENAME
60 #include LWIP_HOOK_FILENAME
63 const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}};
64 const struct eth_addr ethzero = {{0,0,0,0,0,0}};
85 #if LWIP_ARP || ETHARP_SUPPORT_VLAN || LWIP_IPV6
102 (
unsigned)ethhdr->dest.addr[0], (
unsigned)ethhdr->dest.addr[1], (
unsigned)ethhdr->dest.addr[2],
103 (
unsigned)ethhdr->dest.addr[3], (
unsigned)ethhdr->dest.addr[4], (
unsigned)ethhdr->dest.addr[5],
104 (
unsigned)ethhdr->src.addr[0], (
unsigned)ethhdr->src.addr[1], (
unsigned)ethhdr->src.addr[2],
105 (
unsigned)ethhdr->src.addr[3], (
unsigned)ethhdr->src.addr[4], (
unsigned)ethhdr->src.addr[5],
109 #if ETHARP_SUPPORT_VLAN
117 goto free_and_return;
119 #if defined(LWIP_HOOK_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN)
120 #ifdef LWIP_HOOK_VLAN_CHECK
121 if (!LWIP_HOOK_VLAN_CHECK(
netif, ethhdr, vlan)) {
122 #elif defined(ETHARP_VLAN_CHECK_FN)
123 if (!ETHARP_VLAN_CHECK_FN(ethhdr, vlan)) {
124 #elif defined(ETHARP_VLAN_CHECK)
125 if (
VLAN_ID(vlan) != ETHARP_VLAN_CHECK) {
137 #if LWIP_ARP_FILTER_NETIF
141 if (ethhdr->dest.addr[0] & 1) {
166 #if LWIP_IPV4 && LWIP_ARP
170 goto free_and_return;
175 (
"ethernet_input: IPv4 packet dropped, too short (%"S16_F"/%"S16_F")\n",
178 goto free_and_return;
187 goto free_and_return;
192 (
"ethernet_input: ARP response packet dropped, too short (%"S16_F"/%"S16_F")\n",
197 goto free_and_return;
200 etharp_input(p,
netif);
206 pppoe_disc_input(
netif, p);
210 pppoe_data_input(
netif, p);
219 (
"ethernet_input: IPv6 packet dropped, too short (%"S16_F"/%"S16_F")\n",
221 goto free_and_return;
230 #ifdef LWIP_HOOK_UNKNOWN_ETH_PROTOCOL
231 if(LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(p,
netif) ==
ERR_OK) {
238 goto free_and_return;
272 #if ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET)
274 if (vlan_prio_vid >= 0) {
277 LWIP_ASSERT(
"prio_vid must be <= 0xFFFF", vlan_prio_vid <= 0xFFFF);
280 goto pbuf_header_failed;
283 vlanhdr->tpid = eth_type_be;
291 goto pbuf_header_failed;
296 ethhdr->type = eth_type_be;
300 LWIP_ASSERT(
"netif->hwaddr_len must be 6 for ethernet_output!",
303 (
"ethernet_output: sending packet %p\n", (
void *)p));
310 (
"ethernet_output: could not allocate room for header.\n"));