mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-04 08:01:38 +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
 | 
						|
 |