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),
92
foreach_ethernet_arp_hardware_type
93
#undef _
94
}
ethernet_arp_hardware_type_t
;
95
96
typedef
enum
97
{
98
#define _(f) ETHERNET_ARP_OPCODE_##f,
99
foreach_ethernet_arp_opcode
100
#undef _
101
ETHERNET_ARP_N_OPCODE
,
102
}
ethernet_arp_opcode_t
;
103
104
typedef
enum
105
{
106
IP4_ARP_NEXT_DROP
,
107
IP4_ARP_N_NEXT
,
108
}
ip4_arp_next_t
;
109
110
typedef
enum
111
{
112
IP4_ARP_ERROR_THROTTLED
,
113
IP4_ARP_ERROR_RESOLVED
,
114
IP4_ARP_ERROR_NO_BUFFERS
,
115
IP4_ARP_ERROR_REQUEST_SENT
,
116
IP4_ARP_ERROR_NON_ARP_ADJ
,
117
IP4_ARP_ERROR_NO_SOURCE_ADDRESS
,
118
}
ip4_arp_error_t
;
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
{
129
u16
l2_type
;
130
u16
l3_type
;
131
u8
n_l2_address_bytes
;
132
u8
n_l3_address_bytes
;
133
u16
opcode
;
134
union
135
{
136
ethernet_arp_ip4_over_ethernet_address_t ip4_over_ethernet[2];
137
138
/* Others... */
139
u8
data[0];
140
};
141
}
ethernet_arp_header_t
;
142
143
typedef
enum
ethernet_arp_entry_flags_t_
144
{
145
ETHERNET_ARP_IP4_ENTRY_FLAG_STATIC
= (1 << 0),
146
ETHERNET_ARP_IP4_ENTRY_FLAG_DYNAMIC
= (1 << 1),
147
ETHERNET_ARP_IP4_ENTRY_FLAG_NO_FIB_ENTRY
= (1 << 2),
148
} __attribute__ ((packed))
ethernet_arp_entry_flags_t
;
149
150
typedef
struct
151
{
152
u32
sw_if_index
;
153
ip4_address_t
ip4_address
;
154
155
u8
ethernet_address[6];
156
157
ethernet_arp_entry_flags_t
flags
;
158
159
f64
time_last_updated
;
160
161
/**
162
* The index of the adj-fib entry created
163
*/
164
fib_node_index_t
fib_entry_index
;
165
}
ethernet_arp_ip4_entry_t
;
166
167
ethernet_arp_ip4_entry_t
*
ip4_neighbors_pool
(
void
);
168
ethernet_arp_ip4_entry_t
*
ip4_neighbor_entries
(
u32
sw_if_index
);
169
u8
*
format_ethernet_arp_ip4_entry
(
u8
* s, va_list * va);
170
171
void
send_ip4_garp
(
vlib_main_t
*
vm
,
u32
sw_if_index
);
172
void
send_ip4_garp_w_addr
(
vlib_main_t
*
vm
,
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
*/
ethernet_arp_header_t::l2_type
u16 l2_type
Definition:
arp_packet.h:129
ethernet_arp_header_t::l3_type
u16 l3_type
Definition:
arp_packet.h:130
IP4_ARP_ERROR_REQUEST_SENT
Definition:
arp_packet.h:115
CLIB_PACKED
typedef CLIB_PACKED(struct { u8 ethernet[6];ip4_address_t ip4;}) ethernet_arp_ip4_over_ethernet_address_t
IP4_ARP_N_NEXT
Definition:
arp_packet.h:107
send_ip4_garp
void send_ip4_garp(vlib_main_t *vm, u32 sw_if_index)
Definition:
arp.c:2554
format_ethernet_arp_ip4_entry
u8 * format_ethernet_arp_ip4_entry(u8 *s, va_list *va)
Definition:
arp.c:250
ip4_neighbor_entries
ethernet_arp_ip4_entry_t * ip4_neighbor_entries(u32 sw_if_index)
Definition:
arp.c:1396
u8
unsigned char u8
Definition:
types.h:56
f64
double f64
Definition:
types.h:142
sw_if_index
u32 sw_if_index
Definition:
vxlan_gbp.api:37
ip4_arp_error_t
ip4_arp_error_t
Definition:
arp_packet.h:110
ethernet_arp_hardware_type_t
ethernet_arp_hardware_type_t
Definition:
arp_packet.h:89
foreach_ethernet_arp_opcode
#define foreach_ethernet_arp_opcode
Definition:
arp_packet.h:61
u32
unsigned int u32
Definition:
types.h:88
ETHERNET_ARP_IP4_ENTRY_FLAG_STATIC
Definition:
arp_packet.h:145
IP4_ARP_NEXT_DROP
Definition:
arp_packet.h:106
ip4_address_t
Definition:
ip4_packet.h:49
ETHERNET_ARP_N_OPCODE
Definition:
arp_packet.h:101
IP4_ARP_ERROR_NON_ARP_ADJ
Definition:
arp_packet.h:116
IP4_ARP_ERROR_NO_BUFFERS
Definition:
arp_packet.h:114
ethernet_arp_ip4_entry_t::ip4_address
ip4_address_t ip4_address
Definition:
arp_packet.h:153
ethernet_arp_ip4_entry_t::sw_if_index
u32 sw_if_index
Definition:
arp_packet.h:152
u16
unsigned short u16
Definition:
types.h:57
ip4_arp_next_t
ip4_arp_next_t
Definition:
arp_packet.h:104
ethernet_arp_entry_flags_t
enum ethernet_arp_entry_flags_t_ ethernet_arp_entry_flags_t
ethernet_arp_opcode_t
ethernet_arp_opcode_t
Definition:
arp_packet.h:96
vm
vlib_main_t * vm
Definition:
buffer.c:301
IP4_ARP_ERROR_NO_SOURCE_ADDRESS
Definition:
arp_packet.h:117
fib_node_index_t
u32 fib_node_index_t
A typedef of a node index.
Definition:
fib_types.h:30
IP4_ARP_ERROR_RESOLVED
Definition:
arp_packet.h:113
ethernet_arp_header_t::opcode
u16 opcode
Definition:
arp_packet.h:133
ip4_neighbors_pool
ethernet_arp_ip4_entry_t * ip4_neighbors_pool(void)
Definition:
arp.c:1389
ethernet_arp_ip4_entry_t::flags
ethernet_arp_entry_flags_t flags
Definition:
arp_packet.h:157
ethernet_arp_header_t
Definition:
arp_packet.h:127
ethernet_arp_ip4_entry_t::time_last_updated
f64 time_last_updated
Definition:
arp_packet.h:159
send_ip4_garp_w_addr
void send_ip4_garp_w_addr(vlib_main_t *vm, const ip4_address_t *ip4_addr, u32 sw_if_index)
Definition:
arp.c:2563
ETHERNET_ARP_IP4_ENTRY_FLAG_NO_FIB_ENTRY
Definition:
arp_packet.h:147
ethernet_arp_ip4_entry_t::fib_entry_index
fib_node_index_t fib_entry_index
The index of the adj-fib entry created.
Definition:
arp_packet.h:164
vlib_main_t
Definition:
main.h:61
ethernet_arp_entry_flags_t_
ethernet_arp_entry_flags_t_
Definition:
arp_packet.h:143
foreach_ethernet_arp_hardware_type
#define foreach_ethernet_arp_hardware_type
Definition:
arp_packet.h:21
ethernet_arp_header_t::n_l3_address_bytes
u8 n_l3_address_bytes
Definition:
arp_packet.h:132
IP4_ARP_ERROR_THROTTLED
Definition:
arp_packet.h:112
ethernet_arp_header_t::n_l2_address_bytes
u8 n_l2_address_bytes
Definition:
arp_packet.h:131
ETHERNET_ARP_IP4_ENTRY_FLAG_DYNAMIC
Definition:
arp_packet.h:146
ethernet_arp_ip4_entry_t
Definition:
arp_packet.h:150
src
vnet
ethernet
arp_packet.h
Generated on Sun Dec 8 2019 18:02:51 for FD.io VPP by
1.8.13