43#if LWIP_ARP || LWIP_ETHERNET
59#ifdef LWIP_HOOK_FILENAME
60#include LWIP_HOOK_FILENAME
63const struct eth_addr ethbroadcast = {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}};
64const struct eth_addr ethzero = {{0, 0, 0, 0, 0, 0}};
85#if LWIP_ARP || ETHARP_SUPPORT_VLAN || LWIP_IPV6
100 ethhdr = (
struct eth_hdr *)
p->payload;
103 (
unsigned char)ethhdr->dest.addr[0], (
unsigned char)ethhdr->dest.addr[1], (
unsigned char)ethhdr->dest.addr[2],
104 (
unsigned char)ethhdr->dest.addr[3], (
unsigned char)ethhdr->dest.addr[4], (
unsigned char)ethhdr->dest.addr[5],
105 (
unsigned char)ethhdr->src.addr[0], (
unsigned char)ethhdr->src.addr[1], (
unsigned char)ethhdr->src.addr[2],
106 (
unsigned char)ethhdr->src.addr[3], (
unsigned char)ethhdr->src.addr[4], (
unsigned char)ethhdr->src.addr[5],
110#if ETHARP_SUPPORT_VLAN
119 goto free_and_return;
121#if defined(LWIP_HOOK_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK) || defined(ETHARP_VLAN_CHECK_FN)
122#ifdef LWIP_HOOK_VLAN_CHECK
123 if (!LWIP_HOOK_VLAN_CHECK(
netif, ethhdr, vlan)) {
124#elif defined(ETHARP_VLAN_CHECK_FN)
125 if (!ETHARP_VLAN_CHECK_FN(ethhdr, vlan)) {
126#elif defined(ETHARP_VLAN_CHECK)
127 if (
VLAN_ID(vlan) != ETHARP_VLAN_CHECK) {
138#if LWIP_ARP_FILTER_NETIF
146 if (ethhdr->dest.addr[0] & 1) {
171#if LWIP_IPV4 && LWIP_ARP
175 goto free_and_return;
180 (
"ethernet_input: IPv4 packet dropped, too short (%"U16_F"/%"U16_F")\n",
181 p->tot_len, next_hdr_offset));
183 goto free_and_return;
192 goto free_and_return;
197 (
"ethernet_input: ARP response packet dropped, too short (%"U16_F"/%"U16_F")\n",
198 p->tot_len, next_hdr_offset));
202 goto free_and_return;
211 pppoe_disc_input(
netif,
p);
215 pppoe_data_input(
netif,
p);
224 (
"ethernet_input: IPv6 packet dropped, too short (%"U16_F"/%"U16_F")\n",
225 p->tot_len, next_hdr_offset));
226 goto free_and_return;
235#ifdef LWIP_HOOK_UNKNOWN_ETH_PROTOCOL
236 if (LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(
p,
netif) ==
ERR_OK) {
243 goto free_and_return;
276#if ETHARP_SUPPORT_VLAN && (defined(LWIP_HOOK_VLAN_SET) || LWIP_VLAN_PCP)
278#ifdef LWIP_HOOK_VLAN_SET
279 vlan_prio_vid = LWIP_HOOK_VLAN_SET(
netif,
p,
src,
dst, eth_type);
282 if (
netif->hints && (
netif->hints->tci >= 0)) {
286 if (vlan_prio_vid >= 0) {
289 LWIP_ASSERT(
"prio_vid must be <= 0xFFFF", vlan_prio_vid <= 0xFFFF);
292 goto pbuf_header_failed;
295 vlanhdr->tpid = eth_type_be;
303 goto pbuf_header_failed;
309 ethhdr = (
struct eth_hdr *)
p->payload;
310 ethhdr->type = eth_type_be;
314 LWIP_ASSERT(
"netif->hwaddr_len must be 6 for ethernet_output!",
317 (
"ethernet_output: sending packet %p\n", (
void *)
p));
324 (
"ethernet_output: could not allocate room for header.\n"));
#define LWIP_DEBUGF(debug, message)
#define LWIP_ASSERT(message, assertion)
#define MIB2_STATS_NETIF_INC(n, x)
GLuint GLuint GLsizei GLenum type
#define LWIP_DBG_LEVEL_SERIOUS
#define LWIP_DBG_LEVEL_WARNING
#define LWIP_ASSERT_CORE_LOCKED()
#define SMEMCPY(dst, src, len)
#define NETIF_FLAG_ETHARP
u8_t pbuf_free(struct pbuf *p)
#define LL_IP6_MULTICAST_ADDR_0
#define LL_IP4_MULTICAST_ADDR_2
#define eth_addr_cmp(addr1, addr2)
#define VLAN_ID(vlan_hdr)
#define LL_IP4_MULTICAST_ADDR_1
#define LL_IP6_MULTICAST_ADDR_1
#define LL_IP4_MULTICAST_ADDR_0
#define netif_get_index(netif)
u8_t pbuf_add_header(struct pbuf *p, size_t header_size_increment)
u8_t pbuf_remove_header(struct pbuf *p, size_t header_size_decrement)
#define PBUF_FLAG_LLBCAST
#define PBUF_FLAG_LLMCAST
#define LINK_STATS_INC(x)
#define ETHARP_STATS_INC(x)
netif_linkoutput_fn linkoutput