forked from DataSoft/Honeyd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dhcpclient.h
151 lines (135 loc) · 4.92 KB
/
dhcpclient.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
* Copyright (c) 2004 Niels Provos <[email protected]>
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Copyright (c) 2004 Marius Aamodt Eriksen <[email protected]>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _DHCPCLIENT_H
#define _DHCPCLIENT_H
#define NC_HOSTADDR 0x01
#define NC_GWADDR 0x02
#define NC_MASK 0x04
#define NC_DOMAIN 0x08
#define NC_NSADDR 0x10
struct netconf {
struct addr hostaddr;
struct addr gwaddr;
char domain[256];
struct addr nsaddr[4];
short defined;
};
#define DHREQ_STATE_BUSY 0x01
#define DHREQ_STATE_WAITANS 0x02
#define DHREQ_STATE_WAITACK 0x04
#define DHREQ_STATE_GOTACK 0x08
#define DHREQ_STATE_RENEWAL 0x10
struct dhcpclient_req {
int state;
eth_addr_t ea; /* our own */
eth_addr_t server_ea; /* from the server */
uint32_t xid;
struct event *timeoutEv;
struct event *renewEv;
struct event *renewTimeoutEv;
struct timeval timer;
struct timeval renewTimer;
struct netconf nc;
struct addr servident;
int ntries;
};
#define DH_BOOTREQUEST 1
#define DH_BOOTREPLY 2
#define DH_MAGICCOOKIE 0x63825363
#define DH_MSGTYPE_DISCOVER 1
#define DH_MSGTYPE_OFFER 2
#define DH_MSGTYPE_REQUEST 3
#define DH_MSGTYPE_DECLINE 4
#define DH_MSGTYPE_ACK 5
#define DH_MSGTYPE_NAK 6
#define DH_MSGTYPE_RELEASE 7
#define DH_SUBNETMASK 1
#define DH_ROUTER 3
#define DH_NS 6
#define DH_HOSTNAME 12
#define DH_DOMAINNAME 15
#define DH_REQIP 50
#define DH_LEASETIME 51
#define DH_MSGTYPE 53
#define DH_SERVIDENT 54
#define DH_PARAMREQ 55
#define DH_HTYPE_ETHERNET 1
struct dhcp_msg {
uint8_t dh_op;
uint8_t dh_htype;
uint8_t dh_hlen;
uint8_t dh_hops;
uint32_t dh_xid;
uint16_t dh_secs;
uint16_t dh_flags;
uint32_t dh_ciaddr;
uint32_t dh_yiaddr;
uint32_t dh_siaddr;
uint32_t dh_giaddr;
uint8_t dh_chaddr[16];
char dh_sname[64];
char dh_file[128];
uint32_t dh_magiccookie;
/* And options are packed onto here.. */
} __attribute__((__packed__));
struct template;
void dhcp_abort(struct template *);
int dhcp_release(struct template *);
void queue_dhcp_discover(struct template *tmpl);
void dhcp_send_discover();
void dhcp_recv_cb(struct eth_hdr *, struct ip_hdr *, u_short);
void dhcp_template_new(struct template *tmpl);
#endif /* _DHCPCLIENT_H */