FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
arp_packet.h
Go to the documentation of this file.
1 /*
2  * ethernet/arp.c: IP v4 ARP node
3  *
4  * Copyright (c) 2010 Cisco and/or its affiliates.
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef included_ethernet_arp_packet_h
19 #define included_ethernet_arp_packet_h
20 
21 #include <vnet/ip/ip4_packet.h>
23 
24 #define foreach_ethernet_arp_hardware_type \
25  _ (0, reserved) \
26  _ (1, ethernet) \
27  _ (2, experimental_ethernet) \
28  _ (3, ax_25) \
29  _ (4, proteon_pronet_token_ring) \
30  _ (5, chaos) \
31  _ (6, ieee_802) \
32  _ (7, arcnet) \
33  _ (8, hyperchannel) \
34  _ (9, lanstar) \
35  _ (10, autonet) \
36  _ (11, localtalk) \
37  _ (12, localnet) \
38  _ (13, ultra_link) \
39  _ (14, smds) \
40  _ (15, frame_relay) \
41  _ (16, atm) \
42  _ (17, hdlc) \
43  _ (18, fibre_channel) \
44  _ (19, atm19) \
45  _ (20, serial_line) \
46  _ (21, atm21) \
47  _ (22, mil_std_188_220) \
48  _ (23, metricom) \
49  _ (24, ieee_1394) \
50  _ (25, mapos) \
51  _ (26, twinaxial) \
52  _ (27, eui_64) \
53  _ (28, hiparp) \
54  _ (29, iso_7816_3) \
55  _ (30, arpsec) \
56  _ (31, ipsec_tunnel) \
57  _ (32, infiniband) \
58  _ (33, cai) \
59  _ (34, wiegand) \
60  _ (35, pure_ip) \
61  _ (36, hw_exp1) \
62  _ (256, hw_exp2)
63 
64 #define foreach_ethernet_arp_opcode \
65  _ (reserved) \
66  _ (request) \
67  _ (reply) \
68  _ (reverse_request) \
69  _ (reverse_reply) \
70  _ (drarp_request) \
71  _ (drarp_reply) \
72  _ (drarp_error) \
73  _ (inarp_request) \
74  _ (inarp_reply) \
75  _ (arp_nak) \
76  _ (mars_request) \
77  _ (mars_multi) \
78  _ (mars_mserv) \
79  _ (mars_join) \
80  _ (mars_leave) \
81  _ (mars_nak) \
82  _ (mars_unserv) \
83  _ (mars_sjoin) \
84  _ (mars_sleave) \
85  _ (mars_grouplist_request) \
86  _ (mars_grouplist_reply) \
87  _ (mars_redirect_map) \
88  _ (mapos_unarp) \
89  _ (exp1) \
90  _ (exp2)
91 
92 typedef enum
93 {
94 #define _(n,f) ETHERNET_ARP_HARDWARE_TYPE_##f = (n),
96 #undef _
98 
99 typedef enum
100 {
101 #define _(f) ETHERNET_ARP_OPCODE_##f,
103 #undef _
106 
107 typedef enum
108 {
112 
113 typedef enum
114 {
122 
123 /* *INDENT-OFF* */
124 typedef CLIB_PACKED (struct {
127 }) ethernet_arp_ip4_over_ethernet_address_t;
128 /* *INDENT-ON* */
129 
130 STATIC_ASSERT (sizeof (ethernet_arp_ip4_over_ethernet_address_t) == 10,
131  "Packet ethernet address and IP4 address too big");
132 
133 typedef struct
134 {
140  union
141  {
142  ethernet_arp_ip4_over_ethernet_address_t ip4_over_ethernet[2];
143 
144  /* Others... */
145  u8 data[0];
146  };
148 
149 #define ARP_SENDER 0
150 #define ARP_TARGET 1
151 
152 extern u8 *format_ethernet_arp_header (u8 * s, va_list * va);
153 extern u8 *format_ethernet_arp_opcode (u8 * s, va_list * va);
154 extern u8 *format_ethernet_arp_hardware_type (u8 * s, va_list * va);
155 
156 #endif /* included_ethernet_arp_packet_h */
157 
158 /*
159  * fd.io coding-style-patch-verification: ON
160  *
161  * Local Variables:
162  * eval: (c-set-style "gnu")
163  * End:
164  */
ethernet_arp_header_t::opcode
u16 opcode
Definition: arp_packet.h:139
mac
vl_api_mac_address_t mac
Definition: l2.api:559
ip4
vl_api_ip4_address_t ip4
Definition: one.api:376
foreach_ethernet_arp_hardware_type
#define foreach_ethernet_arp_hardware_type
Definition: arp_packet.h:24
u16
unsigned short u16
Definition: types.h:57
IP4_ARP_ERROR_NON_ARP_ADJ
@ IP4_ARP_ERROR_NON_ARP_ADJ
Definition: arp_packet.h:119
IP4_ARP_N_NEXT
@ IP4_ARP_N_NEXT
Definition: arp_packet.h:110
IP4_ARP_ERROR_THROTTLED
@ IP4_ARP_ERROR_THROTTLED
Definition: arp_packet.h:115
ethernet_arp_header_t
Definition: arp_packet.h:133
IP4_ARP_ERROR_REQUEST_SENT
@ IP4_ARP_ERROR_REQUEST_SENT
Definition: arp_packet.h:118
mac_address.h
format_ethernet_arp_opcode
u8 * format_ethernet_arp_opcode(u8 *s, va_list *va)
Definition: arp_packet.c:23
CLIB_PACKED
typedef CLIB_PACKED(struct { mac_address_t mac;ip4_address_t ip4;}) ethernet_arp_ip4_over_ethernet_address_t
ip4_arp_next_t
ip4_arp_next_t
Definition: arp_packet.h:107
IP4_ARP_NEXT_DROP
@ IP4_ARP_NEXT_DROP
Definition: arp_packet.h:109
ip4_address_t
Definition: ip4_packet.h:50
data
u8 data[128]
Definition: ipsec_types.api:92
format_ethernet_arp_header
u8 * format_ethernet_arp_header(u8 *s, va_list *va)
Definition: arp_packet.c:59
ip4_packet.h
ethernet_arp_header_t::n_l2_address_bytes
u8 n_l2_address_bytes
Definition: arp_packet.h:137
ethernet_arp_opcode_t
ethernet_arp_opcode_t
Definition: arp_packet.h:99
foreach_ethernet_arp_opcode
#define foreach_ethernet_arp_opcode
Definition: arp_packet.h:64
ETHERNET_ARP_N_OPCODE
@ ETHERNET_ARP_N_OPCODE
Definition: arp_packet.h:104
IP4_ARP_ERROR_NO_BUFFERS
@ IP4_ARP_ERROR_NO_BUFFERS
Definition: arp_packet.h:117
ethernet_arp_header_t::l3_type
u16 l3_type
Definition: arp_packet.h:136
ethernet_arp_hardware_type_t
ethernet_arp_hardware_type_t
Definition: arp_packet.h:92
mac_address_t_
Definition: mac_address.h:21
ethernet_arp_header_t::l2_type
u16 l2_type
Definition: arp_packet.h:135
IP4_ARP_ERROR_RESOLVED
@ IP4_ARP_ERROR_RESOLVED
Definition: arp_packet.h:116
u8
unsigned char u8
Definition: types.h:56
STATIC_ASSERT
STATIC_ASSERT(sizeof(ethernet_arp_ip4_over_ethernet_address_t)==10, "Packet ethernet address and IP4 address too big")
format_ethernet_arp_hardware_type
u8 * format_ethernet_arp_hardware_type(u8 *s, va_list *va)
Definition: arp_packet.c:41
ip4_arp_error_t
ip4_arp_error_t
Definition: arp_packet.h:113
IP4_ARP_ERROR_NO_SOURCE_ADDRESS
@ IP4_ARP_ERROR_NO_SOURCE_ADDRESS
Definition: arp_packet.h:120
ethernet_arp_header_t::n_l3_address_bytes
u8 n_l3_address_bytes
Definition: arp_packet.h:138