Advertisement
TheRealBazhen

Untitled

Apr 16th, 2020
694
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.14 KB | None | 0 0
  1. /* Definitions for Address Resolution Protocol.
  2.    Copyright (C) 1997-2018 Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
  5.  
  6.    The GNU C Library is free software; you can redistribute it and/or
  7.    modify it under the terms of the GNU Lesser General Public
  8.    License as published by the Free Software Foundation; either
  9.    version 2.1 of the License, or (at your option) any later version.
  10.  
  11.    The GNU C Library is distributed in the hope that it will be useful,
  12.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.    Lesser General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU Lesser General Public
  17.    License along with the GNU C Library; if not, see
  18.    <http://www.gnu.org/licenses/>.  */
  19.  
  20. /* Based on the 4.4BSD and Linux version of this file.  */
  21.  
  22. #ifndef _NET_IF_ARP_H
  23. #define _NET_IF_ARP_H 1
  24.  
  25. #include <sys/types.h>
  26. #include <sys/socket.h>
  27. #include <stdint.h>
  28.  
  29. __BEGIN_DECLS
  30.  
  31. /* Some internals from deep down in the kernel.  */
  32. #define MAX_ADDR_LEN    7
  33.  
  34.  
  35. /* This structure defines an ethernet arp header.  */
  36.  
  37. /* ARP protocol opcodes. */
  38. #define ARPOP_REQUEST   1       /* ARP request.  */
  39. #define ARPOP_REPLY 2       /* ARP reply.  */
  40. #define ARPOP_RREQUEST  3       /* RARP request.  */
  41. #define ARPOP_RREPLY    4       /* RARP reply.  */
  42. #define ARPOP_InREQUEST 8       /* InARP request.  */
  43. #define ARPOP_InREPLY   9       /* InARP reply.  */
  44. #define ARPOP_NAK   10      /* (ATM)ARP NAK.  */
  45.  
  46. /* See RFC 826 for protocol description.  ARP packets are variable
  47.    in size; the arphdr structure defines the fixed-length portion.
  48.    Protocol type values are the same as those for 10 Mb/s Ethernet.
  49.    It is followed by the variable-sized fields ar_sha, arp_spa,
  50.    arp_tha and arp_tpa in that order, according to the lengths
  51.    specified.  Field names used correspond to RFC 826.  */
  52.  
  53. struct arphdr
  54.   {
  55.     unsigned short int ar_hrd;      /* Format of hardware address.  */
  56.     unsigned short int ar_pro;      /* Format of protocol address.  */
  57.     unsigned char ar_hln;       /* Length of hardware address.  */
  58.     unsigned char ar_pln;       /* Length of protocol address.  */
  59.     unsigned short int ar_op;       /* ARP opcode (command).  */
  60. #if 0
  61.     /* Ethernet looks like this : This bit is variable sized
  62.        however...  */
  63.     unsigned char __ar_sha[ETH_ALEN];   /* Sender hardware address.  */
  64.     unsigned char __ar_sip[4];      /* Sender IP address.  */
  65.     unsigned char __ar_tha[ETH_ALEN];   /* Target hardware address.  */
  66.     unsigned char __ar_tip[4];      /* Target IP address.  */
  67. #endif
  68.   };
  69.  
  70.  
  71. /* ARP protocol HARDWARE identifiers. */
  72. #define ARPHRD_NETROM   0       /* From KA9Q: NET/ROM pseudo. */
  73. #define ARPHRD_ETHER    1       /* Ethernet 10/100Mbps.  */
  74. #define ARPHRD_EETHER   2       /* Experimental Ethernet.  */
  75. #define ARPHRD_AX25 3       /* AX.25 Level 2.  */
  76. #define ARPHRD_PRONET   4       /* PROnet token ring.  */
  77. #define ARPHRD_CHAOS    5       /* Chaosnet.  */
  78. #define ARPHRD_IEEE802  6       /* IEEE 802.2 Ethernet/TR/TB.  */
  79. #define ARPHRD_ARCNET   7       /* ARCnet.  */
  80. #define ARPHRD_APPLETLK 8       /* APPLEtalk.  */
  81. #define ARPHRD_DLCI 15      /* Frame Relay DLCI.  */
  82. #define ARPHRD_ATM  19      /* ATM.  */
  83. #define ARPHRD_METRICOM 23      /* Metricom STRIP (new IANA id).  */
  84. #define ARPHRD_IEEE1394 24      /* IEEE 1394 IPv4 - RFC 2734.  */
  85. #define ARPHRD_EUI64        27      /* EUI-64.  */
  86. #define ARPHRD_INFINIBAND   32      /* InfiniBand.  */
  87.  
  88. /* Dummy types for non ARP hardware */
  89. #define ARPHRD_SLIP 256
  90. #define ARPHRD_CSLIP    257
  91. #define ARPHRD_SLIP6    258
  92. #define ARPHRD_CSLIP6   259
  93. #define ARPHRD_RSRVD    260     /* Notional KISS type.  */
  94. #define ARPHRD_ADAPT    264
  95. #define ARPHRD_ROSE 270
  96. #define ARPHRD_X25  271     /* CCITT X.25.  */
  97. #define ARPHRD_HWX25    272     /* Boards with X.25 in firmware.  */
  98. #define ARPHRD_PPP  512
  99. #define ARPHRD_CISCO    513     /* Cisco HDLC.  */
  100. #define ARPHRD_HDLC ARPHRD_CISCO
  101. #define ARPHRD_LAPB 516     /* LAPB.  */
  102. #define ARPHRD_DDCMP    517     /* Digital's DDCMP.  */
  103. #define ARPHRD_RAWHDLC  518     /* Raw HDLC.  */
  104. #define ARPHRD_RAWIP    519     /* Raw IP.  */
  105.  
  106. #define ARPHRD_TUNNEL   768     /* IPIP tunnel.  */
  107. #define ARPHRD_TUNNEL6  769     /* IPIP6 tunnel.  */
  108. #define ARPHRD_FRAD 770             /* Frame Relay Access Device.  */
  109. #define ARPHRD_SKIP 771     /* SKIP vif.  */
  110. #define ARPHRD_LOOPBACK 772     /* Loopback device.  */
  111. #define ARPHRD_LOCALTLK 773     /* Localtalk device.  */
  112. #define ARPHRD_FDDI 774     /* Fiber Distributed Data Interface. */
  113. #define ARPHRD_BIF  775             /* AP1000 BIF.  */
  114. #define ARPHRD_SIT  776     /* sit0 device - IPv6-in-IPv4.  */
  115. #define ARPHRD_IPDDP    777     /* IP-in-DDP tunnel.  */
  116. #define ARPHRD_IPGRE    778     /* GRE over IP.  */
  117. #define ARPHRD_PIMREG   779     /* PIMSM register interface.  */
  118. #define ARPHRD_HIPPI    780     /* High Performance Parallel I'face. */
  119. #define ARPHRD_ASH  781     /* (Nexus Electronics) Ash.  */
  120. #define ARPHRD_ECONET   782     /* Acorn Econet.  */
  121. #define ARPHRD_IRDA 783     /* Linux-IrDA.  */
  122. #define ARPHRD_FCPP 784     /* Point to point fibrechanel.  */
  123. #define ARPHRD_FCAL 785     /* Fibrechanel arbitrated loop.  */
  124. #define ARPHRD_FCPL 786     /* Fibrechanel public loop.  */
  125. #define ARPHRD_FCFABRIC 787     /* Fibrechanel fabric.  */
  126. #define ARPHRD_IEEE802_TR 800       /* Magic type ident for TR.  */
  127. #define ARPHRD_IEEE80211 801        /* IEEE 802.11.  */
  128. #define ARPHRD_IEEE80211_PRISM 802  /* IEEE 802.11 + Prism2 header.  */
  129. #define ARPHRD_IEEE80211_RADIOTAP 803   /* IEEE 802.11 + radiotap header.  */
  130. #define ARPHRD_IEEE802154 804       /* IEEE 802.15.4 header.  */
  131. #define ARPHRD_IEEE802154_PHY 805   /* IEEE 802.15.4 PHY header.  */
  132.  
  133. #define ARPHRD_VOID   0xFFFF    /* Void type, nothing is known.  */
  134. #define ARPHRD_NONE   0xFFFE    /* Zero header length.  */
  135.  
  136.  
  137. /* ARP ioctl request.  */
  138. struct arpreq
  139.   {
  140.     struct sockaddr arp_pa;     /* Protocol address.  */
  141.     struct sockaddr arp_ha;     /* Hardware address.  */
  142.     int arp_flags;          /* Flags.  */
  143.     struct sockaddr arp_netmask;    /* Netmask (only for proxy arps).  */
  144.     char arp_dev[16];
  145.   };
  146.  
  147. struct arpreq_old
  148.   {
  149.     struct sockaddr arp_pa;     /* Protocol address.  */
  150.     struct sockaddr arp_ha;     /* Hardware address.  */
  151.     int arp_flags;          /* Flags.  */
  152.     struct sockaddr arp_netmask;    /* Netmask (only for proxy arps).  */
  153.   };
  154.  
  155. /* ARP Flag values.  */
  156. #define ATF_COM     0x02        /* Completed entry (ha valid).  */
  157. #define ATF_PERM    0x04        /* Permanent entry.  */
  158. #define ATF_PUBL    0x08        /* Publish entry.  */
  159. #define ATF_USETRAILERS 0x10        /* Has requested trailers.  */
  160. #define ATF_NETMASK     0x20            /* Want to use a netmask (only
  161.                        for proxy entries).  */
  162. #define ATF_DONTPUB 0x40        /* Don't answer this addresses.  */
  163. #define ATF_MAGIC   0x80        /* Automatically added entry.  */
  164.  
  165.  
  166. /* Support for the user space arp daemon, arpd.  */
  167. #define ARPD_UPDATE 0x01
  168. #define ARPD_LOOKUP 0x02
  169. #define ARPD_FLUSH  0x03
  170.  
  171. struct arpd_request
  172.   {
  173.     unsigned short int req;     /* Request type.  */
  174.     uint32_t ip;            /* IP address of entry.  */
  175.     unsigned long int dev;      /* Device entry is tied to.  */
  176.     unsigned long int stamp;
  177.     unsigned long int updated;
  178.     unsigned char ha[MAX_ADDR_LEN]; /* Hardware address.  */
  179.   };
  180.  
  181. __END_DECLS
  182.  
  183. #endif  /* net/if_arp.h */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement