FD.io VPP  v18.04-17-g3a0d853
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 {
50 
51 /*
52  * DHCPv6 options types
53  */
54 enum
55 {
72  DHCPV6_OPTION_INTERFACE_ID = 18, // relay agent fills this
75  DHCPV6_OPTION_REMOTEID = 37, // relay agent fills this
76  DHCPV6_OPTION_VSS = 68, // relay agent fills this
79 };
80 
81 /*
82 * DHCPv6 status codes
83  */
84 enum
85 {
92 };
93 
94 /*
95  * DHCPv6 DUID types
96  */
97 enum
98 {
99  DHCPV6_DUID_LLT = 1, /* DUID Based on Link-layer Address Plus Time */
100  DHCPV6_DUID_EN = 2, /* DUID Based on Enterprise Number */
101  DHCPV6_DUID_LL = 3, /* DUID Based on Link-layer Address */
102 };
103 
104 //Structure for DHCPv6 payload from client
105 typedef struct dhcpv6_hdr_
106 {
107  union
108  {
109  u8 msg_type; //DHCP msg type
110  u32 xid; // transaction id
111  } u;
112  u8 data[0];
114 
115 
116 
117 /* *INDENT-OFF* */
118 typedef CLIB_PACKED (struct dhcpv6_relay_ctx_ {
119  dhcpv6_header_t *pkt;
120  u32 pkt_len;
121  u32 dhcpv6_len; //DHCPv6 payload load
122 // if_ordinal iod;
123  u32 if_index;
124  u32 ctx_id;
125  char ctx_name[32+1];
126  u8 dhcp_msg_type;
127 }) dhcpv6_relay_ctx_t;
128 /* *INDENT-ON* */
129 
130 //Structure for DHCPv6 RELAY-FORWARD and DHCPv6 RELAY-REPLY pkts
131 /* *INDENT-OFF* */
132 typedef CLIB_PACKED (struct dhcpv6_relay_hdr_ {
133  u8 msg_type;
134  u8 hop_count;
135  ip6_address_t link_addr;
136  ip6_address_t peer_addr;
137  u8 data[0];
138 }) dhcpv6_relay_hdr_t;
139 /* *INDENT-ON* */
140 
142 {
147 //Generic counters for a packet
148 typedef struct dhcp_stats_counters_
149 {
150  u64 rx_pkts; //counter for received pkts
151  u64 tx_pkts; //counter for forwarded pkts
152  u64 drops; //counter for dropped pkts
154 
155 
157 {
166 
167 /* *INDENT-OFF* */
168 typedef CLIB_PACKED (struct {
169  u16 option;
170  u16 length;
171  u8 data[0];
172 }) dhcpv6_option_t;
173 /* *INDENT-ON* */
174 
175 /* *INDENT-OFF* */
176 typedef CLIB_PACKED (struct {
177  dhcpv6_option_t opt;
178  u32 int_idx;
179 }) dhcpv6_int_id_t;
180 /* *INDENT-ON* */
181 
182 /* *INDENT-OFF* */
183 typedef CLIB_PACKED (struct {
184  dhcpv6_option_t opt;
185  u8 vss_type;
186  u8 data[0];
187 }) dhcpv6_vss_t;
188 /* *INDENT-ON* */
189 
190 /* *INDENT-OFF* */
191 typedef CLIB_PACKED (struct {
192  dhcpv6_option_t opt;
193  u32 ent_num;
194  u32 rmt_id;
195 }) dhcpv6_rmt_id_t;
196 /* *INDENT-ON* */
197 
198 /* *INDENT-OFF* */
199 typedef CLIB_PACKED (struct {
200  dhcpv6_option_t opt;
201  u16 link_type;
202  u8 data[6]; // data[0]:data[5]: MAC address
203 }) dhcpv6_client_mac_t;
204 /* *INDENT-ON* */
205 
206 
207 #endif /* included_vnet_dhcp6_packet_h */
208 
209 /*
210  * fd.io coding-style-patch-verification: ON
211  *
212  * Local Variables:
213  * eval: (c-set-style "gnu")
214  * End:
215  */
enum dhcp_stats_action_type_ dhcp_stats_action_type_t
dhcpv6_msg_type_
Definition: dhcp6_packet.h:34
unsigned long u64
Definition: types.h:89
struct dhcpv6_hdr_ dhcpv6_header_t
enum dhcpv6_msg_type_ dhcpv6_msg_type_t
dhcpv6_stats_drop_reason_
Definition: dhcp6_packet.h:156
union dhcpv6_hdr_::@113 u
dhcp_stats_action_type_
Definition: dhcp6_packet.h:141
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
enum dhcpv6_stats_drop_reason_ dhcpv6_stats_drop_reason_t
unsigned int u32
Definition: types.h:88
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
struct dhcp_stats_counters_ dhcp_stats_counters_t