FD.io VPP  v16.06
Vector Packet Processing
packet.h
Go to the documentation of this file.
1 #ifndef included_vnet_dhcp_packet_h
2 #define included_vnet_dhcp_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_{
49 
50 /*
51  * DHCPv6 options types
52  */
53 enum {
70  DHCPV6_OPTION_INTERFACE_ID = 18, // relay agent fills this
73  DHCPV6_OPTION_REMOTEID = 37, // relay agent fills this
74  DHCPV6_OPTION_VSS = 68, // relay agent fills this
77 };
78 
79 /*
80 * DHCPv6 status codes
81  */
82 enum {
89 };
90 
91 /*
92  * DHCPv6 DUID types
93  */
94 enum {
95  DHCPV6_DUID_LLT = 1, /* DUID Based on Link-layer Address Plus Time */
96  DHCPV6_DUID_EN = 2, /* DUID Based on Enterprise Number */
97  DHCPV6_DUID_LL = 3, /* DUID Based on Link-layer Address */
98 };
99 
100 //Structure for DHCPv6 payload from client
101 typedef struct dhcpv6_hdr_ {
102  union {
103  u8 msg_type; //DHCP msg type
104  u32 xid; // transaction id
105  }u;
106  u8 data[0];
108 
109 
110 
111 typedef CLIB_PACKED (struct dhcpv6_relay_ctx_ {
112  dhcpv6_header_t *pkt;
113  u32 pkt_len;
114  u32 dhcpv6_len; //DHCPv6 payload load
115 // if_ordinal iod;
116  u32 if_index;
117  u32 ctx_id;
118  char ctx_name[32+1];
119  u8 dhcp_msg_type;
120 }) dhcpv6_relay_ctx_t;
121 
122 //Structure for DHCPv6 RELAY-FORWARD and DHCPv6 RELAY-REPLY pkts
123 typedef CLIB_PACKED (struct dhcpv6_relay_hdr_ {
124  u8 msg_type;
125  u8 hop_count;
126  ip6_address_t link_addr;
127  ip6_address_t peer_addr;
128  u8 data[0];
129 }) dhcpv6_relay_hdr_t;
130 
136 //Generic counters for a packet
137 typedef struct dhcp_stats_counters_ {
138  u64 rx_pkts; //counter for received pkts
139  u64 tx_pkts; //counter for forwarded pkts
140  u64 drops; //counter for dropped pkts
142 
143 
153 
154 typedef CLIB_PACKED (struct {
155  u16 option;
156  u16 length;
157  u8 data[0];
158 }) dhcpv6_option_t;
159 
160 typedef CLIB_PACKED (struct {
161  dhcpv6_option_t opt;
162  u32 int_idx;
163 }) dhcpv6_int_id_t;
164 
165 typedef CLIB_PACKED (struct {
166  dhcpv6_option_t opt;
167  u8 data[8]; // data[0]:type, data[1..7]: VPN ID
168 }) dhcpv6_vss_t;
169 
170 typedef CLIB_PACKED (struct {
171  dhcpv6_option_t opt;
172  u32 ent_num;
173  u32 rmt_id;
174 }) dhcpv6_rmt_id_t;
175 
176 typedef CLIB_PACKED (struct {
177  dhcpv6_option_t opt;
178  u16 link_type;
179  u8 data[6]; // data[0]:data[5]: MAC address
180 }) dhcpv6_client_mac_t;
181 
182 
183 #endif /* included_vnet_dhcp_packet_h */
struct dhcpv6_hdr_ dhcpv6_header_t
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
unsigned long u64
Definition: types.h:89
enum dhcpv6_stats_drop_reason_ dhcpv6_stats_drop_reason_t
enum dhcpv6_msg_type_ dhcpv6_msg_type_t
dhcpv6_msg_type_
Definition: packet.h:34
union dhcpv6_hdr_::@87 u
u32 xid
Definition: packet.h:104
u8 data[0]
Definition: packet.h:106
unsigned int u32
Definition: types.h:88
u8 msg_type
Definition: packet.h:103
struct dhcp_stats_counters_ dhcp_stats_counters_t
unsigned short u16
Definition: types.h:57
unsigned char u8
Definition: types.h:56
dhcp_stats_action_type_
Definition: packet.h:131
dhcpv6_stats_drop_reason_
Definition: packet.h:144
enum dhcp_stats_action_type_ dhcp_stats_action_type_t