FD.io VPP
v21.06-3-gbb25fbf28
Vector Packet Processing
dhcp6_packet.h
Go to the documentation of this file.
1
#ifndef included_vnet_dhcp6_packet_h
2
#define included_vnet_dhcp6_packet_h
3
4
/*
5
* DHCP packet format
6
*
7
* Copyright (c) 2013 Cisco and/or its affiliates.
8
* Licensed under the Apache License, Version 2.0 (the "License");
9
* you may not use this file except in compliance with the License.
10
* You may obtain a copy of the License at:
11
*
12
* http://www.apache.org/licenses/LICENSE-2.0
13
*
14
* Unless required by applicable law or agreed to in writing, software
15
* distributed under the License is distributed on an "AS IS" BASIS,
16
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
* See the License for the specific language governing permissions and
18
* limitations under the License.
19
*/
20
#include <
vnet/ip/ip6_packet.h
>
21
22
// #define DHCP_VRF_NAME_MAX_LEN L3VM_MAX_NAME_STR_LEN
23
// #define DHCPV6_MAX_VRF_NAME_LEN L3VM_MAX_NAME_STR_LEN
24
#define DHCP_MAX_RELAY_ADDR 16
25
#define PROTO_UDP 17
26
#define DHCPV6_CLIENT_PORT 546
27
#define DHCPV6_SERVER_PORT 547
28
#define HOP_COUNT_LIMIT 32
29
#define DHCPV6_CISCO_ENT_NUM 9
30
31
/*
32
* DHCPv6 message types
33
*/
34
typedef
enum
dhcpv6_msg_type_
35
{
36
DHCPV6_MSG_SOLICIT
= 1,
37
DHCPV6_MSG_ADVERTISE
= 2,
38
DHCPV6_MSG_REQUEST
= 3,
39
DHCPV6_MSG_CONFIRM
= 4,
40
DHCPV6_MSG_RENEW
= 5,
41
DHCPV6_MSG_REBIND
= 6,
42
DHCPV6_MSG_REPLY
= 7,
43
DHCPV6_MSG_RELEASE
= 8,
44
DHCPV6_MSG_DECLINE
= 9,
45
DHCPV6_MSG_RECONFIGURE
= 10,
46
DHCPV6_MSG_INFORMATION_REQUEST
= 11,
47
DHCPV6_MSG_RELAY_FORW
= 12,
48
DHCPV6_MSG_RELAY_REPL
= 13,
49
}
dhcpv6_msg_type_t
;
50
51
/* Name, code, min payload length */
52
#define dhcpv6_foreach_option \
53
_(CLIENTID , 1 , 4 ) \
54
_(SERVERID , 2 , 4 ) \
55
_(IA_NA , 3 , 12) \
56
_(IA_TA , 4 , 4 ) \
57
_(IAADDR , 5 , 24) \
58
_(ORO , 6 , 0 ) \
59
_(PREFERENCE , 7 , 1 ) \
60
_(ELAPSED_TIME , 8 , 2 ) \
61
_(RELAY_MSG , 9 , 0 ) \
62
_(AUTH , 11 , 11) \
63
_(UNICAST , 12 , 16) \
64
_(STATUS_CODE , 13 , 2 ) \
65
_(RAPID_COMMIT , 14 , 0 ) \
66
_(USER_CLASS , 15 , 0 ) \
67
_(VENDOR_CLASS , 16 , 4 ) \
68
_(VENDOR_OPTS , 17 , 4 ) \
69
_(INTERFACE_ID , 18 , 0 ) \
70
_(RECONF_MSG , 19 , 1 ) \
71
_(RECONF_ACCEPT , 20 , 0 ) \
72
_(DNS_SEARCH , 24 , 0 ) \
73
_(IA_PD , 25 , 12) \
74
_(IAPREFIX , 26 , 25) \
75
_(REMOTEID , 37 , 4 ) \
76
_(VSS , 68 , 1 ) \
77
_(CLIENT_LINK_LAYER_ADDRESS, 79 , 2 )
78
79
/*
80
* DHCPv6 options types
81
*/
82
enum
83
{
84
#define _(a,b,c) DHCPV6_OPTION_##a = b,
85
dhcpv6_foreach_option
86
#undef _
87
DHCPV6_OPTION_MAX
88
};
89
90
/*
91
* DHCPv6 status codes
92
*/
93
enum
94
{
95
DHCPV6_STATUS_SUCCESS
= 0,
96
DHCPV6_STATUS_UNSPEC_FAIL
= 1,
97
DHCPV6_STATUS_NOADDRS_AVAIL
= 2,
98
DHCPV6_STATUS_NO_BINDING
= 3,
99
DHCPV6_STATUS_NOT_ONLINK
= 4,
100
DHCPV6_STATUS_USE_MULTICAST
= 5,
101
DHCPV6_STATUS_NOPREFIX_AVAIL
= 6,
102
};
103
104
/*
105
* DHCPv6 DUID types
106
*/
107
enum
108
{
109
DHCPV6_DUID_LLT
= 1,
/* DUID Based on Link-layer Address Plus Time */
110
DHCPV6_DUID_EN
= 2,
/* DUID Based on Enterprise Number */
111
DHCPV6_DUID_LL
= 3,
/* DUID Based on Link-layer Address */
112
};
113
114
//Structure for DHCPv6 payload from client
115
typedef
struct
dhcpv6_hdr_
116
{
117
u8
msg_type
;
//DHCP msg type
118
u8
xid
[3];
//Transaction id
119
u8
data
[0];
120
}
dhcpv6_header_t
;
121
122
/* *INDENT-OFF* */
123
typedef
CLIB_PACKED
(
struct
dhcpv6_relay_ctx_ {
124
dhcpv6_header_t
*pkt;
125
u32
pkt_len;
126
u32
dhcpv6_len;
//DHCPv6 payload load
127
// if_ordinal iod;
128
u32
if_index;
129
u32
ctx_id;
130
char
ctx_name[32+1];
131
u8
dhcp_msg_type;
132
}) dhcpv6_relay_ctx_t;
133
/* *INDENT-ON* */
134
135
//Structure for DHCPv6 RELAY-FORWARD and DHCPv6 RELAY-REPLY pkts
136
/* *INDENT-OFF* */
137
typedef
CLIB_PACKED
(
struct
dhcpv6_relay_hdr_ {
138
u8
msg_type;
139
u8
hop_count;
140
ip6_address_t link_addr;
141
ip6_address_t peer_addr;
142
u8
data
[0];
143
}) dhcpv6_relay_hdr_t;
144
/* *INDENT-ON* */
145
146
typedef
enum
dhcp_stats_action_type_
147
{
148
DHCP_STATS_ACTION_FORWARDED
= 1,
149
DHCP_STATS_ACTION_RECEIVED
,
150
DHCP_STATS_ACTION_DROPPED
151
}
dhcp_stats_action_type_t
;
152
//Generic counters for a packet
153
typedef
struct
dhcp_stats_counters_
154
{
155
u64
rx_pkts
;
//counter for received pkts
156
u64
tx_pkts
;
//counter for forwarded pkts
157
u64
drops
;
//counter for dropped pkts
158
}
dhcp_stats_counters_t
;
159
160
161
typedef
enum
dhcpv6_stats_drop_reason_
162
{
163
DHCPV6_RELAY_PKT_DROP_RELAYDISABLE
= 1,
164
DHCPV6_RELAY_PKT_DROP_MAX_HOPS
,
165
DHCPV6_RELAY_PKT_DROP_VALIDATION_FAIL
,
166
DHCPV6_RELAY_PKT_DROP_UNKNOWN_OP_INTF
,
167
DHCPV6_RELAY_PKT_DROP_BAD_CONTEXT
,
168
DHCPV6_RELAY_PKT_DROP_OPT_INSERT_FAIL
,
169
DHCPV6_RELAY_PKT_DROP_REPLY_FROM_CLIENT
,
170
}
dhcpv6_stats_drop_reason_t
;
171
172
#define dhcpv6_optlen(opt) clib_net_to_host_u16((opt)->length)
173
174
/* *INDENT-OFF* */
175
typedef
CLIB_PACKED
(
struct
{
176
u16
option;
177
u16
length
;
178
u8
data
[0];
179
}) dhcpv6_option_t;
180
/* *INDENT-ON* */
181
182
/* *INDENT-OFF* */
183
typedef
CLIB_PACKED
(
struct
{
184
dhcpv6_option_t opt;
185
u16
status_code;
186
}) dhcpv6_status_code_t;
187
/* *INDENT-ON* */
188
189
/* *INDENT-OFF* */
190
typedef
CLIB_PACKED
(
struct
{
191
dhcpv6_option_t opt;
192
u32
int_idx;
193
}) dhcpv6_int_id_t;
194
/* *INDENT-ON* */
195
196
/* *INDENT-OFF* */
197
typedef
CLIB_PACKED
(
struct
{
198
dhcpv6_option_t opt;
199
u8
vss_type
;
200
u8
data
[0];
201
}) dhcpv6_vss_t;
202
/* *INDENT-ON* */
203
204
/* *INDENT-OFF* */
205
typedef
CLIB_PACKED
(
struct
{
206
dhcpv6_option_t opt;
207
u32
ent_num;
208
u32
rmt_id;
209
}) dhcpv6_rmt_id_t;
210
/* *INDENT-ON* */
211
212
/* *INDENT-OFF* */
213
typedef
CLIB_PACKED
(
struct
{
214
dhcpv6_option_t opt;
215
u16
link_type;
216
u8
data
[6];
// data[0]:data[5]: MAC address
217
}) dhcpv6_client_mac_t;
218
/* *INDENT-ON* */
219
220
typedef
CLIB_PACKED
(
struct
221
{
222
dhcpv6_option_t opt;
u32
iaid;
u32
t1;
223
u32
t2;
224
u8
data
[0];
225
}) dhcpv6_ia_header_t;
226
227
typedef
CLIB_PACKED
(
struct
228
{
229
dhcpv6_option_t opt;
u32
preferred;
u32
valid;
u8
prefix
;
230
ip6_address_t
addr
;
231
}) dhcpv6_ia_opt_pd_t;
232
233
typedef
CLIB_PACKED
(
struct
234
{
235
dhcpv6_option_t opt; ip6_address_t
addr
;
u32
preferred;
236
u32
valid;
237
}) dhcpv6_ia_opt_addr_t;
238
239
typedef
CLIB_PACKED
(
struct
240
{
241
dhcpv6_option_t opt;
242
u16
options
[0];
243
}) dhcpv6_oro_t;
244
245
typedef
CLIB_PACKED
(
struct
246
{
247
dhcpv6_option_t opt;
u16
elapsed_10ms;
248
}) dhcpv6_elapsed_t;
249
250
typedef
CLIB_PACKED
(
struct
251
{
252
dhcpv6_option_t opt;
u16
duid_type;
253
u16
hardware_type;
254
}) dhcpv6_duid_t;
255
256
typedef
CLIB_PACKED
(
struct
257
{
258
dhcpv6_option_t opt;
u16
status_code;
259
u8
message[0];
260
}) dhcpv6_status_t;
261
262
263
#endif
/* included_vnet_dhcp6_packet_h */
264
265
/*
266
* fd.io coding-style-patch-verification: ON
267
*
268
* Local Variables:
269
* eval: (c-set-style "gnu")
270
* End:
271
*/
DHCPV6_RELAY_PKT_DROP_VALIDATION_FAIL
@ DHCPV6_RELAY_PKT_DROP_VALIDATION_FAIL
Definition:
dhcp6_packet.h:165
DHCPV6_MSG_REBIND
@ DHCPV6_MSG_REBIND
Definition:
dhcp6_packet.h:41
DHCPV6_STATUS_USE_MULTICAST
@ DHCPV6_STATUS_USE_MULTICAST
Definition:
dhcp6_packet.h:100
DHCPV6_RELAY_PKT_DROP_REPLY_FROM_CLIENT
@ DHCPV6_RELAY_PKT_DROP_REPLY_FROM_CLIENT
Definition:
dhcp6_packet.h:169
dhcpv6_foreach_option
#define dhcpv6_foreach_option
Definition:
dhcp6_packet.h:52
DHCPV6_STATUS_NOADDRS_AVAIL
@ DHCPV6_STATUS_NOADDRS_AVAIL
Definition:
dhcp6_packet.h:97
DHCPV6_RELAY_PKT_DROP_OPT_INSERT_FAIL
@ DHCPV6_RELAY_PKT_DROP_OPT_INSERT_FAIL
Definition:
dhcp6_packet.h:168
dhcpv6_msg_type_t
enum dhcpv6_msg_type_ dhcpv6_msg_type_t
CLIB_PACKED
typedef CLIB_PACKED(struct dhcpv6_relay_ctx_ { dhcpv6_header_t *pkt;u32 pkt_len;u32 dhcpv6_len;u32 if_index;u32 ctx_id;char ctx_name[32+1];u8 dhcp_msg_type;}) dhcpv6_relay_ctx_t
dhcp_stats_counters_::tx_pkts
u64 tx_pkts
Definition:
dhcp6_packet.h:156
DHCPV6_STATUS_NOPREFIX_AVAIL
@ DHCPV6_STATUS_NOPREFIX_AVAIL
Definition:
dhcp6_packet.h:101
dhcpv6_hdr_::xid
u8 xid[3]
Definition:
dhcp6_packet.h:118
DHCPV6_MSG_DECLINE
@ DHCPV6_MSG_DECLINE
Definition:
dhcp6_packet.h:44
DHCPV6_STATUS_NOT_ONLINK
@ DHCPV6_STATUS_NOT_ONLINK
Definition:
dhcp6_packet.h:99
u16
unsigned short u16
Definition:
types.h:57
dhcpv6_hdr_::data
u8 data[0]
Definition:
dhcp6_packet.h:119
DHCPV6_MSG_REPLY
@ DHCPV6_MSG_REPLY
Definition:
dhcp6_packet.h:42
dhcp_stats_counters_::rx_pkts
u64 rx_pkts
Definition:
dhcp6_packet.h:155
addr
vhost_vring_addr_t addr
Definition:
vhost_user.h:130
dhcpv6_msg_type_
dhcpv6_msg_type_
Definition:
dhcp6_packet.h:34
DHCP_STATS_ACTION_FORWARDED
@ DHCP_STATS_ACTION_FORWARDED
Definition:
dhcp6_packet.h:148
DHCPV6_MSG_RELEASE
@ DHCPV6_MSG_RELEASE
Definition:
dhcp6_packet.h:43
ip6_packet.h
dhcp_stats_counters_::drops
u64 drops
Definition:
dhcp6_packet.h:157
DHCPV6_STATUS_NO_BINDING
@ DHCPV6_STATUS_NO_BINDING
Definition:
dhcp6_packet.h:98
DHCPV6_MSG_RECONFIGURE
@ DHCPV6_MSG_RECONFIGURE
Definition:
dhcp6_packet.h:45
dhcpv6_header_t
struct dhcpv6_hdr_ dhcpv6_header_t
DHCPV6_MSG_RENEW
@ DHCPV6_MSG_RENEW
Definition:
dhcp6_packet.h:40
DHCPV6_MSG_ADVERTISE
@ DHCPV6_MSG_ADVERTISE
Definition:
dhcp6_packet.h:37
DHCPV6_RELAY_PKT_DROP_UNKNOWN_OP_INTF
@ DHCPV6_RELAY_PKT_DROP_UNKNOWN_OP_INTF
Definition:
dhcp6_packet.h:166
DHCPV6_MSG_INFORMATION_REQUEST
@ DHCPV6_MSG_INFORMATION_REQUEST
Definition:
dhcp6_packet.h:46
DHCP_STATS_ACTION_DROPPED
@ DHCP_STATS_ACTION_DROPPED
Definition:
dhcp6_packet.h:150
data
u8 data[128]
Definition:
ipsec_types.api:92
dhcpv6_hdr_::msg_type
u8 msg_type
Definition:
dhcp6_packet.h:117
dhcp_stats_counters_
Definition:
dhcp6_packet.h:153
dhcpv6_stats_drop_reason_
dhcpv6_stats_drop_reason_
Definition:
dhcp6_packet.h:161
DHCPV6_STATUS_SUCCESS
@ DHCPV6_STATUS_SUCCESS
Definition:
dhcp6_packet.h:95
u64
unsigned long u64
Definition:
types.h:89
dhcp_stats_action_type_
dhcp_stats_action_type_
Definition:
dhcp6_packet.h:146
DHCPV6_RELAY_PKT_DROP_RELAYDISABLE
@ DHCPV6_RELAY_PKT_DROP_RELAYDISABLE
Definition:
dhcp6_packet.h:163
u32
unsigned int u32
Definition:
types.h:88
options
static struct option options[]
Definition:
main.c:52
dhcpv6_hdr_
Definition:
dhcp6_packet.h:115
dhcp_stats_counters_t
struct dhcp_stats_counters_ dhcp_stats_counters_t
DHCPV6_MSG_RELAY_FORW
@ DHCPV6_MSG_RELAY_FORW
Definition:
dhcp6_packet.h:47
DHCPV6_DUID_LLT
@ DHCPV6_DUID_LLT
Definition:
dhcp6_packet.h:109
length
char const int length
Definition:
cJSON.h:163
vss_type
vss_type
Definition:
dhcp.api:22
DHCPV6_MSG_CONFIRM
@ DHCPV6_MSG_CONFIRM
Definition:
dhcp6_packet.h:39
u8
unsigned char u8
Definition:
types.h:56
DHCPV6_MSG_SOLICIT
@ DHCPV6_MSG_SOLICIT
Definition:
dhcp6_packet.h:36
DHCPV6_STATUS_UNSPEC_FAIL
@ DHCPV6_STATUS_UNSPEC_FAIL
Definition:
dhcp6_packet.h:96
DHCPV6_DUID_LL
@ DHCPV6_DUID_LL
Definition:
dhcp6_packet.h:111
DHCPV6_MSG_RELAY_REPL
@ DHCPV6_MSG_RELAY_REPL
Definition:
dhcp6_packet.h:48
dhcpv6_stats_drop_reason_t
enum dhcpv6_stats_drop_reason_ dhcpv6_stats_drop_reason_t
DHCPV6_OPTION_MAX
@ DHCPV6_OPTION_MAX
Definition:
dhcp6_packet.h:87
DHCP_STATS_ACTION_RECEIVED
@ DHCP_STATS_ACTION_RECEIVED
Definition:
dhcp6_packet.h:149
DHCPV6_RELAY_PKT_DROP_MAX_HOPS
@ DHCPV6_RELAY_PKT_DROP_MAX_HOPS
Definition:
dhcp6_packet.h:164
DHCPV6_MSG_REQUEST
@ DHCPV6_MSG_REQUEST
Definition:
dhcp6_packet.h:38
DHCPV6_RELAY_PKT_DROP_BAD_CONTEXT
@ DHCPV6_RELAY_PKT_DROP_BAD_CONTEXT
Definition:
dhcp6_packet.h:167
dhcp_stats_action_type_t
enum dhcp_stats_action_type_ dhcp_stats_action_type_t
DHCPV6_DUID_EN
@ DHCPV6_DUID_EN
Definition:
dhcp6_packet.h:110
prefix
vl_api_prefix_t prefix
Definition:
ip.api:146
src
plugins
dhcp
dhcp6_packet.h
Generated on Sat Jan 8 2022 10:03:44 for FD.io VPP by
1.8.17