1 /* BSD LICENSE 2 * 3 * Copyright(c) 2013 6WIND. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in 13 * the documentation and/or other materials provided with the 14 * distribution. 15 * * Neither the name of 6WIND S.A. nor the names of its 16 * contributors may be used to endorse or promote products derived 17 * from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef _RTE_ARP_H_ 33 #define _RTE_ARP_H_ 34 35 /** 36 * @file 37 * 38 * ARP-related defines 39 */ 40 41 #include <stdint.h> 42 #include <rte_ether.h> 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 /** 49 * ARP header IPv4 payload. 50 */ 51 struct arp_ipv4 { 52 struct ether_addr arp_sha; /**< sender hardware address */ 53 uint32_t arp_sip; /**< sender IP address */ 54 struct ether_addr arp_tha; /**< target hardware address */ 55 uint32_t arp_tip; /**< target IP address */ 56 } __attribute__((__packed__)); 57 58 /** 59 * ARP header. 60 */ 61 struct arp_hdr { 62 uint16_t arp_hrd; /* format of hardware address */ 63 #define ARP_HRD_ETHER 1 /* ARP Ethernet address format */ 64 65 uint16_t arp_pro; /* format of protocol address */ 66 uint8_t arp_hln; /* length of hardware address */ 67 uint8_t arp_pln; /* length of protocol address */ 68 uint16_t arp_op; /* ARP opcode (command) */ 69 #define ARP_OP_REQUEST 1 /* request to resolve address */ 70 #define ARP_OP_REPLY 2 /* response to previous request */ 71 #define ARP_OP_REVREQUEST 3 /* request proto addr given hardware */ 72 #define ARP_OP_REVREPLY 4 /* response giving protocol address */ 73 #define ARP_OP_INVREQUEST 8 /* request to identify peer */ 74 #define ARP_OP_INVREPLY 9 /* response identifying peer */ 75 76 struct arp_ipv4 arp_data; 77 } __attribute__((__packed__)); 78 79 #ifdef __cplusplus 80 } 81 #endif 82 83 #endif /* _RTE_ARP_H_ */ 84