2019-06-28 14:47:34 +00:00
|
|
|
// Copyright 2015-2019 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 _ESP_NETIF_TYPES_H_
|
|
|
|
#define _ESP_NETIF_TYPES_H_
|
|
|
|
|
2019-11-22 08:40:54 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2019-06-28 14:47:34 +00:00
|
|
|
/**
|
|
|
|
* @brief Definition of ESP-NETIF based errors
|
|
|
|
*/
|
|
|
|
#define ESP_ERR_ESP_NETIF_BASE 0x5000
|
|
|
|
#define ESP_ERR_ESP_NETIF_INVALID_PARAMS ESP_ERR_ESP_NETIF_BASE + 0x01
|
|
|
|
#define ESP_ERR_ESP_NETIF_IF_NOT_READY ESP_ERR_ESP_NETIF_BASE + 0x02
|
|
|
|
#define ESP_ERR_ESP_NETIF_DHCPC_START_FAILED ESP_ERR_ESP_NETIF_BASE + 0x03
|
|
|
|
#define ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED ESP_ERR_ESP_NETIF_BASE + 0x04
|
|
|
|
#define ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED ESP_ERR_ESP_NETIF_BASE + 0x05
|
|
|
|
#define ESP_ERR_ESP_NETIF_NO_MEM ESP_ERR_ESP_NETIF_BASE + 0x06
|
|
|
|
#define ESP_ERR_ESP_NETIF_DHCP_NOT_STOPPED ESP_ERR_ESP_NETIF_BASE + 0x07
|
2019-09-12 07:24:56 +00:00
|
|
|
#define ESP_ERR_ESP_NETIF_DRIVER_ATTACH_FAILED ESP_ERR_ESP_NETIF_BASE + 0x08
|
2019-11-21 12:23:58 +00:00
|
|
|
#define ESP_ERR_ESP_NETIF_INIT_FAILED ESP_ERR_ESP_NETIF_BASE + 0x09
|
|
|
|
#define ESP_ERR_ESP_NETIF_DNS_NOT_CONFIGURED ESP_ERR_ESP_NETIF_BASE + 0x0A
|
2019-06-28 14:47:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
/** @brief Type of esp_netif_object server */
|
|
|
|
struct esp_netif_obj;
|
|
|
|
|
|
|
|
typedef struct esp_netif_obj esp_netif_t;
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief Type of DNS server */
|
|
|
|
typedef enum {
|
|
|
|
ESP_NETIF_DNS_MAIN= 0, /**< DNS main server address*/
|
|
|
|
ESP_NETIF_DNS_BACKUP, /**< DNS backup server address (Wi-Fi STA and Ethernet only) */
|
|
|
|
ESP_NETIF_DNS_FALLBACK, /**< DNS fallback server address (Wi-Fi STA and Ethernet only) */
|
|
|
|
ESP_NETIF_DNS_MAX
|
|
|
|
} esp_netif_dns_type_t;
|
|
|
|
|
|
|
|
/** @brief DNS server info */
|
|
|
|
typedef struct {
|
|
|
|
esp_ip_addr_t ip; /**< IPV4 address of DNS server */
|
|
|
|
} esp_netif_dns_info_t;
|
|
|
|
|
|
|
|
/** @brief Status of DHCP client or DHCP server */
|
|
|
|
typedef enum {
|
|
|
|
ESP_NETIF_DHCP_INIT = 0, /**< DHCP client/server is in initial state (not yet started) */
|
|
|
|
ESP_NETIF_DHCP_STARTED, /**< DHCP client/server has been started */
|
|
|
|
ESP_NETIF_DHCP_STOPPED, /**< DHCP client/server has been stopped */
|
|
|
|
ESP_NETIF_DHCP_STATUS_MAX
|
|
|
|
} esp_netif_dhcp_status_t;
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief Mode for DHCP client or DHCP server option functions */
|
|
|
|
typedef enum{
|
|
|
|
ESP_NETIF_OP_START = 0,
|
|
|
|
ESP_NETIF_OP_SET, /**< Set option */
|
|
|
|
ESP_NETIF_OP_GET, /**< Get option */
|
|
|
|
ESP_NETIF_OP_MAX
|
|
|
|
} esp_netif_dhcp_option_mode_t;
|
|
|
|
|
|
|
|
/** @brief Supported options for DHCP client or DHCP server */
|
|
|
|
typedef enum{
|
|
|
|
ESP_NETIF_DOMAIN_NAME_SERVER = 6, /**< Domain name server */
|
|
|
|
ESP_NETIF_ROUTER_SOLICITATION_ADDRESS = 32, /**< Solicitation router address */
|
|
|
|
ESP_NETIF_REQUESTED_IP_ADDRESS = 50, /**< Request specific IP address */
|
|
|
|
ESP_NETIF_IP_ADDRESS_LEASE_TIME = 51, /**< Request IP address lease time */
|
|
|
|
ESP_NETIF_IP_REQUEST_RETRY_TIME = 52, /**< Request IP address retry counter */
|
|
|
|
} esp_netif_dhcp_option_id_t;
|
|
|
|
|
|
|
|
/** IP event declarations */
|
|
|
|
typedef enum {
|
2019-11-21 12:23:58 +00:00
|
|
|
IP_EVENT_STA_GOT_IP, /*!< station got IP from connected AP */
|
|
|
|
IP_EVENT_STA_LOST_IP, /*!< station lost IP and the IP is reset to 0 */
|
|
|
|
IP_EVENT_AP_STAIPASSIGNED, /*!< soft-AP assign an IP to a connected station */
|
|
|
|
IP_EVENT_GOT_IP6, /*!< station or ap or ethernet interface v6IP addr is preferred */
|
|
|
|
IP_EVENT_ETH_GOT_IP, /*!< ethernet got IP from connected AP */
|
|
|
|
IP_EVENT_PPP_GOT_IP, /*!< PPP interface got IP */
|
|
|
|
IP_EVENT_PPP_LOST_IP, /*!< PPP interface lost IP */
|
2019-06-28 14:47:34 +00:00
|
|
|
} ip_event_t;
|
|
|
|
|
|
|
|
/** @brief IP event base declaration */
|
|
|
|
ESP_EVENT_DECLARE_BASE(IP_EVENT);
|
|
|
|
|
|
|
|
/** Event structure for IP_EVENT_STA_GOT_IP, IP_EVENT_ETH_GOT_IP events */
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
esp_ip4_addr_t ip; /**< Interface IPV4 address */
|
|
|
|
esp_ip4_addr_t netmask; /**< Interface IPV4 netmask */
|
|
|
|
esp_ip4_addr_t gw; /**< Interface IPV4 gateway address */
|
|
|
|
} esp_netif_ip_info_t;
|
|
|
|
|
|
|
|
/** @brief IPV6 IP address information
|
|
|
|
*/
|
|
|
|
typedef struct {
|
|
|
|
esp_ip6_addr_t ip; /**< Interface IPV6 address */
|
|
|
|
} esp_netif_ip6_info_t;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int if_index; /*!< Interface index for which the event is received (left for legacy compilation) */
|
|
|
|
esp_netif_t *esp_netif; /*!< Pointer to corresponding esp-netif object */
|
|
|
|
esp_netif_ip_info_t ip_info; /*!< IP address, netmask, gatway IP address */
|
|
|
|
bool ip_changed; /*!< Whether the assigned IP has changed or not */
|
|
|
|
} ip_event_got_ip_t;
|
|
|
|
|
|
|
|
/** Event structure for IP_EVENT_GOT_IP6 event */
|
|
|
|
typedef struct {
|
|
|
|
int if_index; /*!< Interface index for which the event is received (left for legacy compilation) */
|
|
|
|
esp_netif_t *esp_netif; /*!< Pointer to corresponding esp-netif object */
|
|
|
|
esp_netif_ip6_info_t ip6_info; /*!< IPv6 address of the interface */
|
|
|
|
} ip_event_got_ip6_t;
|
|
|
|
|
|
|
|
/** Event structure for IP_EVENT_AP_STAIPASSIGNED event */
|
|
|
|
typedef struct {
|
|
|
|
esp_ip4_addr_t ip; /*!< IP address which was assigned to the station */
|
|
|
|
} ip_event_ap_staipassigned_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum esp_netif_flags {
|
2019-10-30 19:29:13 +00:00
|
|
|
ESP_NETIF_DHCP_CLIENT = 1 << 0,
|
|
|
|
ESP_NETIF_DHCP_SERVER = 1 << 1,
|
2019-06-28 14:47:34 +00:00
|
|
|
ESP_NETIF_FLAG_AUTOUP = 1 << 2,
|
|
|
|
ESP_NETIF_FLAG_GARP = 1 << 3,
|
2019-11-21 12:23:58 +00:00
|
|
|
ESP_NETIF_FLAG_EVENT_IP_MODIFIED = 1 << 4,
|
|
|
|
ESP_NETIF_FLAG_IS_PPP = 1 << 5
|
2019-06-28 14:47:34 +00:00
|
|
|
} esp_netif_flags_t;
|
|
|
|
|
|
|
|
typedef enum esp_netif_ip_event_type {
|
|
|
|
ESP_NETIF_IP_EVENT_GOT_IP = 1,
|
|
|
|
ESP_NETIF_IP_EVENT_LOST_IP = 2,
|
|
|
|
} esp_netif_ip_event_type_t;
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// ESP-NETIF interface configuration:
|
|
|
|
// 1) general (behavioral) config (esp_netif_config_t)
|
|
|
|
// 2) (peripheral) driver specific config (esp_netif_driver_ifconfig_t)
|
|
|
|
// 3) network stack specific config (esp_netif_net_stack_ifconfig_t) -- no publicly available
|
|
|
|
//
|
|
|
|
|
|
|
|
typedef struct esp_netif_inherent_config {
|
|
|
|
esp_netif_flags_t flags; /*!< flags that define esp-netif behavior */
|
|
|
|
uint8_t mac[6]; /*!< initial mac address for this interface */
|
2020-01-30 11:50:52 +00:00
|
|
|
const esp_netif_ip_info_t* ip_info; /*!< initial ip address for this interface */
|
2019-06-28 14:47:34 +00:00
|
|
|
uint32_t get_ip_event; /*!< event id to be raised when interface gets an IP */
|
|
|
|
uint32_t lost_ip_event; /*!< event id to be raised when interface losts its IP */
|
|
|
|
const char * if_key; /*!< string identifier of the interface */
|
2019-09-13 13:44:23 +00:00
|
|
|
const char * if_desc; /*!< textual description of the interface */
|
2019-06-28 14:47:34 +00:00
|
|
|
int route_prio; /*!< numeric priority of this interface to become a default
|
|
|
|
routing if (if other netifs are up) */
|
|
|
|
} esp_netif_inherent_config_t;
|
|
|
|
|
|
|
|
typedef struct esp_netif_config esp_netif_config_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief IO driver handle type
|
|
|
|
*/
|
|
|
|
typedef void * esp_netif_iodriver_handle;
|
|
|
|
|
|
|
|
typedef struct esp_netif_driver_base_s {
|
|
|
|
esp_err_t (*post_attach)(esp_netif_t *netif, esp_netif_iodriver_handle h);
|
|
|
|
esp_netif_t *netif;
|
|
|
|
} esp_netif_driver_base_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Specific IO driver configuration
|
|
|
|
*/
|
|
|
|
struct esp_netif_driver_ifconfig {
|
|
|
|
esp_netif_iodriver_handle handle;
|
|
|
|
esp_err_t (*transmit)(void *h, void *buffer, size_t len);
|
|
|
|
void (*driver_free_rx_buffer)(void *h, void* buffer);
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct esp_netif_driver_ifconfig esp_netif_driver_ifconfig_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Specific L3 network stack configuration
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef struct esp_netif_netstack_config esp_netif_netstack_config_t;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Generic esp_netif configuration
|
|
|
|
*/
|
|
|
|
struct esp_netif_config {
|
|
|
|
const esp_netif_inherent_config_t *base;
|
|
|
|
const esp_netif_driver_ifconfig_t *driver;
|
|
|
|
const esp_netif_netstack_config_t *stack;
|
|
|
|
};
|
|
|
|
|
2019-09-15 17:49:45 +00:00
|
|
|
/**
|
|
|
|
* @brief ESP-NETIF Receive function type
|
|
|
|
*/
|
|
|
|
typedef esp_err_t (*esp_netif_receive_t)(esp_netif_t *esp_netif, void *buffer, size_t len, void *eb);
|
|
|
|
|
2019-11-22 08:40:54 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2019-06-28 14:47:34 +00:00
|
|
|
#endif // _ESP_NETIF_TYPES_H_
|