1d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan/*
2d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * dhcpcd - DHCP client daemon
3d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * Copyright (c) 2006-2015 Roy Marples <roy@marples.name>
4d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * All rights reserved
5d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
6d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * Redistribution and use in source and binary forms, with or without
7d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * modification, are permitted provided that the following conditions
8d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * are met:
9d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * 1. Redistributions of source code must retain the above copyright
10d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan *    notice, this list of conditions and the following disclaimer.
11d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * 2. Redistributions in binary form must reproduce the above copyright
12d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan *    notice, this list of conditions and the following disclaimer in the
13d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan *    documentation and/or other materials provided with the distribution.
14d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan *
15d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * SUCH DAMAGE.
26d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan */
27d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
28d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#ifndef IF_OPTIONS_H
29d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define IF_OPTIONS_H
30d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
31d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include <sys/param.h>
32d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include <sys/socket.h>
33d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include <net/if.h>
34d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include <netinet/in.h>
35d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
36d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include <getopt.h>
37d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include <limits.h>
38d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include <stdint.h>
39d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
40d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#include "auth.h"
41d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
42d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan/* Don't set any optional arguments here so we retain POSIX
43d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan * compatibility with getopt */
448e603a0d0354b88712f1a81cc48dbd9936244fd5Samuel Tan#define IF_OPTS "46abc:de:f:gh:i:j:kl:m:no:pqr:s:t:u:v:wxy:z:" \
45f20514bf582d08567217a3b06171bab5a11458eaSamuel Tan		"ABC:DEF:GHI:JKLMO:PQ:RS:TUVW:X:Z:"
46d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
47d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DEFAULT_TIMEOUT		30
48d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DEFAULT_REBOOT		5
49d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
50d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#ifndef HOSTNAME_MAX_LEN
51d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define HOSTNAME_MAX_LEN	250	/* 255 - 3 (FQDN) - 2 (DNS enc) */
52d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#endif
53d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define VENDORCLASSID_MAX_LEN	255
54d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define CLIENTID_MAX_LEN	48
55d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define USERCLASS_MAX_LEN	255
56d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define VENDOR_MAX_LEN		255
57d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
58d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_ARP			(1ULL << 0)
59d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_RELEASE			(1ULL << 1)
60d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DOMAIN			(1ULL << 2)
61d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_GATEWAY			(1ULL << 3)
62d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_STATIC			(1ULL << 4)
63d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DEBUG			(1ULL << 5)
64d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_LASTLEASE		(1ULL << 7)
65d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_INFORM			(1ULL << 8)
66d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_REQUEST			(1ULL << 9)
67d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV4LL			(1ULL << 10)
68d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DUID			(1ULL << 11)
69d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_PERSISTENT		(1ULL << 12)
70d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DAEMONISE		(1ULL << 14)
71d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DAEMONISED		(1ULL << 15)
72d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_TEST			(1ULL << 16)
73d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_MASTER			(1ULL << 17)
74d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_HOSTNAME			(1ULL << 18)
75d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_CLIENTID			(1ULL << 19)
76d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_LINK			(1ULL << 20)
77d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_QUIET			(1ULL << 21)
78d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_BACKGROUND		(1ULL << 22)
79d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_VENDORRAW		(1ULL << 23)
80d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_NOWAITIP			(1ULL << 24) /* To force daemonise */
81d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_WAITIP			(1ULL << 25)
82d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_SLAACPRIVATE		(1ULL << 26)
83d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_CSR_WARNED		(1ULL << 27)
84d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_XID_HWADDR		(1ULL << 28)
85d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_BROADCAST		(1ULL << 29)
86d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DUMPLEASE		(1ULL << 30)
87d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV6RS			(1ULL << 31)
88d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV6RA_REQRDNSS		(1ULL << 32)
89d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV6RA_OWN		(1ULL << 33)
90d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV6RA_OWN_DEFAULT	(1ULL << 34)
91d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV4			(1ULL << 35)
92d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_FORKED			(1ULL << 36)
93d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV6			(1ULL << 37)
94d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_STARTED			(1ULL << 38)
95d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_NOALIAS			(1ULL << 39)
96d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IA_FORCED		(1ULL << 40)
97d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_STOPPING			(1ULL << 41)
98d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DEPARTED			(1ULL << 42)
99d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_HOSTNAME_SHORT		(1ULL << 43)
100d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_EXITING			(1ULL << 44)
101d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_WAITIP4			(1ULL << 45)
102d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_WAITIP6			(1ULL << 46)
103d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DEV			(1ULL << 47)
104d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IAID			(1ULL << 48)
105d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DHCP			(1ULL << 49)
106d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_DHCP6			(1ULL << 50)
107d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_NOPFXDLG			(1ULL << 51)
108d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_PFXDLGONLY		(1ULL << 52)
109d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_PFXDLGMIX		(1ULL << 53)
110d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV6RA_AUTOCONF		(1ULL << 54)
111d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_ROUTER_HOST_ROUTE_WARNED	(1ULL << 55)
112d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_IPV6RA_ACCEPT_NOPUBLIC	(1ULL << 56)
113d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_BOOTP			(1ULL << 57)
1141c4088e958ed0fded0040bcb1d67b73159acfe8cSamuel Tan#define DHCPCD_ARPGW			(1ULL << 58)
115f20514bf582d08567217a3b06171bab5a11458eaSamuel Tan#define DHCPCD_UNICAST_ARP		(1ULL << 59)
116d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
117d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_WARNINGS (DHCPCD_CSR_WARNED | \
118d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan		DHCPCD_ROUTER_HOST_ROUTE_WARNED)
119d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#define DHCPCD_CONF (DHCPCD_NOPFXDLG | DHCPCD_PFXDLGONLY)
120d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
121d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanextern const struct option cf_options[];
122d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
1239177c6fae9fb7aecf0a0d378050788ba609a5a41Samuel Tan/* The number of bytes it takes to hold a flag for each of the 256 options. */
1249177c6fae9fb7aecf0a0d378050788ba609a5a41Samuel Tan#define OPTION_MASK_SIZE (256 / NBBY)
1259177c6fae9fb7aecf0a0d378050788ba609a5a41Samuel Tan
126d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanstruct if_sla {
127d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	char ifname[IF_NAMESIZE];
128d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint32_t sla;
129d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t prefix_len;
130d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	int8_t sla_set;
131d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan};
132d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
133d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanstruct if_ia {
134d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t iaid[4];
135d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#ifdef INET6
136d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint16_t ia_type;
137d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t iaid_set;
138d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct in6_addr addr;
139d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t prefix_len;
140d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint32_t sla_max;
141d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t sla_len;
142d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct if_sla *sla;
143d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#endif
144d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan};
145d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
146d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanstruct vivco {
147d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t len;
148d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t *data;
149d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan};
150d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
151d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanstruct if_options {
152d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	time_t mtime;
153d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t iaid[4];
154d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	int metric;
1559177c6fae9fb7aecf0a0d378050788ba609a5a41Samuel Tan	uint8_t requestmask[OPTION_MASK_SIZE];
1569177c6fae9fb7aecf0a0d378050788ba609a5a41Samuel Tan	uint8_t requiremask[OPTION_MASK_SIZE];
1579177c6fae9fb7aecf0a0d378050788ba609a5a41Samuel Tan	uint8_t nomask[OPTION_MASK_SIZE];
1589177c6fae9fb7aecf0a0d378050788ba609a5a41Samuel Tan	uint8_t rejectmask[OPTION_MASK_SIZE];
159d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t requestmask6[(UINT16_MAX + 1) / NBBY];
160d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t requiremask6[(UINT16_MAX + 1) / NBBY];
161d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t nomask6[(UINT16_MAX + 1) / NBBY];
162d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t rejectmask6[(UINT16_MAX + 1) / NBBY];
163d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t dstmask[256 / NBBY];
164d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint32_t leasetime;
165d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	time_t timeout;
166d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	time_t reboot;
167d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	unsigned long long options;
168d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
169d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct in_addr req_addr;
170d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct in_addr req_mask;
171d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct rt_head *routes;
172d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	char **config;
173d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
174d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	char **environ;
175d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	char *script;
176d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
177d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	char hostname[HOSTNAME_MAX_LEN + 1]; /* We don't store the length */
178d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t fqdn;
179d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t vendorclassid[VENDORCLASSID_MAX_LEN + 2];
180d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t clientid[CLIENTID_MAX_LEN + 2];
181d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t userclass[USERCLASS_MAX_LEN + 2];
182d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint8_t vendor[VENDOR_MAX_LEN + 2];
183d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
184d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t blacklist_len;
185d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	in_addr_t *blacklist;
186d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t whitelist_len;
187d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	in_addr_t *whitelist;
188d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t arping_len;
189d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	in_addr_t *arping;
190d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	char *fallback;
191d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
192d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct if_ia *ia;
193d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t ia_len;
194d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
195d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct dhcp_opt *dhcp_override;
196d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t dhcp_override_len;
197d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct dhcp_opt *dhcp6_override;
198d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t dhcp6_override_len;
199d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	uint32_t vivco_en;
200d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct vivco *vivco;
201d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t vivco_len;
202d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct dhcp_opt *vivso_override;
203d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	size_t vivso_override_len;
204d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
205d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan	struct auth auth;
206d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan};
207d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
208d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanstruct if_options *read_config(struct dhcpcd_ctx *,
209d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan    const char *, const char *, const char *);
210d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanint add_options(struct dhcpcd_ctx *, const char *,
211d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan    struct if_options *, int, char **);
212d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanvoid free_dhcp_opt_embenc(struct dhcp_opt *);
213d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tanvoid free_options(struct if_options *);
214d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan
215d7ed851d6fc26c5e7db96971dbe6b44342b97727Samuel Tan#endif
216