1e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt/* 2e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * dhcpcd - DHCP client daemon 3a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt * Copyright (c) 2006-2012 Roy Marples <roy@marples.name> 4e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * All rights reserved 5e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 6e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * Redistribution and use in source and binary forms, with or without 7e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * modification, are permitted provided that the following conditions 8e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * are met: 9e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * 1. Redistributions of source code must retain the above copyright 10e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * notice, this list of conditions and the following disclaimer. 11e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * 2. Redistributions in binary form must reproduce the above copyright 12e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * notice, this list of conditions and the following disclaimer in the 13e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * documentation and/or other materials provided with the distribution. 14e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * 15e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * SUCH DAMAGE. 26e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt */ 27e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 28e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#ifndef IF_OPTIONS_H 29e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#define IF_OPTIONS_H 30e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 31e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <sys/socket.h> 32e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <net/if.h> 33e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <netinet/in.h> 34e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 35e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <getopt.h> 36e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <limits.h> 37e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 38e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt/* Don't set any optional arguments here so we retain POSIX 39e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * compatibility with getopt */ 400d3a47d979ac35a49b2a2da9e80e16bd37aab877repo sync#define IF_OPTS "abc:de:f:gh:i:kl:m:no:pqr:s:t:u:v:wxy:z:ABC:DEF:GHI:JKLO:Q:S:TUVW:X:Z:" 41e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 42e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#define DEFAULT_TIMEOUT 30 43a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DEFAULT_REBOOT 5 44e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 45e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#define HOSTNAME_MAX_LEN 250 /* 255 - 3 (FQDN) - 2 (DNS enc) */ 46e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#define VENDORCLASSID_MAX_LEN 255 47e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#define CLIENTID_MAX_LEN 48 48e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#define USERCLASS_MAX_LEN 255 49e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#define VENDOR_MAX_LEN 255 50e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 51a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_ARP (1ULL << 0) 52a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_RELEASE (1ULL << 1) 53a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_DOMAIN (1ULL << 2) 54a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_GATEWAY (1ULL << 3) 55a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_STATIC (1ULL << 4) 56a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_DEBUG (1ULL << 5) 57a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_LASTLEASE (1ULL << 7) 58a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_INFORM (1ULL << 8) 59a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_REQUEST (1ULL << 9) 60a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_IPV4LL (1ULL << 10) 61a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_DUID (1ULL << 11) 62a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_PERSISTENT (1ULL << 12) 63a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_DAEMONISE (1ULL << 14) 64a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_DAEMONISED (1ULL << 15) 65a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_TEST (1ULL << 16) 66a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_MASTER (1ULL << 17) 67a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_HOSTNAME (1ULL << 18) 68a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_CLIENTID (1ULL << 19) 69a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_LINK (1ULL << 20) 70a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_QUIET (1ULL << 21) 71a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_BACKGROUND (1ULL << 22) 72a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_VENDORRAW (1ULL << 23) 73a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_TIMEOUT_IPV4LL (1ULL << 24) 74a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_WAITIP (1ULL << 25) 75a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_WAITUP (1ULL << 26) 76a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_CSR_WARNED (1ULL << 27) 77a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_XID_HWADDR (1ULL << 28) 78a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_BROADCAST (1ULL << 29) 79a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_DUMPLEASE (1ULL << 30) 80a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_IPV6RS (1ULL << 31) 81a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#define DHCPCD_IPV6RA_REQRDNSS (1ULL << 32) 82e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 83e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidtextern const struct option cf_options[]; 84e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 85e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidtstruct if_options { 86e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt int metric; 87e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint8_t requestmask[256 / 8]; 88e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint8_t requiremask[256 / 8]; 89e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint8_t nomask[256 / 8]; 90e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint8_t dstmask[256 / 8]; 91e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint32_t leasetime; 92e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt time_t timeout; 93e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt time_t reboot; 94a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt unsigned long long options; 95e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 96e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt struct in_addr req_addr; 97e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt struct in_addr req_mask; 98e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt struct rt *routes; 99e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt char **config; 100e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 101e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt char **environ; 102e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt char script[PATH_MAX]; 103e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 104e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt char hostname[HOSTNAME_MAX_LEN + 1]; /* We don't store the length */ 105e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt int fqdn; 106e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint8_t vendorclassid[VENDORCLASSID_MAX_LEN + 2]; 107e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt char clientid[CLIENTID_MAX_LEN + 2]; 108e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint8_t userclass[USERCLASS_MAX_LEN + 2]; 109e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt uint8_t vendor[VENDOR_MAX_LEN + 2]; 110e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 111e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt size_t blacklist_len; 112e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt in_addr_t *blacklist; 113e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt size_t whitelist_len; 114e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt in_addr_t *whitelist; 115e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt size_t arping_len; 116e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt in_addr_t *arping; 117e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt char *fallback; 118e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt}; 119e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 120e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidtstruct if_options *read_config(const char *, 121e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt const char *, const char *, const char *); 122e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidtint add_options(struct if_options *, int, char **); 123e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidtvoid free_options(struct if_options *); 124e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 125e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#endif 126