// 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