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 44enum 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 62struct 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 84struct 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 115extern int pidfd; 116extern int options; 117extern int ifac; 118extern char **ifav; 119extern int ifdc; 120extern char **ifdv; 121extern struct interface *ifaces; 122extern int avoid_routes; 123 124struct interface *find_interface(const char *); 125int handle_args(struct fd_list *, int, char **); 126void handle_interface(int, const char *); 127void handle_hwaddr(const char *, unsigned char *, size_t); 128void handle_ifa(int, const char *, 129 struct in_addr *, struct in_addr *, struct in_addr *); 130void handle_exit_timeout(void *); 131void start_interface(void *); 132void start_discover(void *); 133void start_request(void *); 134void start_renew(void *); 135void start_rebind(void *); 136void start_reboot(struct interface *); 137void start_expire(void *); 138void send_decline(struct interface *); 139void open_sockets(struct interface *); 140void close_sockets(struct interface *); 141void drop_config(struct interface *, const char *); 142int select_profile(struct interface *, const char *); 143 144#endif 145