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