Line No. | Rev | Author | Line |
---|---|---|---|
1 | 32 | kaklik | /********************************************************************* |
2 | * |
||
3 | * DHCP Defs for Microchip TCP/IP Stack |
||
4 | * |
||
5 | ********************************************************************* |
||
6 | * FileName: DHCP.h |
||
7 | * Dependencies: TCPIPStack.h |
||
8 | * UDP.h |
||
9 | * Processor: PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F, PIC32 |
||
10 | * Compiler: Microchip C32 v1.05 or higher |
||
11 | * Microchip C30 v3.12 or higher |
||
12 | * Microchip C18 v3.30 or higher |
||
13 | * HI-TECH PICC-18 PRO 9.63PL2 or higher |
||
14 | * Company: Microchip Technology, Inc. |
||
15 | * |
||
16 | * Software License Agreement |
||
17 | * |
||
18 | * Copyright (C) 2002-2009 Microchip Technology Inc. All rights |
||
19 | * reserved. |
||
20 | * |
||
21 | * Microchip licenses to you the right to use, modify, copy, and |
||
22 | * distribute: |
||
23 | * (i) the Software when embedded on a Microchip microcontroller or |
||
24 | * digital signal controller product ("Device") which is |
||
25 | * integrated into Licensee's product; or |
||
26 | * (ii) ONLY the Software driver source files ENC28J60.c, ENC28J60.h, |
||
27 | * ENCX24J600.c and ENCX24J600.h ported to a non-Microchip device |
||
28 | * used in conjunction with a Microchip ethernet controller for |
||
29 | * the sole purpose of interfacing with the ethernet controller. |
||
30 | * |
||
31 | * You should refer to the license agreement accompanying this |
||
32 | * Software for additional information regarding your rights and |
||
33 | * obligations. |
||
34 | * |
||
35 | * THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT |
||
36 | * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT |
||
37 | * LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A |
||
38 | * PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL |
||
39 | * MICROCHIP BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR |
||
40 | * CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF |
||
41 | * PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS |
||
42 | * BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE |
||
43 | * THEREOF), ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER |
||
44 | * SIMILAR COSTS, WHETHER ASSERTED ON THE BASIS OF CONTRACT, TORT |
||
45 | * (INCLUDING NEGLIGENCE), BREACH OF WARRANTY, OR OTHERWISE. |
||
46 | * |
||
47 | * |
||
48 | * Author Date Comment |
||
49 | *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
50 | * Nilesh Rajbharti 3/21/01 Original (Rev 1.0) |
||
51 | ********************************************************************/ |
||
52 | #ifndef __DHCP_H |
||
53 | #define __DHCP_H |
||
54 | |||
55 | // UDP client port for DHCP Client transactions |
||
56 | #define DHCP_CLIENT_PORT (68u) |
||
57 | // UDP listening port for DHCP Server messages |
||
58 | #define DHCP_SERVER_PORT (67u) |
||
59 | |||
60 | #define BOOT_REQUEST (1u) // BOOT_REQUEST DHCP type |
||
61 | #define BOOT_REPLY (2u) // BOOT_REPLY DHCP type |
||
62 | #define BOOT_HW_TYPE (1u) // BOOT_HW_TYPE DHCP type |
||
63 | #define BOOT_LEN_OF_HW_TYPE (6u) // BOOT_LEN_OF_HW_TYPE DHCP type |
||
64 | |||
65 | #define DHCP_MESSAGE_TYPE (53u) // DHCP Message Type constant |
||
66 | #define DHCP_MESSAGE_TYPE_LEN (1u) // Length of DHCP Message Type |
||
67 | |||
68 | #define DHCP_UNKNOWN_MESSAGE (0u) // Code for unknown DHCP message |
||
69 | |||
70 | #define DHCP_DISCOVER_MESSAGE (1u) // DCHP Discover Message |
||
71 | #define DHCP_OFFER_MESSAGE (2u) // DHCP Offer Message |
||
72 | #define DHCP_REQUEST_MESSAGE (3u) // DHCP Request message |
||
73 | #define DHCP_DECLINE_MESSAGE (4u) // DHCP Decline Message |
||
74 | #define DHCP_ACK_MESSAGE (5u) // DHCP ACK Message |
||
75 | #define DHCP_NAK_MESSAGE (6u) // DHCP NAK Message |
||
76 | #define DHCP_RELEASE_MESSAGE (7u) // DCHP Release message |
||
77 | |||
78 | #define DHCP_SERVER_IDENTIFIER (54u) // DHCP Server Identifier |
||
79 | #define DHCP_SERVER_IDENTIFIER_LEN (4u) // DHCP Server Identifier length |
||
80 | |||
81 | #define DHCP_OPTION_ACK_MESSAGE (53u) // DHCP_OPTION_ACK_MESSAGE Type |
||
82 | #define DHCP_PARAM_REQUEST_LIST (55u) // DHCP_PARAM_REQUEST_LIST Type |
||
83 | #define DHCP_PARAM_REQUEST_LIST_LEN (4u) // DHCP_PARAM_REQUEST_LIST_LEN Type |
||
84 | #define DHCP_PARAM_REQUEST_IP_ADDRESS (50u) // DHCP_PARAM_REQUEST_IP_ADDRESS Type |
||
85 | #define DHCP_PARAM_REQUEST_IP_ADDRESS_LEN (4u) // DHCP_PARAM_REQUEST_IP_ADDRESS_LEN Type |
||
86 | #define DHCP_SUBNET_MASK (1u) // DHCP_SUBNET_MASK Type |
||
87 | #define DHCP_ROUTER (3u) // DHCP_ROUTER Type |
||
88 | #define DHCP_DNS (6u) // DHCP_DNS Type |
||
89 | #define DHCP_HOST_NAME (12u) // DHCP_HOST_NAME Type |
||
90 | #define DHCP_IP_LEASE_TIME (51u) // DHCP_IP_LEASE_TIME Type |
||
91 | #define DHCP_END_OPTION (255u) // DHCP_END_OPTION Type |
||
92 | |||
93 | // DHCP or BOOTP Header structure |
||
94 | typedef struct __attribute__((aligned(2), packed)) |
||
95 | { |
||
96 | BYTE MessageType; // Message type for this message |
||
97 | BYTE HardwareType; // Hardware type for this message |
||
98 | BYTE HardwareLen; // Length of hardware type |
||
99 | BYTE Hops; // Number of hops |
||
100 | DWORD TransactionID; // DHCP Transaction ID |
||
101 | WORD SecondsElapsed; // Number of elapsed seconds |
||
102 | WORD BootpFlags; // BOOTP Flags |
||
103 | IP_ADDR ClientIP; // Client IP |
||
104 | IP_ADDR YourIP; // Your IP |
||
105 | IP_ADDR NextServerIP; // Next Server IP |
||
106 | IP_ADDR RelayAgentIP; // Relay Agent IP |
||
107 | MAC_ADDR ClientMAC; // Client MAC Address |
||
108 | } BOOTP_HEADER; |
||
109 | |||
110 | // DHCP State Machine |
||
111 | typedef enum |
||
112 | { |
||
113 | SM_DHCP_DISABLED = 0, // DHCP is not currently enabled |
||
114 | SM_DHCP_GET_SOCKET, // DHCP is trying to obtain a socket |
||
115 | SM_DHCP_SEND_DISCOVERY, // DHCP is sending a DHCP Discover message |
||
116 | SM_DHCP_GET_OFFER, // DHCP is waiting for a DHCP Offer |
||
117 | SM_DHCP_SEND_REQUEST, // DHCP is sending a DHCP Send Reequest message |
||
118 | SM_DHCP_GET_REQUEST_ACK, // DCHP is waiting for a Request ACK message |
||
119 | SM_DHCP_BOUND, // DHCP is bound |
||
120 | SM_DHCP_SEND_RENEW, // DHCP is sending a DHCP renew message (first try) |
||
121 | SM_DHCP_GET_RENEW_ACK, // DHCP is waiting for a renew ACK |
||
122 | SM_DHCP_SEND_RENEW2, // DHCP is sending a DHCP renew message (second try) |
||
123 | SM_DHCP_GET_RENEW_ACK2, // DHCP is waiting for a renew ACK |
||
124 | SM_DHCP_SEND_RENEW3, // DHCP is sending a DHCP renew message (third try) |
||
125 | SM_DHCP_GET_RENEW_ACK3 // DHCP is waiting for a renew ACK |
||
126 | } SM_DHCP; |
||
127 | |||
128 | |||
129 | void DHCPInit(BYTE vInterface); |
||
130 | void DHCPTask(void); |
||
131 | void DHCPServerTask(void); |
||
132 | void DHCPDisable(BYTE vInterface); |
||
133 | void DHCPEnable(BYTE vInterface); |
||
134 | BOOL DHCPIsEnabled(BYTE vInterface); |
||
135 | BOOL DHCPIsBound(BYTE vInterface); |
||
136 | BOOL DHCPStateChanged(BYTE vInterface); |
||
137 | BOOL DHCPIsServerDetected(BYTE vInterface); |
||
138 | |||
139 | extern BOOL bDHCPServerEnabled; |
||
140 | |||
141 | #endif |
Powered by WebSVN v2.8.3