1 /* 2 * dhcpcd - DHCP client daemon 3 * Copyright (c) 2006-2010 Roy Marples <roy@marples.name> 4 * All rights reserved 5 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28 #ifndef DHCPCD_H 29 #define DHCPCD_H 30 31 #include <sys/socket.h> 32 #include <net/if.h> 33 34 #include <limits.h> 35 36 #include "control.h" 37 #include "dhcp.h" 38 #include "if-options.h" 39 40 #define HWADDR_LEN 20 41 #define IF_SSIDSIZE 33 42 #define PROFILE_LEN 64 43 44 enum DHS { 45 DHS_INIT, 46 DHS_DISCOVER, 47 DHS_REQUEST, 48 DHS_BOUND, 49 DHS_RENEW, 50 DHS_REBIND, 51 DHS_REBOOT, 52 DHS_INFORM, 53 DHS_RENEW_REQUESTED, 54 DHS_INIT_IPV4LL, 55 DHS_PROBE 56 }; 57 58 #define LINK_UP 1 59 #define LINK_UNKNOWN 0 60 #define LINK_DOWN -1 61 62 struct if_state { 63 enum DHS state; 64 char profile[PROFILE_LEN]; 65 struct if_options *options; 66 struct dhcp_message *sent; 67 struct dhcp_message *offer; 68 struct dhcp_message *new; 69 struct dhcp_message *old; 70 struct dhcp_lease lease; 71 const char *reason; 72 time_t interval; 73 time_t nakoff; 74 uint32_t xid; 75 int socket; 76 int probes; 77 int claims; 78 int conflicts; 79 time_t defend; 80 struct in_addr fail; 81 size_t arping_index; 82 }; 83 84 struct interface { 85 char name[IF_NAMESIZE]; 86 struct if_state *state; 87 88 int flags; 89 sa_family_t family; 90 unsigned char hwaddr[HWADDR_LEN]; 91 size_t hwlen; 92 int metric; 93 int carrier; 94 int wireless; 95 char ssid[IF_SSIDSIZE]; 96 97 int raw_fd; 98 int udp_fd; 99 int arp_fd; 100 size_t buffer_size, buffer_len, buffer_pos; 101 unsigned char *buffer; 102 103 struct in_addr addr; 104 struct in_addr net; 105 struct in_addr dst; 106 107 char leasefile[PATH_MAX]; 108 time_t start_uptime; 109 110 unsigned char *clientid; 111 112 struct interface *next; 113 }; 114 115 extern int pidfd; 116 extern int options; 117 extern int ifac; 118 extern char **ifav; 119 extern int ifdc; 120 extern char **ifdv; 121 extern struct interface *ifaces; 122 extern int avoid_routes; 123 124 struct interface *find_interface(const char *); 125 int handle_args(struct fd_list *, int, char **); 126 void handle_interface(int, const char *); 127 void handle_hwaddr(const char *, unsigned char *, size_t); 128 void handle_ifa(int, const char *, 129 struct in_addr *, struct in_addr *, struct in_addr *); 130 void handle_exit_timeout(void *); 131 void start_interface(void *); 132 void start_discover(void *); 133 void start_request(void *); 134 void start_renew(void *); 135 void start_rebind(void *); 136 void start_reboot(struct interface *); 137 void start_expire(void *); 138 void send_decline(struct interface *); 139 void open_sockets(struct interface *); 140 void close_sockets(struct interface *); 141 void drop_config(struct interface *, const char *); 142 int select_profile(struct interface *, const char *); 143 144 #endif 145