dhcpserver.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #ifndef __DHCPS_H__
  2. #define __DHCPS_H__
  3. #include "lwipopts.h"
  4. #define USE_DNS
  5. typedef struct dhcps_state{
  6. sint16_t state;
  7. } dhcps_state;
  8. // ����dhcpclient�Զ����һ��DHCP msg�ṹ��
  9. typedef struct dhcps_msg {
  10. uint8_t op, htype, hlen, hops;
  11. uint8_t xid[4];
  12. uint16_t secs, flags;
  13. uint8_t ciaddr[4];
  14. uint8_t yiaddr[4];
  15. uint8_t siaddr[4];
  16. uint8_t giaddr[4];
  17. uint8_t chaddr[16];
  18. uint8_t sname[64];
  19. uint8_t file[128];
  20. // Recommendation from Espressif:
  21. // To avoid crash in DHCP big packages modify option length from 312 to MTU - IPHEAD(20) - UDPHEAD(8) - DHCPHEAD(236).
  22. uint8_t options[IP_FRAG_MAX_MTU - 20 - 8 - 236];
  23. }dhcps_msg;
  24. #ifndef LWIP_OPEN_SRC
  25. struct dhcps_lease {
  26. bool enable;
  27. struct ip_addr start_ip;
  28. struct ip_addr end_ip;
  29. };
  30. enum dhcps_offer_option{
  31. OFFER_START = 0x00,
  32. OFFER_ROUTER = 0x01,
  33. OFFER_END
  34. };
  35. #endif
  36. typedef enum {
  37. DHCPS_TYPE_DYNAMIC,
  38. DHCPS_TYPE_STATIC
  39. } dhcps_type_t;
  40. typedef enum {
  41. DHCPS_STATE_ONLINE,
  42. DHCPS_STATE_OFFLINE
  43. } dhcps_state_t;
  44. struct dhcps_pool{
  45. struct ip_addr ip;
  46. uint8 mac[6];
  47. uint32 lease_timer;
  48. dhcps_type_t type;
  49. dhcps_state_t state;
  50. };
  51. typedef struct _list_node{
  52. void *pnode;
  53. struct _list_node *pnext;
  54. }list_node;
  55. extern uint32 dhcps_lease_time;
  56. #define DHCPS_LEASE_TIMER dhcps_lease_time //0x05A0
  57. #define DHCPS_MAX_LEASE 0x64
  58. #define BOOTP_BROADCAST 0x8000
  59. #define DHCP_REQUEST 1
  60. #define DHCP_REPLY 2
  61. #define DHCP_HTYPE_ETHERNET 1
  62. #define DHCP_HLEN_ETHERNET 6
  63. #define DHCP_MSG_LEN 236
  64. #define DHCPS_SERVER_PORT 67
  65. #define DHCPS_CLIENT_PORT 68
  66. #define DHCPDISCOVER 1
  67. #define DHCPOFFER 2
  68. #define DHCPREQUEST 3
  69. #define DHCPDECLINE 4
  70. #define DHCPACK 5
  71. #define DHCPNAK 6
  72. #define DHCPRELEASE 7
  73. #define DHCP_OPTION_SUBNET_MASK 1
  74. #define DHCP_OPTION_ROUTER 3
  75. #define DHCP_OPTION_DNS_SERVER 6
  76. #define DHCP_OPTION_REQ_IPADDR 50
  77. #define DHCP_OPTION_LEASE_TIME 51
  78. #define DHCP_OPTION_MSG_TYPE 53
  79. #define DHCP_OPTION_SERVER_ID 54
  80. #define DHCP_OPTION_INTERFACE_MTU 26
  81. #define DHCP_OPTION_PERFORM_ROUTER_DISCOVERY 31
  82. #define DHCP_OPTION_BROADCAST_ADDRESS 28
  83. #define DHCP_OPTION_REQ_LIST 55
  84. #define DHCP_OPTION_END 255
  85. //#define USE_CLASS_B_NET 1
  86. #define DHCPS_DEBUG 0
  87. #define MAX_STATION_NUM 8
  88. #define DHCPS_STATE_OFFER 1
  89. #define DHCPS_STATE_DECLINE 2
  90. #define DHCPS_STATE_ACK 3
  91. #define DHCPS_STATE_NAK 4
  92. #define DHCPS_STATE_IDLE 5
  93. #define DHCPS_STATE_RELEASE 6
  94. #define dhcps_router_enabled(offer) ((offer & OFFER_ROUTER) != 0)
  95. void dhcps_start(struct ip_info *info);
  96. void dhcps_stop(void);
  97. #endif