xref: /dpdk/lib/net/rte_arp.h (revision fba9875559906e04eaeb74532f4cfd51194259a2)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2013 6WIND S.A.
3  */
4 
5 #ifndef _RTE_ARP_H_
6 #define _RTE_ARP_H_
7 
8 /**
9  * @file
10  *
11  * ARP-related defines
12  */
13 
14 #include <stdint.h>
15 #include <rte_ether.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /**
22  * ARP header IPv4 payload.
23  */
24 struct __rte_aligned(2) __rte_packed_begin rte_arp_ipv4 {
25 	struct rte_ether_addr arp_sha;  /**< sender hardware address */
26 	rte_be32_t            arp_sip;  /**< sender IP address */
27 	struct rte_ether_addr arp_tha;  /**< target hardware address */
28 	rte_be32_t            arp_tip;  /**< target IP address */
29 } __rte_packed_end;
30 
31 /**
32  * ARP header.
33  */
34 struct __rte_aligned(2) __rte_packed_begin rte_arp_hdr {
35 	rte_be16_t arp_hardware; /**< format of hardware address */
36 #define RTE_ARP_HRD_ETHER     1  /**< ARP Ethernet address format */
37 
38 	rte_be16_t arp_protocol; /**< format of protocol address */
39 	uint8_t    arp_hlen;     /**< length of hardware address */
40 	uint8_t    arp_plen;     /**< length of protocol address */
41 	rte_be16_t arp_opcode;   /**< ARP opcode (command) */
42 #define	RTE_ARP_OP_REQUEST    1  /**< request to resolve address */
43 #define	RTE_ARP_OP_REPLY      2  /**< response to previous request */
44 #define	RTE_ARP_OP_REVREQUEST 3  /**< request proto addr given hardware */
45 #define	RTE_ARP_OP_REVREPLY   4  /**< response giving protocol address */
46 #define	RTE_ARP_OP_INVREQUEST 8  /**< request to identify peer */
47 #define	RTE_ARP_OP_INVREPLY   9  /**< response identifying peer */
48 
49 	struct rte_arp_ipv4 arp_data;
50 } __rte_packed_end;
51 
52 /**
53  * Make a RARP packet based on MAC addr.
54  *
55  * @param mpool
56  *   Pointer to the rte_mempool
57  * @param mac
58  *   Pointer to the MAC addr
59  *
60  * @return
61  *   - RARP packet pointer on success, or NULL on error
62  */
63 struct rte_mbuf *
64 rte_net_make_rarp_packet(struct rte_mempool *mpool,
65 		const struct rte_ether_addr *mac);
66 
67 #ifdef __cplusplus
68 }
69 #endif
70 
71 #endif /* _RTE_ARP_H_ */
72