mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 06:01:39 +01:00 
			
		
		
		
	
		
			
	
	
		
			201 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			201 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
 | ||
|  | //
 | ||
|  | // Licensed under the Apache License, Version 2.0 (the "License");
 | ||
|  | // you may not use this file except in compliance with the License.
 | ||
|  | // You may obtain a copy of the License at
 | ||
|  | 
 | ||
|  | //     http://www.apache.org/licenses/LICENSE-2.0
 | ||
|  | //
 | ||
|  | // Unless required by applicable law or agreed to in writing, software
 | ||
|  | // distributed under the License is distributed on an "AS IS" BASIS,
 | ||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||
|  | // See the License for the specific language governing permissions and
 | ||
|  | // limitations under the License.
 | ||
|  | #ifndef __DHCPS_H__
 | ||
|  | #define __DHCPS_H__
 | ||
|  | 
 | ||
|  | #include "lwip/ip_addr.h"
 | ||
|  | //#include "esp_common.h"
 | ||
|  | #define USE_DNS
 | ||
|  | 
 | ||
|  | typedef struct dhcps_state{ | ||
|  |         s16_t state; | ||
|  | } dhcps_state; | ||
|  | 
 | ||
|  | typedef struct dhcps_msg { | ||
|  |         u8_t op, htype, hlen, hops; | ||
|  |         u8_t xid[4]; | ||
|  |         u16_t secs, flags; | ||
|  |         u8_t ciaddr[4]; | ||
|  |         u8_t yiaddr[4]; | ||
|  |         u8_t siaddr[4]; | ||
|  |         u8_t giaddr[4]; | ||
|  |         u8_t chaddr[16]; | ||
|  |         u8_t sname[64]; | ||
|  |         u8_t file[128]; | ||
|  |         u8_t options[312]; | ||
|  | }dhcps_msg; | ||
|  | 
 | ||
|  | /** DHCP OPTIONS CODE **/ | ||
|  | typedef enum | ||
|  | { | ||
|  |     /* RFC 1497 Vendor Extensions */ | ||
|  | 
 | ||
|  |     PAD = 0, | ||
|  |     END = 255, | ||
|  | 
 | ||
|  |     SUBNET_MASK = 1, | ||
|  |     TIME_OFFSET = 2, | ||
|  |     ROUTER = 3, | ||
|  |     TIME_SERVER = 4, | ||
|  |     NAME_SERVER = 5, | ||
|  |     DOMAIN_NAME_SERVER = 6, | ||
|  |     LOG_SERVER = 7, | ||
|  |     COOKIE_SERVER = 8, | ||
|  |     LPR_SERVER = 9, | ||
|  |     IMPRESS_SERVER = 10, | ||
|  |     RESOURCE_LOCATION_SERVER = 11, | ||
|  |     HOST_NAME = 12, | ||
|  |     BOOT_FILE_SIZE = 13, | ||
|  |     MERIT_DUMP_FILE = 14, | ||
|  |     DOMAIN_NAME = 15, | ||
|  |     SWAP_SERVER = 16, | ||
|  |     ROOT_PATH = 17, | ||
|  |     EXTENSIONS_PATH = 18, | ||
|  | 
 | ||
|  |     /* IP Layer Parameters per Host */ | ||
|  | 
 | ||
|  |     IP_FORWARDING = 19, | ||
|  |     NON_LOCAL_SOURCE_ROUTING = 20, | ||
|  |     POLICY_FILTER = 21, | ||
|  |     MAXIMUM_DATAGRAM_REASSEMBLY_SIZE = 22, | ||
|  |     DEFAULT_IP_TIME_TO_LIVE = 23, | ||
|  |     PATH_MTU_AGING_TIMEOUT = 24, | ||
|  |     PATH_MTU_PLATEAU_TABLE = 25, | ||
|  | 
 | ||
|  |     /* IP Layer Parameters per Interface */ | ||
|  | 
 | ||
|  |     INTERFACE_MTU = 26, | ||
|  |     ALL_SUBNETS_ARE_LOCAL = 27, | ||
|  |     BROADCAST_ADDRESS = 28, | ||
|  |     PERFORM_MASK_DISCOVERY = 29, | ||
|  |     MASK_SUPPLIER = 30, | ||
|  |     PERFORM_ROUTER_DISCOVERY = 31, | ||
|  |     ROUTER_SOLICITATION_ADDRESS = 32, | ||
|  |     STATIC_ROUTE = 33, | ||
|  | 
 | ||
|  |     /* Link Layer Parameters per Interface */ | ||
|  | 
 | ||
|  |     TRAILER_ENCAPSULATION = 34, | ||
|  |     ARP_CACHE_TIMEOUT = 35, | ||
|  |     ETHERNET_ENCAPSULATION = 36, | ||
|  | 
 | ||
|  |     /* TCP Parameters */ | ||
|  | 
 | ||
|  |     TCP_DEFAULT_TTL = 37, | ||
|  |     TCP_KEEPALIVE_INTERVAL = 38, | ||
|  |     TCP_KEEPALIVE_GARBAGE = 39, | ||
|  | 
 | ||
|  |     /* Application and Service Parameters */ | ||
|  | 
 | ||
|  |     NETWORK_INFORMATION_SERVICE_DOMAIN = 40, | ||
|  |     NETWORK_INFORMATION_SERVERS = 41, | ||
|  |     NETWORK_TIME_PROTOCOL_SERVERS = 42, | ||
|  |     VENDOR_SPECIFIC_INFORMATION = 43, | ||
|  |     NETBIOS_OVER_TCP_IP_NAME_SERVER = 44, | ||
|  |     NETBIOS_OVER_TCP_IP_DATAGRAM_DISTRIBUTION_SERVER = 45, | ||
|  |     NETBIOS_OVER_TCP_IP_NODE_TYPE = 46, | ||
|  |     NETBIOS_OVER_TCP_IP_SCOPE = 47, | ||
|  |     X_WINDOW_SYSTEM_FONT_SERVER = 48, | ||
|  |     X_WINDOW_SYSTEM_DISPLAY_MANAGER = 49, | ||
|  |     NETWORK_INFORMATION_SERVICE_PLUS_DOMAIN = 64, | ||
|  |     NETWORK_INFORMATION_SERVICE_PLUS_SERVERS = 65, | ||
|  |     MOBILE_IP_HOME_AGENT = 68, | ||
|  |     SMTP_SERVER = 69, | ||
|  |     POP3_SERVER = 70, | ||
|  |     NNTP_SERVER = 71, | ||
|  |     DEFAULT_WWW_SERVER = 72, | ||
|  |     DEFAULT_FINGER_SERVER = 73, | ||
|  |     DEFAULT_IRC_SERVER = 74, | ||
|  |     STREETTALK_SERVER = 75, | ||
|  |     STREETTALK_DIRECTORY_ASSISTANCE_SERVER = 76, | ||
|  | 
 | ||
|  |     /* DHCP Extensions */ | ||
|  | 
 | ||
|  |     REQUESTED_IP_ADDRESS = 50, | ||
|  |     IP_ADDRESS_LEASE_TIME = 51, | ||
|  |     OPTION_OVERLOAD = 52, | ||
|  |     TFTP_SERVER_NAME = 66, | ||
|  |     BOOTFILE_NAME = 67, | ||
|  |     DHCP_MESSAGE_TYPE = 53, | ||
|  |     SERVER_IDENTIFIER = 54, | ||
|  |     PARAMETER_REQUEST_LIST = 55, | ||
|  |     MESSAGE = 56, | ||
|  |     MAXIMUM_DHCP_MESSAGE_SIZE = 57, | ||
|  |     RENEWAL_T1_TIME_VALUE = 58, | ||
|  |     REBINDING_T2_TIME_VALUE = 59, | ||
|  |     VENDOR_CLASS_IDENTIFIER = 60, | ||
|  |     CLIENT_IDENTIFIER = 61, | ||
|  | 
 | ||
|  |     USER_CLASS = 77, | ||
|  |     FQDN = 81, | ||
|  |     DHCP_AGENT_OPTIONS = 82, | ||
|  |     NDS_SERVERS = 85, | ||
|  |     NDS_TREE_NAME = 86, | ||
|  |     NDS_CONTEXT = 87, | ||
|  |     CLIENT_LAST_TRANSACTION_TIME = 91, | ||
|  |     ASSOCIATED_IP = 92, | ||
|  |     USER_AUTHENTICATION_PROTOCOL = 98, | ||
|  |     AUTO_CONFIGURE = 116, | ||
|  |     NAME_SERVICE_SEARCH = 117, | ||
|  |     SUBNET_SELECTION = 118, | ||
|  |     DOMAIN_SEARCH = 119, | ||
|  |     CLASSLESS_ROUTE = 121, | ||
|  | } dhcp_msg_option; | ||
|  | 
 | ||
|  | /*   Defined in esp_misc.h */ | ||
|  | typedef struct { | ||
|  | 	bool enable; | ||
|  | 	ip4_addr_t start_ip; | ||
|  | 	ip4_addr_t end_ip; | ||
|  | } dhcps_lease_t; | ||
|  | 
 | ||
|  | enum dhcps_offer_option{ | ||
|  | 	OFFER_START = 0x00, | ||
|  | 	OFFER_ROUTER = 0x01, | ||
|  | 	OFFER_END | ||
|  | }; | ||
|  | 
 | ||
|  | #define DHCPS_MAX_LEASE 0x64
 | ||
|  | #define DHCPS_LEASE_TIME_DEF	(120)
 | ||
|  | 
 | ||
|  | struct dhcps_pool{ | ||
|  | 	ip4_addr_t ip; | ||
|  | 	u8_t mac[6]; | ||
|  | 	u32_t lease_timer; | ||
|  | }; | ||
|  | 
 | ||
|  | typedef struct _list_node{ | ||
|  | 	void *pnode; | ||
|  | 	struct _list_node *pnext; | ||
|  | }list_node; | ||
|  | 
 | ||
|  | typedef u32_t dhcps_time_t; | ||
|  | typedef u8_t dhcps_offer_t; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  | 	dhcps_offer_t dhcps_offer; | ||
|  | 	dhcps_time_t  dhcps_time; | ||
|  | 	dhcps_lease_t dhcps_poll; | ||
|  | } dhcps_options_t; | ||
|  | 
 | ||
|  | #define dhcps_router_enabled(offer) ((offer & OFFER_ROUTER) != 0)
 | ||
|  | 
 | ||
|  | void dhcps_start(struct netif *netif, ip4_addr_t ip); | ||
|  | void dhcps_stop(struct netif *netif); | ||
|  | void *dhcps_option_info(u8_t op_id, u32_t opt_len); | ||
|  | bool dhcp_search_ip_on_mac(u8_t *mac, ip4_addr_t *ip); | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 |