etc/protocols - sync with NetBSD-8
[minix.git] / external / bsd / dhcpcd / dist / dhcpcd.h
blob2c8037fe25d8f125220f10359db76a421e87b9a1
1 /* $NetBSD: dhcpcd.h,v 1.13 2015/08/21 10:39:00 roy Exp $ */
3 /*
4 * dhcpcd - DHCP client daemon
5 * Copyright (c) 2006-2015 Roy Marples <roy@marples.name>
6 * All rights reserved
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
30 #ifndef DHCPCD_H
31 #define DHCPCD_H
33 #include <sys/socket.h>
34 #include <net/if.h>
36 #include "config.h"
37 #ifdef HAVE_SYS_QUEUE_H
38 #include <sys/queue.h>
39 #endif
41 #include "defs.h"
42 #include "control.h"
43 #include "if-options.h"
45 #define HWADDR_LEN 20
46 #define IF_SSIDSIZE 33
47 #define PROFILE_LEN 64
48 #define SECRET_LEN 64
50 #define LINK_UP 1
51 #define LINK_UNKNOWN 0
52 #define LINK_DOWN -1
54 #define IF_DATA_IPV4 0
55 #define IF_DATA_ARP 1
56 #define IF_DATA_IPV4LL 2
57 #define IF_DATA_DHCP 3
58 #define IF_DATA_IPV6 4
59 #define IF_DATA_IPV6ND 5
60 #define IF_DATA_DHCP6 6
61 #define IF_DATA_MAX 7
63 /* If the interface does not support carrier status (ie PPP),
64 * dhcpcd can poll it for the relevant flags periodically */
65 #define IF_POLL_UP 100 /* milliseconds */
67 #ifdef __QNX__
68 /* QNX carries defines for, but does not actually support PF_LINK */
69 #undef IFLR_ACTIVE
70 #endif
72 struct interface {
73 struct dhcpcd_ctx *ctx;
74 TAILQ_ENTRY(interface) next;
75 char name[IF_NAMESIZE];
76 #ifdef __linux__
77 char alias[IF_NAMESIZE];
78 #endif
79 unsigned int index;
80 unsigned int flags;
81 sa_family_t family;
82 unsigned char hwaddr[HWADDR_LEN];
83 uint8_t hwlen;
84 unsigned int metric;
85 int carrier;
86 int wireless;
87 uint8_t ssid[IF_SSIDSIZE];
88 unsigned int ssid_len;
90 char profile[PROFILE_LEN];
91 struct if_options *options;
92 void *if_data[IF_DATA_MAX];
94 TAILQ_HEAD(if_head, interface);
96 struct dhcpcd_ctx {
97 int pid_fd;
98 char pidfile[sizeof(PIDFILE) + IF_NAMESIZE + 1];
99 const char *cffile;
100 unsigned long long options;
101 char *logfile;
102 int log_fd;
103 int argc;
104 char **argv;
105 int ifac; /* allowed interfaces */
106 char **ifav; /* allowed interfaces */
107 int ifdc; /* denied interfaces */
108 char **ifdv; /* denied interfaces */
109 int ifc; /* listed interfaces */
110 char **ifv; /* listed interfaces */
111 int ifcc; /* configured interfaces */
112 char **ifcv; /* configured interfaces */
113 unsigned char *duid;
114 size_t duid_len;
115 struct if_head *ifaces;
117 int pf_inet_fd;
118 #if defined(INET6) && defined(BSD)
119 int pf_inet6_fd;
120 #endif
121 #ifdef IFLR_ACTIVE
122 int pf_link_fd;
123 #endif
124 int link_fd;
126 #ifdef USE_SIGNALS
127 sigset_t sigset;
128 #endif
129 struct eloop *eloop;
131 int control_fd;
132 int control_unpriv_fd;
133 struct fd_list_head control_fds;
134 char control_sock[sizeof(CONTROLSOCKET) + IF_NAMESIZE];
135 gid_t control_group;
137 /* DHCP Enterprise options, RFC3925 */
138 struct dhcp_opt *vivso;
139 size_t vivso_len;
141 char *randomstate; /* original state */
143 #ifdef INET
144 struct dhcp_opt *dhcp_opts;
145 size_t dhcp_opts_len;
146 struct rt_head *ipv4_routes;
147 struct rt_head *ipv4_kroutes;
149 int udp_fd;
150 uint8_t *packet;
152 /* Our aggregate option buffer.
153 * We ONLY use this when options are split, which for most purposes is
154 * practically never. See RFC3396 for details. */
155 uint8_t *opt_buffer;
156 #endif
157 #ifdef INET6
158 unsigned char secret[SECRET_LEN];
159 size_t secret_len;
161 struct dhcp_opt *nd_opts;
162 size_t nd_opts_len;
163 struct dhcp_opt *dhcp6_opts;
164 size_t dhcp6_opts_len;
165 struct ipv6_ctx *ipv6;
166 #ifndef __linux__
167 int ra_global;
168 #endif
169 #endif /* INET6 */
171 #ifdef PLUGIN_DEV
172 char *dev_load;
173 int dev_fd;
174 struct dev *dev;
175 void *dev_handle;
176 #endif
179 #ifdef USE_SIGNALS
180 extern const int dhcpcd_signals[];
181 extern const size_t dhcpcd_signals_len;
182 #endif
184 int dhcpcd_ifafwaiting(const struct interface *);
185 int dhcpcd_afwaiting(const struct dhcpcd_ctx *);
186 pid_t dhcpcd_daemonise(struct dhcpcd_ctx *);
188 int dhcpcd_handleargs(struct dhcpcd_ctx *, struct fd_list *, int, char **);
189 void dhcpcd_handlecarrier(struct dhcpcd_ctx *, int, unsigned int, const char *);
190 int dhcpcd_handleinterface(void *, int, const char *);
191 void dhcpcd_handlehwaddr(struct dhcpcd_ctx *, const char *,
192 const unsigned char *, uint8_t);
193 void dhcpcd_dropinterface(struct interface *, const char *);
194 int dhcpcd_selectprofile(struct interface *, const char *);
196 void dhcpcd_startinterface(void *);
197 void dhcpcd_initstate(struct interface *, unsigned long long);
199 #endif