xref: /minix3/external/bsd/dhcpcd/dist/dhcp-common.h (revision 9f20bfa6c4c442e2e798d91b11c2a5f8d6833a41)
1*9f20bfa6SDavid van Moolenbroek /* $NetBSD: dhcp-common.h,v 1.10 2015/07/09 10:15:34 roy Exp $ */
2*9f20bfa6SDavid van Moolenbroek 
3*9f20bfa6SDavid van Moolenbroek /*
4*9f20bfa6SDavid van Moolenbroek  * dhcpcd - DHCP client daemon
5*9f20bfa6SDavid van Moolenbroek  * Copyright (c) 2006-2015 Roy Marples <roy@marples.name>
6*9f20bfa6SDavid van Moolenbroek  * All rights reserved
7*9f20bfa6SDavid van Moolenbroek 
8*9f20bfa6SDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
9*9f20bfa6SDavid van Moolenbroek  * modification, are permitted provided that the following conditions
10*9f20bfa6SDavid van Moolenbroek  * are met:
11*9f20bfa6SDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
12*9f20bfa6SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
13*9f20bfa6SDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
14*9f20bfa6SDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
15*9f20bfa6SDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
16*9f20bfa6SDavid van Moolenbroek  *
17*9f20bfa6SDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18*9f20bfa6SDavid van Moolenbroek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*9f20bfa6SDavid van Moolenbroek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*9f20bfa6SDavid van Moolenbroek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21*9f20bfa6SDavid van Moolenbroek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*9f20bfa6SDavid van Moolenbroek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23*9f20bfa6SDavid van Moolenbroek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24*9f20bfa6SDavid van Moolenbroek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25*9f20bfa6SDavid van Moolenbroek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*9f20bfa6SDavid van Moolenbroek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*9f20bfa6SDavid van Moolenbroek  * SUCH DAMAGE.
28*9f20bfa6SDavid van Moolenbroek  */
29*9f20bfa6SDavid van Moolenbroek 
30*9f20bfa6SDavid van Moolenbroek #ifndef DHCPCOMMON_H
31*9f20bfa6SDavid van Moolenbroek #define DHCPCOMMON_H
32*9f20bfa6SDavid van Moolenbroek 
33*9f20bfa6SDavid van Moolenbroek #include <arpa/inet.h>
34*9f20bfa6SDavid van Moolenbroek #include <netinet/in.h>
35*9f20bfa6SDavid van Moolenbroek 
36*9f20bfa6SDavid van Moolenbroek #include <stdint.h>
37*9f20bfa6SDavid van Moolenbroek 
38*9f20bfa6SDavid van Moolenbroek #include "common.h"
39*9f20bfa6SDavid van Moolenbroek #include "dhcpcd.h"
40*9f20bfa6SDavid van Moolenbroek 
41*9f20bfa6SDavid van Moolenbroek /* Max MTU - defines dhcp option length */
42*9f20bfa6SDavid van Moolenbroek #define MTU_MAX             1500
43*9f20bfa6SDavid van Moolenbroek #define MTU_MIN             576
44*9f20bfa6SDavid van Moolenbroek 
45*9f20bfa6SDavid van Moolenbroek #define REQUEST		(1 << 0)
46*9f20bfa6SDavid van Moolenbroek #define UINT8		(1 << 1)
47*9f20bfa6SDavid van Moolenbroek #define UINT16		(1 << 2)
48*9f20bfa6SDavid van Moolenbroek #define SINT16		(1 << 3)
49*9f20bfa6SDavid van Moolenbroek #define UINT32		(1 << 4)
50*9f20bfa6SDavid van Moolenbroek #define SINT32		(1 << 5)
51*9f20bfa6SDavid van Moolenbroek #define ADDRIPV4	(1 << 6)
52*9f20bfa6SDavid van Moolenbroek #define STRING		(1 << 7)
53*9f20bfa6SDavid van Moolenbroek #define ARRAY		(1 << 8)
54*9f20bfa6SDavid van Moolenbroek #define RFC3361		(1 << 9)
55*9f20bfa6SDavid van Moolenbroek #define RFC1035		(1 << 10)
56*9f20bfa6SDavid van Moolenbroek #define RFC3442		(1 << 11)
57*9f20bfa6SDavid van Moolenbroek #define RFC5969		(1 << 12)
58*9f20bfa6SDavid van Moolenbroek #define ADDRIPV6	(1 << 13)
59*9f20bfa6SDavid van Moolenbroek #define BINHEX		(1 << 14)
60*9f20bfa6SDavid van Moolenbroek #define FLAG		(1 << 15)
61*9f20bfa6SDavid van Moolenbroek #define NOREQ		(1 << 16)
62*9f20bfa6SDavid van Moolenbroek #define EMBED		(1 << 17)
63*9f20bfa6SDavid van Moolenbroek #define ENCAP		(1 << 18)
64*9f20bfa6SDavid van Moolenbroek #define INDEX		(1 << 19)
65*9f20bfa6SDavid van Moolenbroek #define OPTION		(1 << 20)
66*9f20bfa6SDavid van Moolenbroek #define DOMAIN		(1 << 21)
67*9f20bfa6SDavid van Moolenbroek #define ASCII		(1 << 22)
68*9f20bfa6SDavid van Moolenbroek #define RAW		(1 << 23)
69*9f20bfa6SDavid van Moolenbroek #define ESCSTRING	(1 << 24)
70*9f20bfa6SDavid van Moolenbroek #define ESCFILE		(1 << 25)
71*9f20bfa6SDavid van Moolenbroek #define BITFLAG		(1 << 26)
72*9f20bfa6SDavid van Moolenbroek #define RESERVED	(1 << 27)
73*9f20bfa6SDavid van Moolenbroek 
74*9f20bfa6SDavid van Moolenbroek struct dhcp_opt {
75*9f20bfa6SDavid van Moolenbroek 	uint32_t option; /* Also used for IANA Enterpise Number */
76*9f20bfa6SDavid van Moolenbroek 	int type;
77*9f20bfa6SDavid van Moolenbroek 	size_t len;
78*9f20bfa6SDavid van Moolenbroek 	char *var;
79*9f20bfa6SDavid van Moolenbroek 
80*9f20bfa6SDavid van Moolenbroek 	int index; /* Index counter for many instances of the same option */
81*9f20bfa6SDavid van Moolenbroek 	char bitflags[8];
82*9f20bfa6SDavid van Moolenbroek 
83*9f20bfa6SDavid van Moolenbroek 	/* Embedded options.
84*9f20bfa6SDavid van Moolenbroek 	 * The option code is irrelevant here. */
85*9f20bfa6SDavid van Moolenbroek 	struct dhcp_opt *embopts;
86*9f20bfa6SDavid van Moolenbroek 	size_t embopts_len;
87*9f20bfa6SDavid van Moolenbroek 
88*9f20bfa6SDavid van Moolenbroek 	/* Encapsulated options */
89*9f20bfa6SDavid van Moolenbroek 	struct dhcp_opt *encopts;
90*9f20bfa6SDavid van Moolenbroek 	size_t encopts_len;
91*9f20bfa6SDavid van Moolenbroek };
92*9f20bfa6SDavid van Moolenbroek 
93*9f20bfa6SDavid van Moolenbroek struct dhcp_opt *vivso_find(uint32_t, const void *);
94*9f20bfa6SDavid van Moolenbroek 
95*9f20bfa6SDavid van Moolenbroek ssize_t dhcp_vendor(char *, size_t);
96*9f20bfa6SDavid van Moolenbroek 
97*9f20bfa6SDavid van Moolenbroek void dhcp_print_option_encoding(const struct dhcp_opt *opt, int cols);
98*9f20bfa6SDavid van Moolenbroek #define add_option_mask(var, val) \
99*9f20bfa6SDavid van Moolenbroek 	((var)[(val) >> 3] = (uint8_t)((var)[(val) >> 3] | 1 << ((val) & 7)))
100*9f20bfa6SDavid van Moolenbroek #define del_option_mask(var, val) \
101*9f20bfa6SDavid van Moolenbroek 	((var)[(val) >> 3] = (uint8_t)((var)[(val) >> 3] & ~(1 << ((val) & 7))))
102*9f20bfa6SDavid van Moolenbroek #define has_option_mask(var, val) \
103*9f20bfa6SDavid van Moolenbroek 	((var)[(val) >> 3] & (uint8_t)(1 << ((val) & 7)))
104*9f20bfa6SDavid van Moolenbroek int make_option_mask(const struct dhcp_opt *, size_t,
105*9f20bfa6SDavid van Moolenbroek     const struct dhcp_opt *, size_t,
106*9f20bfa6SDavid van Moolenbroek     uint8_t *, const char *, int);
107*9f20bfa6SDavid van Moolenbroek 
108*9f20bfa6SDavid van Moolenbroek size_t encode_rfc1035(const char *src, uint8_t *dst);
109*9f20bfa6SDavid van Moolenbroek ssize_t decode_rfc1035(char *, size_t, const uint8_t *, size_t);
110*9f20bfa6SDavid van Moolenbroek ssize_t print_string(char *, size_t, int, const uint8_t *, size_t);
111*9f20bfa6SDavid van Moolenbroek int dhcp_set_leasefile(char *, size_t, int, const struct interface *);
112*9f20bfa6SDavid van Moolenbroek 
113*9f20bfa6SDavid van Moolenbroek size_t dhcp_envoption(struct dhcpcd_ctx *,
114*9f20bfa6SDavid van Moolenbroek     char **, const char *, const char *, struct dhcp_opt *,
115*9f20bfa6SDavid van Moolenbroek     const uint8_t *(*dgetopt)(struct dhcpcd_ctx *,
116*9f20bfa6SDavid van Moolenbroek     size_t *, unsigned int *, size_t *,
117*9f20bfa6SDavid van Moolenbroek     const uint8_t *, size_t, struct dhcp_opt **),
118*9f20bfa6SDavid van Moolenbroek     const uint8_t *od, size_t ol);
119*9f20bfa6SDavid van Moolenbroek void dhcp_zero_index(struct dhcp_opt *);
120*9f20bfa6SDavid van Moolenbroek 
121*9f20bfa6SDavid van Moolenbroek #endif
122