FD.io VPP  v19.01.3-6-g70449b9b9
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 #define foreach_ethernet_arp_hardware_type \
22  _ (0, reserved) \
23  _ (1, ethernet) \
24  _ (2, experimental_ethernet) \
25  _ (3, ax_25) \
26  _ (4, proteon_pronet_token_ring) \
27  _ (5, chaos) \
28  _ (6, ieee_802) \
29  _ (7, arcnet) \
30  _ (8, hyperchannel) \
31  _ (9, lanstar) \
32  _ (10, autonet) \
33  _ (11, localtalk) \
34  _ (12, localnet) \
35  _ (13, ultra_link) \
36  _ (14, smds) \
37  _ (15, frame_relay) \
38  _ (16, atm) \
39  _ (17, hdlc) \
40  _ (18, fibre_channel) \
41  _ (19, atm19) \
42  _ (20, serial_line) \
43  _ (21, atm21) \
44  _ (22, mil_std_188_220) \
45  _ (23, metricom) \
46  _ (24, ieee_1394) \
47  _ (25, mapos) \
48  _ (26, twinaxial) \
49  _ (27, eui_64) \
50  _ (28, hiparp) \
51  _ (29, iso_7816_3) \
52  _ (30, arpsec) \
53  _ (31, ipsec_tunnel) \
54  _ (32, infiniband) \
55  _ (33, cai) \
56  _ (34, wiegand) \
57  _ (35, pure_ip) \
58  _ (36, hw_exp1) \
59  _ (256, hw_exp2)
60 
61 #define foreach_ethernet_arp_opcode \
62  _ (reserved) \
63  _ (request) \
64  _ (reply) \
65  _ (reverse_request) \
66  _ (reverse_reply) \
67  _ (drarp_request) \
68  _ (drarp_reply) \
69  _ (drarp_error) \
70  _ (inarp_request) \
71  _ (inarp_reply) \
72  _ (arp_nak) \
73  _ (mars_request) \
74  _ (mars_multi) \
75  _ (mars_mserv) \
76  _ (mars_join) \
77  _ (mars_leave) \
78  _ (mars_nak) \
79  _ (mars_unserv) \
80  _ (mars_sjoin) \
81  _ (mars_sleave) \
82  _ (mars_grouplist_request) \
83  _ (mars_grouplist_reply) \
84  _ (mars_redirect_map) \
85  _ (mapos_unarp) \
86  _ (exp1) \
87  _ (exp2)
88 
89 typedef enum
90 {
91 #define _(n,f) ETHERNET_ARP_HARDWARE_TYPE_##f = (n),
93 #undef _
95 
96 typedef enum
97 {
98 #define _(f) ETHERNET_ARP_OPCODE_##f,
100 #undef _
103 
104 typedef enum
105 {
109 
110 typedef enum
111 {
119 
120 /* *INDENT-OFF* */
121 typedef CLIB_PACKED (struct {
122  u8 ethernet[6];
123  ip4_address_t ip4;
124 }) ethernet_arp_ip4_over_ethernet_address_t;
125 /* *INDENT-ON* */
126 
127 typedef struct
128 {
134  union
135  {
136  ethernet_arp_ip4_over_ethernet_address_t ip4_over_ethernet[2];
137 
138  /* Others... */
139  u8 data[0];
140  };
142 
144 {
148 } __attribute__ ((packed)) ethernet_arp_entry_flags_t;
149 
150 typedef struct
151 {
154 
155  u8 ethernet_address[6];
156 
158 
160 
161  /**
162  * The index of the adj-fib entry created
163  */
166 
169 u8 *format_ethernet_arp_ip4_entry (u8 * s, va_list * va);
170 
173  const ip4_address_t * ip4_addr, u32 sw_if_index);
174 
175 #endif /* included_ethernet_arp_packet_h */
176 
177 /*
178  * fd.io coding-style-patch-verification: ON
179  *
180  * Local Variables:
181  * eval: (c-set-style "gnu")
182  * End:
183  */
typedef CLIB_PACKED(struct { u8 ethernet[6];ip4_address_t ip4;}) ethernet_arp_ip4_over_ethernet_address_t
void send_ip4_garp(vlib_main_t *vm, u32 sw_if_index)
Definition: arp.c:2554
u8 * format_ethernet_arp_ip4_entry(u8 *s, va_list *va)
Definition: arp.c:250
ethernet_arp_ip4_entry_t * ip4_neighbor_entries(u32 sw_if_index)
Definition: arp.c:1396
unsigned char u8
Definition: types.h:56
double f64
Definition: types.h:142
u32 sw_if_index
Definition: vxlan_gbp.api:37
ip4_arp_error_t
Definition: arp_packet.h:110
ethernet_arp_hardware_type_t
Definition: arp_packet.h:89
#define foreach_ethernet_arp_opcode
Definition: arp_packet.h:61
unsigned int u32
Definition: types.h:88
ip4_address_t ip4_address
Definition: arp_packet.h:153
u32 sw_if_index
Definition: arp_packet.h:152
unsigned short u16
Definition: types.h:57
ip4_arp_next_t
Definition: arp_packet.h:104
enum ethernet_arp_entry_flags_t_ ethernet_arp_entry_flags_t
ethernet_arp_opcode_t
Definition: arp_packet.h:96
vlib_main_t * vm
Definition: buffer.c:301
u32 fib_node_index_t
A typedef of a node index.
Definition: fib_types.h:30
ethernet_arp_ip4_entry_t * ip4_neighbors_pool(void)
Definition: arp.c:1389
ethernet_arp_entry_flags_t flags
Definition: arp_packet.h:157
f64 time_last_updated
Definition: arp_packet.h:159
void send_ip4_garp_w_addr(vlib_main_t *vm, const ip4_address_t *ip4_addr, u32 sw_if_index)
Definition: arp.c:2563
fib_node_index_t fib_entry_index
The index of the adj-fib entry created.
Definition: arp_packet.h:164
ethernet_arp_entry_flags_t_
Definition: arp_packet.h:143
#define foreach_ethernet_arp_hardware_type
Definition: arp_packet.h:21
Definition: arp_packet.h:150