1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * INET An implementation of the TCP/IP protocol suite for the LINUX 4*4882a593Smuzhiyun * operating system. INET is implemented using the BSD Socket 5*4882a593Smuzhiyun * interface as the means of communication with the user level. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Global definitions for the ARP (RFC 826) protocol. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * Version: @(#)if_arp.h 1.0.1 04/16/93 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun * Authors: Original taken from Berkeley UNIX 4.3, (c) UCB 1986-1988 12*4882a593Smuzhiyun * Portions taken from the KA9Q/NOS (v2.00m PA0GRI) source. 13*4882a593Smuzhiyun * Ross Biro 14*4882a593Smuzhiyun * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> 15*4882a593Smuzhiyun * Florian La Roche, 16*4882a593Smuzhiyun * Jonathan Layes <layes@loran.com> 17*4882a593Smuzhiyun * Arnaldo Carvalho de Melo <acme@conectiva.com.br> ARPHRD_HWX25 18*4882a593Smuzhiyun */ 19*4882a593Smuzhiyun #ifndef _LINUX_IF_ARP_H 20*4882a593Smuzhiyun #define _LINUX_IF_ARP_H 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #include <linux/skbuff.h> 23*4882a593Smuzhiyun #include <uapi/linux/if_arp.h> 24*4882a593Smuzhiyun arp_hdr(const struct sk_buff * skb)25*4882a593Smuzhiyunstatic inline struct arphdr *arp_hdr(const struct sk_buff *skb) 26*4882a593Smuzhiyun { 27*4882a593Smuzhiyun return (struct arphdr *)skb_network_header(skb); 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun arp_hdr_len(const struct net_device * dev)30*4882a593Smuzhiyunstatic inline unsigned int arp_hdr_len(const struct net_device *dev) 31*4882a593Smuzhiyun { 32*4882a593Smuzhiyun switch (dev->type) { 33*4882a593Smuzhiyun #if IS_ENABLED(CONFIG_FIREWIRE_NET) 34*4882a593Smuzhiyun case ARPHRD_IEEE1394: 35*4882a593Smuzhiyun /* ARP header, device address and 2 IP addresses */ 36*4882a593Smuzhiyun return sizeof(struct arphdr) + dev->addr_len + sizeof(u32) * 2; 37*4882a593Smuzhiyun #endif 38*4882a593Smuzhiyun default: 39*4882a593Smuzhiyun /* ARP header, plus 2 device addresses, plus 2 IP addresses. */ 40*4882a593Smuzhiyun return sizeof(struct arphdr) + (dev->addr_len + sizeof(u32)) * 2; 41*4882a593Smuzhiyun } 42*4882a593Smuzhiyun } 43*4882a593Smuzhiyun dev_is_mac_header_xmit(const struct net_device * dev)44*4882a593Smuzhiyunstatic inline bool dev_is_mac_header_xmit(const struct net_device *dev) 45*4882a593Smuzhiyun { 46*4882a593Smuzhiyun switch (dev->type) { 47*4882a593Smuzhiyun case ARPHRD_TUNNEL: 48*4882a593Smuzhiyun case ARPHRD_TUNNEL6: 49*4882a593Smuzhiyun case ARPHRD_SIT: 50*4882a593Smuzhiyun case ARPHRD_IPGRE: 51*4882a593Smuzhiyun case ARPHRD_VOID: 52*4882a593Smuzhiyun case ARPHRD_NONE: 53*4882a593Smuzhiyun case ARPHRD_RAWIP: 54*4882a593Smuzhiyun case ARPHRD_PIMREG: 55*4882a593Smuzhiyun return false; 56*4882a593Smuzhiyun default: 57*4882a593Smuzhiyun return true; 58*4882a593Smuzhiyun } 59*4882a593Smuzhiyun } 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun #endif /* _LINUX_IF_ARP_H */ 62