36
37
#include <limits.h>
37
38
#include <stdint.h>
41
42
/* Don't set any optional arguments here so we retain POSIX
42
43
* compatibility with getopt */
43
#define IF_OPTS "46bc:de:f:gh:i:kl:m:no:pqr:s:t:u:v:wxy:z:ABC:DEF:GHI:JKLO:Q:S:TUVW:X:Z:"
44
#define IF_OPTS "46bc:de:f:gh:i:j:kl:m:no:pqr:s:t:u:v:wxy:z:" \
45
"ABC:DEF:GHI:JKLMO:Q:S:TUVW:X:Z:"
45
47
#define DEFAULT_TIMEOUT 30
46
48
#define DEFAULT_REBOOT 5
75
77
#define DHCPCD_QUIET (1ULL << 21)
76
78
#define DHCPCD_BACKGROUND (1ULL << 22)
77
79
#define DHCPCD_VENDORRAW (1ULL << 23)
78
#define DHCPCD_TIMEOUT_IPV4LL (1ULL << 24)
80
#define DHCPCD_NOWAITIP (1ULL << 24) /* To force daemonise */
79
81
#define DHCPCD_WAITIP (1ULL << 25)
80
#define DHCPCD_WAITUP (1ULL << 26)
82
#define DHCPCD_SLAACPRIVATE (1ULL << 26)
81
83
#define DHCPCD_CSR_WARNED (1ULL << 27)
82
84
#define DHCPCD_XID_HWADDR (1ULL << 28)
83
85
#define DHCPCD_BROADCAST (1ULL << 29)
95
97
#define DHCPCD_STOPPING (1ULL << 41)
96
98
#define DHCPCD_DEPARTED (1ULL << 42)
97
99
#define DHCPCD_HOSTNAME_SHORT (1ULL << 43)
100
#define DHCPCD_EXITING (1ULL << 44)
101
#define DHCPCD_WAITIP4 (1ULL << 45)
102
#define DHCPCD_WAITIP6 (1ULL << 46)
103
#define DHCPCD_DEV (1ULL << 47)
104
#define DHCPCD_IAID (1ULL << 48)
105
#define DHCPCD_DHCP (1ULL << 49)
106
#define DHCPCD_DHCP6 (1ULL << 50)
107
#define DHCPCD_NOPFXDLG (1ULL << 51)
108
#define DHCPCD_PFXDLGONLY (1ULL << 52)
109
#define DHCPCD_PFXDLGMIX (1ULL << 53)
110
#define DHCPCD_IPV6RA_AUTOCONF (1ULL << 54)
111
#define DHCPCD_ROUTER_HOST_ROUTE_WARNED (1ULL << 55)
112
#define DHCPCD_IPV6RA_ACCEPT_NOPUBLIC (1ULL << 56)
113
#define DHCPCD_BOOTP (1ULL << 57)
115
#define DHCPCD_WAITOPTS (DHCPCD_WAITIP | DHCPCD_WAITIP4 | DHCPCD_WAITIP6)
117
#define DHCPCD_WARNINGS (DHCPCD_CSR_WARNED | \
118
DHCPCD_ROUTER_HOST_ROUTE_WARNED)
119
#define DHCPCD_CONF (DHCPCD_NOPFXDLG | DHCPCD_PFXDLGONLY)
99
121
extern const struct option cf_options[];
102
124
char ifname[IF_NAMESIZE];
135
struct in6_addr addr;
111
139
struct if_sla *sla;
114
148
struct if_options {
116
uint8_t requestmask[256 / 8];
117
uint8_t requiremask[256 / 8];
118
uint8_t nomask[256 / 8];
119
uint8_t requestmask6[(UINT16_MAX + 1) / 8];
120
uint8_t requiremask6[(UINT16_MAX + 1) / 8];
121
uint8_t nomask6[(UINT16_MAX + 1) / 8];
122
uint8_t dstmask[256 / 8];
152
uint8_t requestmask[256 / NBBY];
153
uint8_t requiremask[256 / NBBY];
154
uint8_t nomask[256 / NBBY];
155
uint8_t rejectmask[256 / NBBY];
156
uint8_t dstmask[256 / NBBY];
157
uint8_t requestmasknd[(UINT16_MAX + 1) / NBBY];
158
uint8_t requiremasknd[(UINT16_MAX + 1) / NBBY];
159
uint8_t nomasknd[(UINT16_MAX + 1) / NBBY];
160
uint8_t rejectmasknd[(UINT16_MAX + 1) / NBBY];
161
uint8_t requestmask6[(UINT16_MAX + 1) / NBBY];
162
uint8_t requiremask6[(UINT16_MAX + 1) / NBBY];
163
uint8_t nomask6[(UINT16_MAX + 1) / NBBY];
164
uint8_t rejectmask6[(UINT16_MAX + 1) / NBBY];
123
165
uint32_t leasetime;
134
char script[PATH_MAX];
136
178
char hostname[HOSTNAME_MAX_LEN + 1]; /* We don't store the length */
138
180
uint8_t vendorclassid[VENDORCLASSID_MAX_LEN + 2];
139
char clientid[CLIENTID_MAX_LEN + 2];
181
uint8_t clientid[CLIENTID_MAX_LEN + 2];
140
182
uint8_t userclass[USERCLASS_MAX_LEN + 2];
141
183
uint8_t vendor[VENDOR_MAX_LEN + 2];
148
190
in_addr_t *arping;
154
struct if_iaid *iaid;
196
struct dhcp_opt *dhcp_override;
197
size_t dhcp_override_len;
198
struct dhcp_opt *nd_override;
199
size_t nd_override_len;
200
struct dhcp_opt *dhcp6_override;
201
size_t dhcp6_override_len;
205
struct dhcp_opt *vivso_override;
206
size_t vivso_override_len;
159
extern unsigned long long options;
161
struct if_options *read_config(const char *,
211
struct if_options *read_config(struct dhcpcd_ctx *,
162
212
const char *, const char *, const char *);
163
int add_options(struct if_options *, int, char **);
213
int add_options(struct dhcpcd_ctx *, const char *,
214
struct if_options *, int, char **);
215
void free_dhcp_opt_embenc(struct dhcp_opt *);
164
216
void free_options(struct if_options *);