dhcp ip: DSCP settings for transmitted DHCP packets
[vpp.git] / src / vnet / dhcp / dhcp.api
1 /*
2  * Copyright (c) 2015-2016 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 option version = "2.0.1";
17
18 import "vnet/ip/ip_types.api";
19
20 /** \brief DHCP Proxy config add / del request
21     @param client_index - opaque cookie to identify the sender
22     @param context - sender context, to match reply w/ request
23     @param rx_vrf_id - Rx/interface vrf id
24     @param server_vrf_id - server vrf id
25     @param if_ipv6 - ipv6 if non-zero, else ipv4
26     @param is_add - add the config if non-zero, else delete
27     @param insert_circuit_id - option82 suboption 1 fib number
28     @param dhcp_server[] - server address
29     @param dhcp_src_address[] - <fix this, need details>
30 */
31 autoreply define dhcp_proxy_config
32 {
33   u32 client_index;
34   u32 context;
35   u32 rx_vrf_id;
36   u32 server_vrf_id;
37   u8 is_ipv6;
38   u8 is_add;
39   u8 dhcp_server[16];
40   u8 dhcp_src_address[16];
41 };
42
43 /** \brief DHCP Proxy set / unset vss request
44     @param client_index - opaque cookie to identify the sender
45     @param context - sender context, to match reply w/ request
46     @param tbl_id - table id
47     @vss_type - 0: use ASCI vpn_id; 1: use oui/vpn_index; 255: global vpn
48     @vpn_ascii - null terminated ASCII VPN ID up to 128 characters
49     @param oui - first part of rfc2685 vpn id, 3 bytes oui 
50     @param vpn_index - second part of rfc2685 vpn id, 4 bytes vpn index
51     @param is_ipv6 - ip6 if non-zero, else ip4
52     @param is_add - set vss if non-zero, else delete
53 */
54 autoreply define dhcp_proxy_set_vss
55 {
56   u32 client_index;
57   u32 context;
58   u32 tbl_id;
59   u8 vss_type;
60   u8 vpn_ascii_id[129];
61   u32 oui;
62   u32 vpn_index;
63   u8 is_ipv6;
64   u8 is_add;
65 };
66
67 /** \brief DHCP Client config data
68     @param sw_if_index - index of the interface for DHCP client
69     @param hostname - hostname
70     @param id - Client ID - option 61
71     @param want_dhcp_event - DHCP event sent to the sender
72            via dhcp_compl_event API message if non-zero
73     @param set_broadcast_flag - in the DHCP Discover to control
74                                 how the resulting OFFER is addressed.
75     @param dscp - DSCP value set in IP packets sent by the client
76     @param pid - sender's pid
77 */
78 typeonly define dhcp_client
79 {
80   u32 sw_if_index;
81   u8 hostname[64];
82   u8 id[64];
83   u8 want_dhcp_event;
84   u8 set_broadcast_flag;
85   vl_api_ip_dscp_t dscp;
86   u32 pid;
87 };
88
89 /** \brief DHCP Client config add / del request
90     @param client_index - opaque cookie to identify the sender
91     @param context - sender context, to match reply w/ request
92     @param is_add - add the config if non-zero, else delete
93     @param client - client configuration data
94 */
95 autoreply define dhcp_client_config
96 {
97   u32 client_index;
98   u32 context;
99   u8 is_add;
100   vl_api_dhcp_client_t client;
101 };
102
103 /** \brief Struct representing domain server
104     @param address - IP address
105 */
106 typeonly manual_print manual_endian define domain_server
107 {
108   u8 address[16];
109 };
110
111 /** \brief Data learned by the client during the DHCP process
112     @param sw_if_index - the interface on which the client is configured
113     @param state - the state of the lease (see dhcp_client_state_t)
114     @param is_ipv6 - if non-zero the address is ipv6, else ipv4
115     @param mask_width - The length of the subnet mask assigned
116     @param host_address - Host IP address
117     @param router_address - Router IP address
118     @param host_mac - Host MAC address
119 */
120 typeonly define dhcp_lease
121 {
122   u32 sw_if_index;
123   u8 state;
124   u8 hostname[64];
125   u8 is_ipv6;
126   u8 mask_width;
127   u8 host_address[16];
128   u8 router_address[16];
129   u8 host_mac[6];
130   u8 count;
131   vl_api_domain_server_t domain_server[count];
132 };
133
134 /** \brief Tell client about a DHCP completion event
135     @param client_index - opaque cookie to identify the sender
136     @param pid - client pid registered to receive notification
137     @param lease - Data learned during the DHCP process;
138 */
139 define dhcp_compl_event
140 {
141   u32 client_index;
142   u32 pid;
143   vl_api_dhcp_lease_t lease;
144 };
145
146 service {
147   rpc dhcp_client_config returns dhcp_client_config_reply events dhcp_compl_event;
148 };
149
150 /** \brief Dump the DHCP client configurations
151  */
152 define dhcp_client_dump
153 {
154   u32 client_index;
155   u32 context;
156 };
157
158 /** \brief DHCP Client details returned from dump
159  *  @param client - The configured client
160  *  @param lease - The learned lease data
161  */
162 define dhcp_client_details
163 {
164   u32 context;
165   vl_api_dhcp_client_t client;
166   vl_api_dhcp_lease_t lease;
167 };
168
169 /** \brief Dump DHCP proxy table
170     @param client_index - opaque cookie to identify the sender
171     @param True for IPv6 proxy table
172 */
173 define dhcp_proxy_dump
174 {
175   u32 client_index;
176   u32 context;
177   u8  is_ip6;
178 };
179
180 typeonly manual_print manual_endian define dhcp_server
181 {
182   u32 server_vrf_id;
183   u8 dhcp_server[16];
184 };
185
186 /** \brief Tell client about a DHCP completion event
187     @param client_index - opaque cookie to identify the sender
188 */
189 manual_endian manual_print define dhcp_proxy_details
190 {
191   u32 context;
192   u32 rx_vrf_id;
193   u32 vss_oui;
194   u32 vss_fib_id;
195   u8 vss_type;
196   u8 vss_vpn_ascii_id[129];
197   u8 is_ipv6;
198   u8 dhcp_src_address[16];
199   u8 count;
200   vl_api_dhcp_server_t servers[count];
201 };
202
203 /** \brief Set DHCPv6 DUID-LL
204     @param client_index - opaque cookie to identify the sender
205     @param context - sender context, to match reply w/ request
206     @param duid_ll - DUID-LL binary string
207 */
208 autoreply define dhcp6_duid_ll_set
209 {
210   u32 client_index;
211   u32 context;
212   u8 duid_ll[10];
213 };
214
215 /** \brief Enable/disable listening on DHCPv6 client port
216     @param client_index - opaque cookie to identify the sender
217     @param context - sender context, to match reply w/ request
218 */
219 autoreply define dhcp6_clients_enable_disable
220 {
221   u32 client_index;
222   u32 context;
223   u8 enable;
224 };
225
226 /** \brief Struct representing DHCPv6 address
227     @param address - address
228     @param valid_time - valid lifetime
229     @param preferred_time - preferred lifetime
230 */
231 typeonly define dhcp6_address_info
232 {
233   u8 address[16];
234   u32 valid_time;
235   u32 preferred_time;
236 };
237
238 /** \brief Struct representing DHCPv6 PD prefix
239     @param prefix - prefix
240     @param prefix_length - prefix length
241     @param valid_time - valid lifetime
242     @param preferred_time - preferred lifetime
243 */
244 typeonly define dhcp6_pd_prefix_info
245 {
246   u8 prefix[16];
247   u8 prefix_length;
248   u32 valid_time;
249   u32 preferred_time;
250 };
251
252 /** \brief Send DHCPv6 client message of specified type
253     @param client_index - opaque cookie to identify the sender
254     @param context - sender context, to match reply w/ request
255     @param sw_if_index - index of TX interface, also identifies IAID
256     @param server_index - used to dentify DHCPv6 server,
257                           unique for each DHCPv6 server on the link,
258                           value obrtained from dhcp6_reply_event API message,
259                           use ~0 to send message to all DHCPv6 servers
260     @param irt - initial retransmission time
261     @param mrt - maximum retransmission time
262     @param mrc - maximum retransmission count
263     @param mrd - maximum retransmission duration
264                          for sending the message
265     @param stop - if non-zero then stop resending the message,
266                   otherwise start sending the message
267     @param msg_type - message type
268     @param T1 - value of T1 in IA_NA option
269     @param T2 - value of T2 in IA_NA option
270     @param n_addresses - number of addresses in IA_NA option
271     @param addresses - list of addresses in IA_NA option
272 */
273 autoreply define dhcp6_send_client_message
274 {
275   u32 client_index;
276   u32 context;
277   u32 sw_if_index;
278   u32 server_index;
279   u32 irt;
280   u32 mrt;
281   u32 mrc;
282   u32 mrd;
283   u8 stop;
284   u8 msg_type;
285   u32 T1;
286   u32 T2;
287   u32 n_addresses;
288   vl_api_dhcp6_address_info_t addresses[n_addresses];
289 };
290
291 /** \brief Send DHCPv6 PD client message of specified type
292     @param client_index - opaque cookie to identify the sender
293     @param context - sender context, to match reply w/ request
294     @param sw_if_index - index of TX interface
295     @param server_index - used to dentify DHCPv6 server,
296                           unique for each DHCPv6 server on the link,
297                           value obrtained from dhcp6_pd_reply_event API message,
298                           use ~0 to send message to all DHCPv6 servers
299     @param irt - initial retransmission time
300     @param mrt - maximum retransmission time
301     @param mrc - maximum retransmission count
302     @param mrd - maximum retransmission duration
303                          for sending the message
304     @param stop - if non-zero then stop resending the message,
305                   otherwise start sending the message
306     @param msg_type - message type
307     @param T1 - value of T1 in IA_PD option
308     @param T2 - value of T2 in IA_PD option
309     @param n_prefixes - number of addresses in IA_PD option
310     @param prefixes - list of prefixes in IA_PD option
311 */
312 autoreply define dhcp6_pd_send_client_message
313 {
314   u32 client_index;
315   u32 context;
316   u32 sw_if_index;
317   u32 server_index;
318   u32 irt;
319   u32 mrt;
320   u32 mrc;
321   u32 mrd;
322   u8 stop;
323   u8 msg_type;
324   u32 T1;
325   u32 T2;
326   u32 n_prefixes;
327   vl_api_dhcp6_pd_prefix_info_t prefixes[n_prefixes];
328 };
329
330 service {
331   rpc want_dhcp6_reply_events returns want_dhcp6_reply_events_reply
332     events dhcp6_reply_event;
333 };
334
335 service {
336   rpc want_dhcp6_pd_reply_events returns want_dhcp6_pd_reply_events_reply
337     events dhcp6_pd_reply_event;
338 };
339
340 /** \brief Register for DHCPv6 reply events
341     @param client_index - opaque cookie to identify the sender
342     @param context - sender context, to match reply w/ request
343     @param enable_disable - 1 => register for events, 0 => cancel registration
344     @param pid - sender's pid
345 */
346 autoreply define want_dhcp6_reply_events
347 {
348   u32 client_index;
349   u32 context;
350   u8 enable_disable;
351   u32 pid;
352 };
353
354 /** \brief Register for DHCPv6 PD reply events
355     @param client_index - opaque cookie to identify the sender
356     @param context - sender context, to match reply w/ request
357     @param enable_disable - 1 => register for events, 0 => cancel registration
358     @param pid - sender's pid
359 */
360 autoreply define want_dhcp6_pd_reply_events
361 {
362   u32 client_index;
363   u32 context;
364   u8 enable_disable;
365   u32 pid;
366 };
367
368 /** \brief Tell client about a DHCPv6 server reply event
369     @param client_index - opaque cookie to identify the sender
370     @param pid - client pid registered to receive notification
371     @param sw_if_index - index of RX interface, also identifies IAID
372     @param server_index - used to dentify DHCPv6 server,
373                           unique for each DHCPv6 server on the link
374     @param msg_type - message type
375     @param T1 - value of T1 in IA_NA option
376     @param T2 - value of T2 in IA_NA option
377     @param inner_status_code - value of status code inside IA_NA option
378     @param status_code - value of status code
379     @param preference - value of preference option in reply message
380     @param n_addresses - number of addresses in IA_NA option
381     @param addresses - list of addresses in IA_NA option
382 */
383 define dhcp6_reply_event
384 {
385   u32 client_index;
386   u32 pid;
387   u32 sw_if_index;
388   u32 server_index;
389   u8 msg_type;
390   u32 T1;
391   u32 T2;
392   u16 inner_status_code;
393   u16 status_code;
394   u8 preference;
395   u32 n_addresses;
396   vl_api_dhcp6_address_info_t addresses[n_addresses];
397 };
398
399 /** \brief Tell client about a DHCPv6 PD server reply event
400     @param client_index - opaque cookie to identify the sender
401     @param pid - client pid registered to receive notification
402     @param sw_if_index - index of RX interface
403     @param server_index - used to dentify DHCPv6 server,
404                           unique for each DHCPv6 server on the link
405     @param msg_type - message type
406     @param T1 - value of T1 in IA_PD option
407     @param T2 - value of T2 in IA_PD option
408     @param inner_status_code - value of status code inside IA_PD option
409     @param status_code - value of the main status code of DHCPv6 message
410     @param preference - value of preference option in reply message
411     @param n_prefixes - number of prefixes in IA_PD option
412     @param prefixes - list of prefixes in IA_PD option
413 */
414 define dhcp6_pd_reply_event
415 {
416   u32 client_index;
417   u32 pid;
418   u32 sw_if_index;
419   u32 server_index;
420   u8 msg_type;
421   u32 T1;
422   u32 T2;
423   u16 inner_status_code;
424   u16 status_code;
425   u8 preference;
426   u32 n_prefixes;
427   vl_api_dhcp6_pd_prefix_info_t prefixes[n_prefixes];
428 };
429
430 /*
431  * Local Variables:
432  * eval: (c-set-style "gnu")
433  * End:
434  */