176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright (c) 2003-2004 Leon Woestenberg <leon.woestenberg@axon.tv> 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * All rights reserved. 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Redistribution and use in source and binary forms, with or without modification, 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * are permitted provided that the following conditions are met: 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1. Redistributions of source code must retain the above copyright notice, 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * this list of conditions and the following disclaimer. 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 2. Redistributions in binary form must reproduce the above copyright notice, 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * this list of conditions and the following disclaimer in the documentation 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * and/or other materials provided with the distribution. 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 3. The name of the author may not be used to endorse or promote products 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * derived from this software without specific prior written permission. 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * OF SUCH DAMAGE. 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This file is part of the lwIP TCP/IP stack. 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Author: Adam Dunkels <adam@sics.se> 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __NETIF_ETHARP_H__ 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define __NETIF_ETHARP_H__ 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "lwip/opt.h" 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if LWIP_ARP || LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */ 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "lwip/pbuf.h" 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "lwip/ip_addr.h" 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "lwip/netif.h" 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "lwip/ip.h" 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef __cplusplus 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern "C" { 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef ETHARP_HWADDR_LEN 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHARP_HWADDR_LEN 6 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/bpstruct.h" 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 5876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_BEGIN 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct eth_addr { 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]); 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} PACK_STRUCT_STRUCT; 6276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_END 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/epstruct.h" 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/bpstruct.h" 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 7076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_BEGIN 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Ethernet header */ 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct eth_hdr { 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if ETH_PAD_SIZE 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(struct eth_addr dest); 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(struct eth_addr src); 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u16_t type); 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} PACK_STRUCT_STRUCT; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_END 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/epstruct.h" 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if ETHARP_SUPPORT_VLAN 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/bpstruct.h" 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 9276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_BEGIN 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** VLAN header inserted between ethernet header and payload 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * if 'type' in ethernet header is ETHTYPE_VLAN. 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * See IEEE802.Q */ 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct eth_vlan_hdr { 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u16_t prio_vid); 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u16_t tpid); 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} PACK_STRUCT_STRUCT; 10076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_END 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/epstruct.h" 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SIZEOF_VLAN_HDR 4 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF) 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* ETHARP_SUPPORT_VLAN */ 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/bpstruct.h" 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 11376d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_BEGIN 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** the ARP message, see RFC 826 ("Packet format") */ 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct etharp_hdr { 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u16_t hwtype); 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u16_t proto); 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u8_t hwlen); 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u8_t protolen); 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(u16_t opcode); 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(struct eth_addr shwaddr); 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(struct eth_addr dhwaddr); 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} PACK_STRUCT_STRUCT; 12676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanPACK_STRUCT_END 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef PACK_STRUCT_USE_INCLUDES 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman# include "arch/epstruct.h" 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SIZEOF_ETHARP_HDR 28 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 5 seconds period */ 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ARP_TMR_INTERVAL 5000 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHTYPE_ARP 0x0806U 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHTYPE_IP 0x0800U 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHTYPE_VLAN 0x8100U 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHTYPE_PPPOEDISC 0x8863U /* PPP Over Ethernet Discovery Stage */ 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHTYPE_PPPOE 0x8864U /* PPP Over Ethernet Session Stage */ 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** MEMCPY-like macro to copy to/from struct eth_addr's that are local variables 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * or known to be 32-bit aligned within the protocol header. */ 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef ETHADDR32_COPY 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHADDR32_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** MEMCPY-like macro to copy to/from struct eth_addr's that are no local 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * variables and known to be 16-bit aligned within the protocol header. */ 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef ETHADDR16_COPY 15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETHADDR16_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** ARP message types (opcodes) */ 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ARP_REQUEST 1 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ARP_REPLY 2 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * to a filter function that returns the correct netif when using multiple 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * netifs on one hardware interface where the netif's low-level receive 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * routine cannot decide for the correct netif (e.g. when mapping multiple 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * IP addresses to one hardware interface). 16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef LWIP_ARP_FILTER_NETIF 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define LWIP_ARP_FILTER_NETIF 0 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if ARP_QUEUEING 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** struct for queueing outgoing packets for unknown address 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * defined here to be accessed by memp.h 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct etharp_q_entry { 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct etharp_q_entry *next; 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct pbuf *p; 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* ARP_QUEUEING */ 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define etharp_init() /* Compatibility define, not init needed. */ 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid etharp_tmr(void); 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmans8_t etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr, 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct eth_addr **eth_ret, ip_addr_t **ip_ret); 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanerr_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr); 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanerr_t etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q); 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanerr_t etharp_request(struct netif *netif, ip_addr_t *ipaddr); 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * this is an ARP packet sent by a node in order to spontaneously cause other 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * nodes to update an entry in their ARP cache. 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if ETHARP_SUPPORT_STATIC_ENTRIES 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanerr_t etharp_add_static_entry(ip_addr_t *ipaddr, struct eth_addr *ethaddr); 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanerr_t etharp_remove_static_entry(ip_addr_t *ipaddr); 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if LWIP_AUTOIP 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanerr_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const struct eth_addr *ethdst_addr, 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const struct eth_addr *hwsrc_addr, const ip_addr_t *ipsrc_addr, 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const struct eth_addr *hwdst_addr, const ip_addr_t *ipdst_addr, 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const u16_t opcode); 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* LWIP_AUTOIP */ 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* LWIP_ARP */ 20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanerr_t ethernet_input(struct pbuf *p, struct netif *netif); 21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0) 21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern const struct eth_addr ethbroadcast, ethzero; 21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* LWIP_ARP || LWIP_ETHERNET */ 21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifdef __cplusplus 21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* __NETIF_ARP_H__ */ 222