1f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project/* 2f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * dhcpcd - DHCP client daemon 3f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * Copyright 2006-2008 Roy Marples <roy@marples.name> 4f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * All rights reserved 5f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 6f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * Redistribution and use in source and binary forms, with or without 7f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * modification, are permitted provided that the following conditions 8f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * are met: 9f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 10f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * notice, this list of conditions and the following disclaimer. 11f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 12f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 13f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * documentation and/or other materials provided with the distribution. 14f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * 15f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project * SUCH DAMAGE. 26f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project */ 27f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 28f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#ifndef DHCPCD_H 29f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_H 30f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 31f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#include <sys/param.h> 32f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#include <sys/socket.h> 33f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 34f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#include <net/if.h> 35f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#include <netinet/in.h> 36f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 37f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#include <limits.h> 38f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 39f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#include "common.h" 40f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 41f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DEFAULT_TIMEOUT 30 42f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DEFAULT_LEASETIME 3600 /* 1 hour */ 43f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 44f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define HOSTNAME_MAX_LEN 250 /* 255 - 3 (FQDN) - 2 (DNS enc) */ 45f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define VENDORCLASSID_MAX_LEN 48 46f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define CLIENTID_MAX_LEN 48 47f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define USERCLASS_MAX_LEN 255 48f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define VENDOR_MAX_LEN 255 49f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 50f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_ARP (1 << 0) 51f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_DOMAIN (1 << 2) 52f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_GATEWAY (1 << 3) 53f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_LASTLEASE (1 << 7) 54f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_INFORM (1 << 8) 55f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_REQUEST (1 << 9) 56f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_IPV4LL (1 << 10) 57f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_DUID (1 << 11) 58f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_PERSISTENT (1 << 12) 59f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_DAEMONISE (1 << 14) 60f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_DAEMONISED (1 << 15) 61f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_TEST (1 << 16) 62f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_FORKED (1 << 17) 63f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_HOSTNAME (1 << 18) 64f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_CLIENTID (1 << 19) 65f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_LINK (1 << 20) 66f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#define DHCPCD_BACKGROUND (1 << 21) 67f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 68f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Projectstruct options { 69f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project char interface[IF_NAMESIZE]; 70f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project int metric; 71f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project uint8_t requestmask[256 / 8]; 72f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project uint8_t requiremask[256 / 8]; 73f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project uint8_t nomask[256 / 8]; 74f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project uint32_t leasetime; 75f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project time_t timeout; 76f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project int options; 77f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 78f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project struct in_addr request_address; 79f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project struct in_addr request_netmask; 80f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 81f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project char **environ; 82f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project char script[PATH_MAX]; 83f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project char pidfile[PATH_MAX]; 84f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 85938bc384f44031877543765a9ae18c764f5da9c8Dmitry Shmidt char hostname[HOSTNAME_MAX_LEN + 1]; /* We don't store the lenth */ 86f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project int fqdn; 87938bc384f44031877543765a9ae18c764f5da9c8Dmitry Shmidt uint8_t vendorclassid[VENDORCLASSID_MAX_LEN + 2]; 88938bc384f44031877543765a9ae18c764f5da9c8Dmitry Shmidt char clientid[CLIENTID_MAX_LEN + 2]; 89938bc384f44031877543765a9ae18c764f5da9c8Dmitry Shmidt uint8_t userclass[USERCLASS_MAX_LEN + 2]; 90938bc384f44031877543765a9ae18c764f5da9c8Dmitry Shmidt uint8_t vendor[VENDOR_MAX_LEN + 2]; 91f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project 92f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project size_t blacklist_len; 93f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project in_addr_t *blacklist; 94f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project}; 95f7c5421560640d23fc10803b9d59a9ff1d83e467The Android Open Source Project#endif 96