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 "dhcp.h" 37#include "if-options.h" 38 39#define HWADDR_LEN 20 40#define IF_SSIDSIZE 33 41#define PROFILE_LEN 64 42 43enum DHS { 44 DHS_INIT, 45 DHS_DISCOVER, 46 DHS_REQUEST, 47 DHS_BOUND, 48 DHS_RENEW, 49 DHS_REBIND, 50 DHS_REBOOT, 51 DHS_INFORM, 52 DHS_RENEW_REQUESTED, 53 DHS_INIT_IPV4LL, 54 DHS_PROBE 55}; 56 57#define LINK_UP 1 58#define LINK_UNKNOWN 0 59#define LINK_DOWN -1 60 61struct if_state { 62 enum DHS state; 63 char profile[PROFILE_LEN]; 64 struct if_options *options; 65 struct dhcp_message *sent; 66 struct dhcp_message *offer; 67 struct dhcp_message *new; 68 struct dhcp_message *old; 69 struct dhcp_lease lease; 70 const char *reason; 71 time_t interval; 72 time_t nakoff; 73 uint32_t xid; 74 int socket; 75 int probes; 76 int claims; 77 int conflicts; 78 time_t defend; 79 struct in_addr fail; 80 size_t arping_index; 81}; 82 83struct interface { 84 char name[IF_NAMESIZE]; 85 struct if_state *state; 86 87 int flags; 88 sa_family_t family; 89 unsigned char hwaddr[HWADDR_LEN]; 90 size_t hwlen; 91 int metric; 92 int carrier; 93 int wireless; 94 char ssid[IF_SSIDSIZE]; 95 96 int raw_fd; 97 int udp_fd; 98 int arp_fd; 99 size_t buffer_size, buffer_len, buffer_pos; 100 unsigned char *buffer; 101 102 struct in_addr addr; 103 struct in_addr net; 104 struct in_addr dst; 105 106 char leasefile[PATH_MAX]; 107 time_t start_uptime; 108 109 unsigned char *clientid; 110 111 struct interface *next; 112}; 113 114extern int pidfd; 115extern int options; 116extern int ifac; 117extern char **ifav; 118extern int ifdc; 119extern char **ifdv; 120extern struct interface *ifaces; 121 122#endif 123