📄 dhcpc.lst
字号:
C51 COMPILER V9.00 DHCPC 02/08/2010 20:58:33 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE DHCPC
OBJECT MODULE PLACED IN .\dhcpc.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\uip1.0\apps\dhcpc\dhcpc.c LARGE BROWSE INCDIR(..\uip1.0\apps;..\uip1.0\u
-ip;..\cp2200;..\cp2200;..\uip1.0\apps\dhcpc;..\uip1.0\apps\httpd) DEBUG OBJECTEXTEND PRINT(.\dhcpc.lst) OBJECT(.\dhcpc.o
-bj)
line level source
1 /*
2 * Copyright (c) 2005, Swedish Institute of Computer Science
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the Institute nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * This file is part of the uIP TCP/IP stack
30 *
31 * @(#)$Id: dhcpc.c,v 1.2 2006/06/11 21:46:37 adam Exp $
32 */
33
34 #include <stdio.h>
35 #include <string.h>
36
37 #include "uip.h"
38 #include "dhcpc.h"
39 #include "uip_timer.h"
40 #include "pt.h"
41
42 #define STATE_INITIAL 0
43 #define STATE_SENDING 1
44 #define STATE_OFFER_RECEIVED 2
45
46 #define STATE_CONFIG_RECEIVED 3
47
48
49
50 static struct dhcpc_state s;
51
52
53 struct dhcp_msg {
C51 COMPILER V9.00 DHCPC 02/08/2010 20:58:33 PAGE 2
54 u8_t op, htype, hlen, hops;
55 u8_t xid[4];
56 u16_t secs, flags;
57 u8_t ciaddr[4];
58 u8_t yiaddr[4];
59 u8_t siaddr[4];
60 u8_t giaddr[4];
61 u8_t chaddr[16];
62 #ifndef UIP_CONF_DHCP_LIGHT
63 u8_t sname[64];
64 u8_t file[128];
65 #endif
66 u8_t options[312];
67 };
68
69 #define BOOTP_BROADCAST 0x8000
70
71 #define DHCP_REQUEST 1
72 #define DHCP_REPLY 2
73 #define DHCP_HTYPE_ETHERNET 1
74 #define DHCP_HLEN_ETHERNET 6
75 #define DHCP_MSG_LEN 236
76
77 #define DHCPC_SERVER_PORT 67
78 #define DHCPC_CLIENT_PORT 68
79
80 #define DHCPDISCOVER 1
81 #define DHCPOFFER 2
82 #define DHCPREQUEST 3
83 #define DHCPDECLINE 4
84 #define DHCPACK 5
85 #define DHCPNAK 6
86 #define DHCPRELEASE 7
87
88 #define DHCP_OPTION_SUBNET_MASK 1
89 #define DHCP_OPTION_ROUTER 3
90 #define DHCP_OPTION_DNS_SERVER 6
91 #define DHCP_OPTION_REQ_IPADDR 50
92 #define DHCP_OPTION_LEASE_TIME 51
93 #define DHCP_OPTION_MSG_TYPE 53
94 #define DHCP_OPTION_SERVER_ID 54
95 #define DHCP_OPTION_REQ_LIST 55
96 #define DHCP_OPTION_END 255
97
98 static const u8_t xid[4] = {0xad, 0xde, 0x12, 0x23};
99 static const u8_t magic_cookie[4] = {99, 130, 83, 99};
100 /*---------------------------------------------------------------------------*/
101 static u8_t *
102 add_msg_type(u8_t *optptr, u8_t type)
103 {
104 1 *optptr++ = DHCP_OPTION_MSG_TYPE;
105 1 *optptr++ = 1;
106 1 *optptr++ = type;
107 1 return optptr;
108 1 }
109 /*---------------------------------------------------------------------------*/
110 static u8_t *
111 add_server_id(u8_t *optptr)
112 {
113 1 *optptr++ = DHCP_OPTION_SERVER_ID;
114 1 *optptr++ = 4;
115 1 memcpy(optptr, s.serverid, 4);
C51 COMPILER V9.00 DHCPC 02/08/2010 20:58:33 PAGE 3
116 1 return optptr + 4;
117 1 }
118 /*---------------------------------------------------------------------------*/
119 static u8_t *
120 add_req_ipaddr(u8_t *optptr)
121 {
122 1 *optptr++ = DHCP_OPTION_REQ_IPADDR;
123 1 *optptr++ = 4;
124 1 memcpy(optptr, s.ipaddr, 4);
125 1 return optptr + 4;
126 1 }
127 /*---------------------------------------------------------------------------*/
128 static u8_t *
129 add_req_options(u8_t *optptr)
130 {
131 1 *optptr++ = DHCP_OPTION_REQ_LIST;
132 1 *optptr++ = 3;
133 1 *optptr++ = DHCP_OPTION_SUBNET_MASK;
134 1 *optptr++ = DHCP_OPTION_ROUTER;
135 1 *optptr++ = DHCP_OPTION_DNS_SERVER;
136 1 return optptr;
137 1 }
138 /*---------------------------------------------------------------------------*/
139 static u8_t *
140 add_end(u8_t *optptr)
141 {
142 1 *optptr++ = DHCP_OPTION_END;
143 1 return optptr;
144 1 }
145 /*---------------------------------------------------------------------------*/
146 static void
147 create_msg(register struct dhcp_msg *m)
148 {
149 1 m->op = DHCP_REQUEST;
150 1 m->htype = DHCP_HTYPE_ETHERNET;
151 1 m->hlen = s.mac_len;
152 1 m->hops = 0;
153 1 memcpy(m->xid, xid, sizeof(m->xid));
154 1 m->secs = 0;
155 1 m->flags = HTONS(BOOTP_BROADCAST); /* Broadcast bit. */
156 1 /* uip_ipaddr_copy(m->ciaddr, uip_hostaddr);*/
157 1 memcpy(m->ciaddr, uip_hostaddr, sizeof(m->ciaddr));
158 1 memset(m->yiaddr, 0, sizeof(m->yiaddr));
159 1 memset(m->siaddr, 0, sizeof(m->siaddr));
160 1 memset(m->giaddr, 0, sizeof(m->giaddr));
161 1 memcpy(m->chaddr, s.mac_addr, s.mac_len);
162 1 memset(&m->chaddr[s.mac_len], 0, sizeof(m->chaddr) - s.mac_len);
163 1 #ifndef UIP_CONF_DHCP_LIGHT
164 1 memset(m->sname, 0, sizeof(m->sname));
165 1 memset(m->file, 0, sizeof(m->file));
166 1 #endif
167 1
168 1 memcpy(m->options, magic_cookie, sizeof(magic_cookie));
169 1 }
170 /*---------------------------------------------------------------------------*/
171 static void
172 send_discover(void)
173 {
174 1 u8_t *end;
175 1 struct dhcp_msg *m = (struct dhcp_msg *)uip_appdata;
176 1
177 1 create_msg(m);
C51 COMPILER V9.00 DHCPC 02/08/2010 20:58:33 PAGE 4
178 1
179 1 end = add_msg_type(&m->options[4], DHCPDISCOVER);
180 1 end = add_req_options(end);
181 1 end = add_end(end);
182 1
183 1 uip_send(uip_appdata, end - (u8_t *)uip_appdata);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -