FD.io VPP  v21.01.1
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  */
vl_api_mac_address_t mac
Definition: l2.api:502
unsigned char u8
Definition: types.h:56
u8 data[128]
Definition: ipsec_types.api:90
#define foreach_ethernet_arp_opcode
Definition: arp_packet.h:64
STATIC_ASSERT(sizeof(ethernet_arp_ip4_over_ethernet_address_t)==10, "Packet ethernet address and IP4 address too big")
ip4_arp_error_t
Definition: arp_packet.h:113
unsigned short u16
Definition: types.h:57
vl_api_ip4_address_t ip4
Definition: one.api:376
#define foreach_ethernet_arp_hardware_type
Definition: arp_packet.h:24
ip4_arp_next_t
Definition: arp_packet.h:107
u8 * format_ethernet_arp_hardware_type(u8 *s, va_list *va)
Definition: arp_packet.c:41
ethernet_arp_opcode_t
Definition: arp_packet.h:99
u8 * format_ethernet_arp_header(u8 *s, va_list *va)
Definition: arp_packet.c:59
ethernet_arp_hardware_type_t
Definition: arp_packet.h:92
typedef CLIB_PACKED(struct { mac_address_t mac;ip4_address_t ip4;}) ethernet_arp_ip4_over_ethernet_address_t
u8 * format_ethernet_arp_opcode(u8 *s, va_list *va)
Definition: arp_packet.c:23