mirror of
https://github.com/0xFEEDC0DE64/arduino-esp32.git
synced 2025-07-01 04:50:58 +02:00
v2.0.0 Add support for ESP32S2 and update ESP-IDF to 4.4 (#4996)
This is very much still work in progress and much more will change before the final 2.0.0 Some APIs have changed. New libraries have been added. LittleFS included. Co-authored-by: Seon Rozenblum <seonr@3sprockets.com> Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com> Co-authored-by: geeksville <kevinh@geeksville.com> Co-authored-by: Mike Dunston <m_dunston@comcast.net> Co-authored-by: Unexpected Maker <seon@unexpectedmaker.com> Co-authored-by: Seon Rozenblum <seonr@3sprockets.com> Co-authored-by: microDev <70126934+microDev1@users.noreply.github.com> Co-authored-by: tobozo <tobozo@users.noreply.github.com> Co-authored-by: bobobo1618 <bobobo1618@users.noreply.github.com> Co-authored-by: lorol <lorolouis@gmail.com> Co-authored-by: geeksville <kevinh@geeksville.com> Co-authored-by: Limor "Ladyada" Fried <limor@ladyada.net> Co-authored-by: Sweety <switi.mhaiske@espressif.com> Co-authored-by: Loick MAHIEUX <loick111@gmail.com> Co-authored-by: Larry Bernstone <lbernstone@gmail.com> Co-authored-by: Valerii Koval <valeros@users.noreply.github.com> Co-authored-by: 快乐的我531 <2302004040@qq.com> Co-authored-by: chegewara <imperiaonline4@gmail.com> Co-authored-by: Clemens Kirchgatterer <clemens@1541.org> Co-authored-by: Aron Rubin <aronrubin@gmail.com> Co-authored-by: Pete Lewis <601236+lewispg228@users.noreply.github.com>
This commit is contained in:
868
tools/sdk/esp32/include/esp_netif/include/esp_netif.h
Normal file
868
tools/sdk/esp32/include/esp_netif/include/esp_netif.h
Normal file
@ -0,0 +1,868 @@
|
||||
// Copyright 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_H_
|
||||
#define _ESP_NETIF_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include "sdkconfig.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include "esp_netif_ip_addr.h"
|
||||
#include "esp_netif_types.h"
|
||||
#include "esp_netif_defaults.h"
|
||||
|
||||
#if CONFIG_ETH_ENABLED
|
||||
#include "esp_eth_netif_glue.h"
|
||||
#endif
|
||||
|
||||
//
|
||||
// Note: tcpip_adapter legacy API has to be included by default to provide full compatibility
|
||||
// for applications that used tcpip_adapter API without explicit inclusion of tcpip_adapter.h
|
||||
//
|
||||
#if CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER
|
||||
#define _ESP_NETIF_SUPPRESS_LEGACY_WARNING_
|
||||
#include "tcpip_adapter.h"
|
||||
#undef _ESP_NETIF_SUPPRESS_LEGACY_WARNING_
|
||||
#endif // CONFIG_ESP_NETIF_TCPIP_ADAPTER_COMPATIBLE_LAYER
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_INIT_API ESP-NETIF Initialization API
|
||||
* @brief Initialization and deinitialization of underlying TCP/IP stack and esp-netif instances
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_INIT_API
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initialize the underlying TCP/IP stack
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_FAIL if initializing failed
|
||||
|
||||
* @note This function should be called exactly once from application code, when the application starts up.
|
||||
*/
|
||||
esp_err_t esp_netif_init(void);
|
||||
|
||||
/**
|
||||
* @brief Deinitialize the esp-netif component (and the underlying TCP/IP stack)
|
||||
*
|
||||
* Note: Deinitialization is not supported yet
|
||||
*
|
||||
* @return
|
||||
* - ESP_ERR_INVALID_STATE if esp_netif not initialized
|
||||
* - ESP_ERR_NOT_SUPPORTED otherwise
|
||||
*/
|
||||
esp_err_t esp_netif_deinit(void);
|
||||
|
||||
/**
|
||||
* @brief Creates an instance of new esp-netif object based on provided config
|
||||
*
|
||||
* @param[in] esp_netif_config pointer esp-netif configuration
|
||||
*
|
||||
* @return
|
||||
* - pointer to esp-netif object on success
|
||||
* - NULL otherwise
|
||||
*/
|
||||
esp_netif_t *esp_netif_new(const esp_netif_config_t *esp_netif_config);
|
||||
|
||||
/**
|
||||
* @brief Destroys the esp_netif object
|
||||
*
|
||||
* @param[in] esp_netif pointer to the object to be deleted
|
||||
*/
|
||||
void esp_netif_destroy(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Configures driver related options of esp_netif object
|
||||
*
|
||||
* @param[inout] esp_netif pointer to the object to be configured
|
||||
* @param[in] driver_config pointer esp-netif io driver related configuration
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS if invalid parameters provided
|
||||
*
|
||||
*/
|
||||
esp_err_t esp_netif_set_driver_config(esp_netif_t *esp_netif,
|
||||
const esp_netif_driver_ifconfig_t *driver_config);
|
||||
|
||||
/**
|
||||
* @brief Attaches esp_netif instance to the io driver handle
|
||||
*
|
||||
* Calling this function enables connecting specific esp_netif object
|
||||
* with already initialized io driver to update esp_netif object with driver
|
||||
* specific configuration (i.e. calls post_attach callback, which typically
|
||||
* sets io driver callbacks to esp_netif instance and starts the driver)
|
||||
*
|
||||
* @param[inout] esp_netif pointer to esp_netif object to be attached
|
||||
* @param[in] driver_handle pointer to the driver handle
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_ERR_ESP_NETIF_DRIVER_ATTACH_FAILED if driver's pot_attach callback failed
|
||||
*/
|
||||
esp_err_t esp_netif_attach(esp_netif_t *esp_netif, esp_netif_iodriver_handle driver_handle);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_DATA_IO_API ESP-NETIF Input Output API
|
||||
* @brief Input and Output functions to pass data packets from communication media (IO driver)
|
||||
* to TCP/IP stack.
|
||||
*
|
||||
* These functions are usually not directly called from user code, but installed, or registered
|
||||
* as callbacks in either IO driver on one hand or TCP/IP stack on the other. More specifically
|
||||
* esp_netif_receive is typically called from io driver on reception callback to input the packets
|
||||
* to TCP/IP stack. Similarly esp_netif_transmit is called from the TCP/IP stack whenever
|
||||
* a packet ought to output to the communication media.
|
||||
*
|
||||
* @note These IO functions are registerd (installed) automatically for default interfaces
|
||||
* (interfaces with the keys such as WIFI_STA_DEF, WIFI_AP_DEF, ETH_DEF). Custom interface
|
||||
* has to register these IO functions when creating interface using @ref esp_netif_new
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_DATA_IO_API
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Passes the raw packets from communication media to the appropriate TCP/IP stack
|
||||
*
|
||||
* This function is called from the configured (peripheral) driver layer.
|
||||
* The data are then forwarded as frames to the TCP/IP stack.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] buffer Received data
|
||||
* @param[in] len Length of the data frame
|
||||
* @param[in] eb Pointer to internal buffer (used in Wi-Fi driver)
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
*/
|
||||
esp_err_t esp_netif_receive(esp_netif_t *esp_netif, void *buffer, size_t len, void *eb);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_LIFECYCLE ESP-NETIF Lifecycle control
|
||||
* @brief These APIS define basic building blocks to control network interface lifecycle, i.e.
|
||||
* start, stop, set_up or set_down. These functions can be directly used as event handlers
|
||||
* registered to follow the events from communication media.
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_LIFECYCLE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Default building block for network interface action upon IO driver start event
|
||||
* Creates network interface, if AUTOUP enabled turns the interface on,
|
||||
* if DHCPS enabled starts dhcp server
|
||||
*
|
||||
* @note This API can be directly used as event handler
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param base
|
||||
* @param event_id
|
||||
* @param data
|
||||
*/
|
||||
void esp_netif_action_start(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data);
|
||||
|
||||
/**
|
||||
* @brief Default building block for network interface action upon IO driver stop event
|
||||
*
|
||||
* @note This API can be directly used as event handler
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param base
|
||||
* @param event_id
|
||||
* @param data
|
||||
*/
|
||||
void esp_netif_action_stop(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data);
|
||||
|
||||
/**
|
||||
* @brief Default building block for network interface action upon IO driver connected event
|
||||
*
|
||||
* @note This API can be directly used as event handler
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param base
|
||||
* @param event_id
|
||||
* @param data
|
||||
*/
|
||||
void esp_netif_action_connected(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data);
|
||||
|
||||
/**
|
||||
* @brief Default building block for network interface action upon IO driver disconnected event
|
||||
*
|
||||
* @note This API can be directly used as event handler
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param base
|
||||
* @param event_id
|
||||
* @param data
|
||||
*/
|
||||
void esp_netif_action_disconnected(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data);
|
||||
|
||||
/**
|
||||
* @brief Default building block for network interface action upon network got IP event
|
||||
*
|
||||
* @note This API can be directly used as event handler
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param base
|
||||
* @param event_id
|
||||
* @param data
|
||||
*/
|
||||
void esp_netif_action_got_ip(void *esp_netif, esp_event_base_t base, int32_t event_id, void *data);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_GET_SET ESP-NETIF Runtime configuration
|
||||
* @brief Getters and setters for various TCP/IP related parameters
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_GET_SET
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Set the mac address for the interface instance
|
||||
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] mac Desired mac address for the related network interface
|
||||
* @return
|
||||
* - ESP_OK - success
|
||||
* - ESP_ERR_ESP_NETIF_IF_NOT_READY - interface status error
|
||||
* - ESP_ERR_NOT_SUPPORTED - mac not supported on this interface
|
||||
*/
|
||||
esp_err_t esp_netif_set_mac(esp_netif_t *esp_netif, uint8_t mac[]);
|
||||
|
||||
/**
|
||||
* @brief Get the mac address for the interface instance
|
||||
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] mac Resultant mac address for the related network interface
|
||||
* @return
|
||||
* - ESP_OK - success
|
||||
* - ESP_ERR_ESP_NETIF_IF_NOT_READY - interface status error
|
||||
* - ESP_ERR_NOT_SUPPORTED - mac not supported on this interface
|
||||
*/
|
||||
esp_err_t esp_netif_get_mac(esp_netif_t *esp_netif, uint8_t mac[]);
|
||||
|
||||
/**
|
||||
* @brief Set the hostname of an interface
|
||||
*
|
||||
* The configured hostname overrides the default configuration value CONFIG_LWIP_LOCAL_HOSTNAME.
|
||||
* Please note that when the hostname is altered after interface started/connected the changes
|
||||
* would only be reflected once the interface restarts/reconnects
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] hostname New hostname for the interface. Maximum length 32 bytes.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK - success
|
||||
* - ESP_ERR_ESP_NETIF_IF_NOT_READY - interface status error
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS - parameter error
|
||||
*/
|
||||
esp_err_t esp_netif_set_hostname(esp_netif_t *esp_netif, const char *hostname);
|
||||
|
||||
/**
|
||||
* @brief Get interface hostname.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] hostname Returns a pointer to the hostname. May be NULL if no hostname is set. If set non-NULL, pointer remains valid (and string may change if the hostname changes).
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK - success
|
||||
* - ESP_ERR_ESP_NETIF_IF_NOT_READY - interface status error
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS - parameter error
|
||||
*/
|
||||
esp_err_t esp_netif_get_hostname(esp_netif_t *esp_netif, const char **hostname);
|
||||
|
||||
/**
|
||||
* @brief Test if supplied interface is up or down
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return
|
||||
* - true - Interface is up
|
||||
* - false - Interface is down
|
||||
*/
|
||||
bool esp_netif_is_netif_up(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Get interface's IP address information
|
||||
*
|
||||
* If the interface is up, IP information is read directly from the TCP/IP stack.
|
||||
* If the interface is down, IP information is read from a copy kept in the ESP-NETIF instance
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] ip_info If successful, IP information will be returned in this argument.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
*/
|
||||
esp_err_t esp_netif_get_ip_info(esp_netif_t *esp_netif, esp_netif_ip_info_t *ip_info);
|
||||
|
||||
/**
|
||||
* @brief Get interface's old IP information
|
||||
*
|
||||
* Returns an "old" IP address previously stored for the interface when the valid IP changed.
|
||||
*
|
||||
* If the IP lost timer has expired (meaning the interface was down for longer than the configured interval)
|
||||
* then the old IP information will be zero.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] ip_info If successful, IP information will be returned in this argument.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
*/
|
||||
esp_err_t esp_netif_get_old_ip_info(esp_netif_t *esp_netif, esp_netif_ip_info_t *ip_info);
|
||||
|
||||
/**
|
||||
* @brief Set interface's IP address information
|
||||
*
|
||||
* This function is mainly used to set a static IP on an interface.
|
||||
*
|
||||
* If the interface is up, the new IP information is set directly in the TCP/IP stack.
|
||||
*
|
||||
* The copy of IP information kept in the ESP-NETIF instance is also updated (this
|
||||
* copy is returned if the IP is queried while the interface is still down.)
|
||||
*
|
||||
* @note DHCP client/server must be stopped (if enabled for this interface) before setting new IP information.
|
||||
*
|
||||
* @note Calling this interface for may generate a SYSTEM_EVENT_STA_GOT_IP or SYSTEM_EVENT_ETH_GOT_IP event.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] ip_info IP information to set on the specified interface
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_NOT_STOPPED If DHCP server or client is still running
|
||||
*/
|
||||
esp_err_t esp_netif_set_ip_info(esp_netif_t *esp_netif, const esp_netif_ip_info_t *ip_info);
|
||||
|
||||
/**
|
||||
* @brief Set interface old IP information
|
||||
*
|
||||
* This function is called from the DHCP client (if enabled), before a new IP is set.
|
||||
* It is also called from the default handlers for the SYSTEM_EVENT_STA_CONNECTED and SYSTEM_EVENT_ETH_CONNECTED events.
|
||||
*
|
||||
* Calling this function stores the previously configured IP, which can be used to determine if the IP changes in the future.
|
||||
*
|
||||
* If the interface is disconnected or down for too long, the "IP lost timer" will expire (after the configured interval) and set the old IP information to zero.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] ip_info Store the old IP information for the specified interface
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
*/
|
||||
esp_err_t esp_netif_set_old_ip_info(esp_netif_t *esp_netif, const esp_netif_ip_info_t *ip_info);
|
||||
|
||||
/**
|
||||
* @brief Get net interface index from network stack implementation
|
||||
*
|
||||
* @note This index could be used in `setsockopt()` to bind socket with multicast interface
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return
|
||||
* implementation specific index of interface represented with supplied esp_netif
|
||||
*/
|
||||
int esp_netif_get_netif_impl_index(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Get net interface name from network stack implementation
|
||||
*
|
||||
* @note This name could be used in `setsockopt()` to bind socket with appropriate interface
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] name Interface name as specified in underlying TCP/IP stack. Note that the
|
||||
* actual name will be copied to the specified buffer, which must be allocated to hold
|
||||
* maximum interface name size (6 characters for lwIP)
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
*/
|
||||
esp_err_t esp_netif_get_netif_impl_name(esp_netif_t *esp_netif, char* name);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_NET_DHCP ESP-NETIF DHCP Settings
|
||||
* @brief Network stack related interface to DHCP client and server
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_NET_DHCP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Set or Get DHCP server option
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] opt_op ESP_NETIF_OP_SET to set an option, ESP_NETIF_OP_GET to get an option.
|
||||
* @param[in] opt_id Option index to get or set, must be one of the supported enum values.
|
||||
* @param[inout] opt_val Pointer to the option parameter.
|
||||
* @param[in] opt_len Length of the option parameter.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED
|
||||
*/
|
||||
esp_err_t
|
||||
esp_netif_dhcps_option(esp_netif_t *esp_netif, esp_netif_dhcp_option_mode_t opt_op, esp_netif_dhcp_option_id_t opt_id,
|
||||
void *opt_val, uint32_t opt_len);
|
||||
|
||||
/**
|
||||
* @brief Set or Get DHCP client option
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] opt_op ESP_NETIF_OP_SET to set an option, ESP_NETIF_OP_GET to get an option.
|
||||
* @param[in] opt_id Option index to get or set, must be one of the supported enum values.
|
||||
* @param[inout] opt_val Pointer to the option parameter.
|
||||
* @param[in] opt_len Length of the option parameter.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED
|
||||
*/
|
||||
esp_err_t
|
||||
esp_netif_dhcpc_option(esp_netif_t *esp_netif, esp_netif_dhcp_option_mode_t opt_op, esp_netif_dhcp_option_id_t opt_id,
|
||||
void *opt_val, uint32_t opt_len);
|
||||
|
||||
/**
|
||||
* @brief Start DHCP client (only if enabled in interface object)
|
||||
*
|
||||
* @note The default event handlers for the SYSTEM_EVENT_STA_CONNECTED and SYSTEM_EVENT_ETH_CONNECTED events call this function.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED
|
||||
* - ESP_ERR_ESP_NETIF_DHCPC_START_FAILED
|
||||
*/
|
||||
esp_err_t esp_netif_dhcpc_start(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Stop DHCP client (only if enabled in interface object)
|
||||
*
|
||||
* @note Calling action_netif_stop() will also stop the DHCP Client if it is running.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED
|
||||
* - ESP_ERR_ESP_NETIF_IF_NOT_READY
|
||||
*/
|
||||
esp_err_t esp_netif_dhcpc_stop(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Get DHCP client status
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] status If successful, the status of DHCP client will be returned in this argument.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
*/
|
||||
esp_err_t esp_netif_dhcpc_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status);
|
||||
|
||||
/**
|
||||
* @brief Get DHCP Server status
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] status If successful, the status of the DHCP server will be returned in this argument.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
*/
|
||||
esp_err_t esp_netif_dhcps_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status);
|
||||
|
||||
/**
|
||||
* @brief Start DHCP server (only if enabled in interface object)
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED
|
||||
*/
|
||||
esp_err_t esp_netif_dhcps_start(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Stop DHCP server (only if enabled in interface object)
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
* - ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED
|
||||
* - ESP_ERR_ESP_NETIF_IF_NOT_READY
|
||||
*/
|
||||
esp_err_t esp_netif_dhcps_stop(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_NET_DNS ESP-NETIF DNS Settings
|
||||
* @brief Network stack related interface to NDS
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_NET_DNS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Set DNS Server information
|
||||
*
|
||||
* This function behaves differently if DHCP server or client is enabled
|
||||
*
|
||||
* If DHCP client is enabled, main and backup DNS servers will be updated automatically
|
||||
* from the DHCP lease if the relevant DHCP options are set. Fallback DNS Server is never updated from the DHCP lease
|
||||
* and is designed to be set via this API.
|
||||
* If DHCP client is disabled, all DNS server types can be set via this API only.
|
||||
*
|
||||
* If DHCP server is enabled, the Main DNS Server setting is used by the DHCP server to provide a DNS Server option
|
||||
* to DHCP clients (Wi-Fi stations).
|
||||
* - The default Main DNS server is typically the IP of the Wi-Fi AP interface itself.
|
||||
* - This function can override it by setting server type ESP_NETIF_DNS_MAIN.
|
||||
* - Other DNS Server types are not supported for the Wi-Fi AP interface.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] type Type of DNS Server to set: ESP_NETIF_DNS_MAIN, ESP_NETIF_DNS_BACKUP, ESP_NETIF_DNS_FALLBACK
|
||||
* @param[in] dns DNS Server address to set
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS invalid params
|
||||
*/
|
||||
esp_err_t esp_netif_set_dns_info(esp_netif_t *esp_netif, esp_netif_dns_type_t type, esp_netif_dns_info_t *dns);
|
||||
|
||||
/**
|
||||
* @brief Get DNS Server information
|
||||
*
|
||||
* Return the currently configured DNS Server address for the specified interface and Server type.
|
||||
*
|
||||
* This may be result of a previous call to esp_netif_set_dns_info(). If the interface's DHCP client is enabled,
|
||||
* the Main or Backup DNS Server may be set by the current DHCP lease.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] type Type of DNS Server to get: ESP_NETIF_DNS_MAIN, ESP_NETIF_DNS_BACKUP, ESP_NETIF_DNS_FALLBACK
|
||||
* @param[out] dns DNS Server result is written here on success
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS invalid params
|
||||
*/
|
||||
esp_err_t esp_netif_get_dns_info(esp_netif_t *esp_netif, esp_netif_dns_type_t type, esp_netif_dns_info_t *dns);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_NET_IP ESP-NETIF IP address related interface
|
||||
* @brief Network stack related interface to IP
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_NET_IP
|
||||
* @{
|
||||
*/
|
||||
#if CONFIG_LWIP_IPV6
|
||||
/**
|
||||
* @brief Create interface link-local IPv6 address
|
||||
*
|
||||
* Cause the TCP/IP stack to create a link-local IPv6 address for the specified interface.
|
||||
*
|
||||
* This function also registers a callback for the specified interface, so that if the link-local address becomes
|
||||
* verified as the preferred address then a SYSTEM_EVENT_GOT_IP6 event will be sent.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
*/
|
||||
esp_err_t esp_netif_create_ip6_linklocal(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Get interface link-local IPv6 address
|
||||
*
|
||||
* If the specified interface is up and a preferred link-local IPv6 address
|
||||
* has been created for the interface, return a copy of it.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] if_ip6 IPv6 information will be returned in this argument if successful.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_FAIL If interface is down, does not have a link-local IPv6 address,
|
||||
* or the link-local IPv6 address is not a preferred address.
|
||||
*/
|
||||
esp_err_t esp_netif_get_ip6_linklocal(esp_netif_t *esp_netif, esp_ip6_addr_t *if_ip6);
|
||||
|
||||
/**
|
||||
* @brief Get interface global IPv6 address
|
||||
*
|
||||
* If the specified interface is up and a preferred global IPv6 address
|
||||
* has been created for the interface, return a copy of it.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] if_ip6 IPv6 information will be returned in this argument if successful.
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_FAIL If interface is down, does not have a global IPv6 address,
|
||||
* or the global IPv6 address is not a preferred address.
|
||||
*/
|
||||
esp_err_t esp_netif_get_ip6_global(esp_netif_t *esp_netif, esp_ip6_addr_t *if_ip6);
|
||||
|
||||
/**
|
||||
* @brief Get all IPv6 addresses of the specified interface
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[out] if_ip6 Array of IPv6 addresses will be copied to the argument
|
||||
*
|
||||
* @return
|
||||
* number of returned IPv6 addresses
|
||||
*/
|
||||
int esp_netif_get_all_ip6(esp_netif_t *esp_netif, esp_ip6_addr_t if_ip6[]);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Sets IPv4 address to the specified octets
|
||||
*
|
||||
* @param[out] addr IP address to be set
|
||||
* @param a the first octet (127 for IP 127.0.0.1)
|
||||
* @param b
|
||||
* @param c
|
||||
* @param d
|
||||
*/
|
||||
void esp_netif_set_ip4_addr(esp_ip4_addr_t *addr, uint8_t a, uint8_t b, uint8_t c, uint8_t d);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Converts numeric IP address into decimal dotted ASCII representation.
|
||||
*
|
||||
* @param addr ip address in network order to convert
|
||||
* @param buf target buffer where the string is stored
|
||||
* @param buflen length of buf
|
||||
* @return either pointer to buf which now holds the ASCII
|
||||
* representation of addr or NULL if buf was too small
|
||||
*/
|
||||
char *esp_ip4addr_ntoa(const esp_ip4_addr_t *addr, char *buf, int buflen);
|
||||
|
||||
/**
|
||||
* @brief Ascii internet address interpretation routine
|
||||
* The value returned is in network order.
|
||||
*
|
||||
* @param addr IP address in ascii representation (e.g. "127.0.0.1")
|
||||
* @return ip address in network order
|
||||
*/
|
||||
uint32_t esp_ip4addr_aton(const char *addr);
|
||||
|
||||
/**
|
||||
* @brief Converts Ascii internet IPv4 address into esp_ip4_addr_t
|
||||
*
|
||||
* @param[in] src IPv4 address in ascii representation (e.g. "127.0.0.1")
|
||||
* @param[out] dst Address of the target esp_ip4_addr_t structure to receive converted address
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_FAIL if conversion failed
|
||||
* - ESP_ERR_INVALID_ARG if invalid parameter is passed into
|
||||
*/
|
||||
esp_err_t esp_netif_str_to_ip4(const char *src, esp_ip4_addr_t *dst);
|
||||
|
||||
/**
|
||||
* @brief Converts Ascii internet IPv6 address into esp_ip4_addr_t
|
||||
* Zeros in the IP address can be stripped or completely ommited: "2001:db8:85a3:0:0:0:2:1" or "2001:db8::2:1")
|
||||
*
|
||||
* @param[in] src IPv6 address in ascii representation (e.g. ""2001:0db8:85a3:0000:0000:0000:0002:0001")
|
||||
* @param[out] dst Address of the target esp_ip6_addr_t structure to receive converted address
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
* - ESP_FAIL if conversion failed
|
||||
* - ESP_ERR_INVALID_ARG if invalid parameter is passed into
|
||||
*/
|
||||
esp_err_t esp_netif_str_to_ip6(const char *src, esp_ip6_addr_t *dst);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_CONVERT ESP-NETIF Conversion utilities
|
||||
* @brief ESP-NETIF conversion utilities to related keys, flags, implementation handle
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_CONVERT
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Gets media driver handle for this esp-netif instance
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return opaque pointer of related IO driver
|
||||
*/
|
||||
esp_netif_iodriver_handle esp_netif_get_io_driver(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Searches over a list of created objects to find an instance with supplied if key
|
||||
*
|
||||
* @param if_key Textual description of network interface
|
||||
*
|
||||
* @return Handle to esp-netif instance
|
||||
*/
|
||||
esp_netif_t *esp_netif_get_handle_from_ifkey(const char *if_key);
|
||||
|
||||
/**
|
||||
* @brief Returns configured flags for this interface
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return Configuration flags
|
||||
*/
|
||||
esp_netif_flags_t esp_netif_get_flags(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Returns configured interface key for this esp-netif instance
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return Textual description of related interface
|
||||
*/
|
||||
const char *esp_netif_get_ifkey(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Returns configured interface type for this esp-netif instance
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return Enumerated type of this interface, such as station, AP, ethernet
|
||||
*/
|
||||
const char *esp_netif_get_desc(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Returns configured routing priority number
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return Integer representing the instance's route-prio, or -1 if invalid paramters
|
||||
*/
|
||||
int esp_netif_get_route_prio(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Returns configured event for this esp-netif instance and supplied event type
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @param event_type (either get or lost IP)
|
||||
*
|
||||
* @return specific event id which is configured to be raised if the interface lost or acquired IP address
|
||||
* -1 if supplied event_type is not known
|
||||
*/
|
||||
int32_t esp_netif_get_event_id(esp_netif_t *esp_netif, esp_netif_ip_event_type_t event_type);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_LIST ESP-NETIF List of interfaces
|
||||
* @brief APIs to enumerate all registered interfaces
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_LIST
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Iterates over list of interfaces. Returns first netif if NULL given as parameter
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return First netif from the list if supplied parameter is NULL, next one otherwise
|
||||
*/
|
||||
esp_netif_t *esp_netif_next(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @brief Returns number of registered esp_netif objects
|
||||
*
|
||||
* @return Number of esp_netifs
|
||||
*/
|
||||
size_t esp_netif_get_nr_of_ifs(void);
|
||||
|
||||
/**
|
||||
* @brief increase the reference counter of net stack buffer
|
||||
*
|
||||
* @param[in] netstack_buf the net stack buffer
|
||||
*
|
||||
*/
|
||||
void esp_netif_netstack_buf_ref(void *netstack_buf);
|
||||
|
||||
/**
|
||||
* @brief free the netstack buffer
|
||||
*
|
||||
* @param[in] netstack_buf the net stack buffer
|
||||
*
|
||||
*/
|
||||
void esp_netif_netstack_buf_free(void *netstack_buf);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _ESP_NETIF_H_ */
|
201
tools/sdk/esp32/include/esp_netif/include/esp_netif_defaults.h
Normal file
201
tools/sdk/esp32/include/esp_netif/include/esp_netif_defaults.h
Normal file
@ -0,0 +1,201 @@
|
||||
// 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 _ESP_NETIF_DEFAULTS_H
|
||||
#define _ESP_NETIF_DEFAULTS_H
|
||||
|
||||
#include "esp_compiler.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//
|
||||
// Macros to assemble master configs with partial configs from netif, stack and driver
|
||||
//
|
||||
|
||||
#define ESP_NETIF_INHERENT_DEFAULT_WIFI_STA() \
|
||||
{ \
|
||||
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_CLIENT | ESP_NETIF_FLAG_GARP | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
|
||||
.get_ip_event = IP_EVENT_STA_GOT_IP, \
|
||||
.lost_ip_event = IP_EVENT_STA_LOST_IP, \
|
||||
.if_key = "WIFI_STA_DEF", \
|
||||
.if_desc = "sta", \
|
||||
.route_prio = 100 \
|
||||
} \
|
||||
|
||||
#define ESP_NETIF_INHERENT_DEFAULT_WIFI_AP() \
|
||||
{ \
|
||||
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_SERVER | ESP_NETIF_FLAG_AUTOUP), \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||
.ip_info = &_g_esp_netif_soft_ap_ip, \
|
||||
.get_ip_event = 0, \
|
||||
.lost_ip_event = 0, \
|
||||
.if_key = "WIFI_AP_DEF", \
|
||||
.if_desc = "ap", \
|
||||
.route_prio = 10 \
|
||||
};
|
||||
|
||||
#define ESP_NETIF_INHERENT_DEFAULT_ETH() \
|
||||
{ \
|
||||
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_CLIENT | ESP_NETIF_FLAG_GARP | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
|
||||
.get_ip_event = IP_EVENT_ETH_GOT_IP, \
|
||||
.lost_ip_event = 0, \
|
||||
.if_key = "ETH_DEF", \
|
||||
.if_desc = "eth", \
|
||||
.route_prio = 50 \
|
||||
};
|
||||
|
||||
#define ESP_NETIF_INHERENT_DEFAULT_PPP() \
|
||||
{ \
|
||||
.flags = ESP_NETIF_FLAG_IS_PPP, \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
|
||||
.get_ip_event = IP_EVENT_PPP_GOT_IP, \
|
||||
.lost_ip_event = IP_EVENT_PPP_LOST_IP, \
|
||||
.if_key = "PPP_DEF", \
|
||||
.if_desc = "ppp", \
|
||||
.route_prio = 20 \
|
||||
};
|
||||
|
||||
#define ESP_NETIF_INHERENT_DEFAULT_SLIP() \
|
||||
{ \
|
||||
.flags = ESP_NETIF_FLAG_IS_SLIP, \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
|
||||
.get_ip_event = 0, \
|
||||
.lost_ip_event = 0, \
|
||||
.if_key = "SLP_DEF", \
|
||||
.if_desc = "slip", \
|
||||
.route_prio = 16 \
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Default configuration reference of ethernet interface
|
||||
*/
|
||||
#define ESP_NETIF_DEFAULT_ETH() \
|
||||
{ \
|
||||
.base = ESP_NETIF_BASE_DEFAULT_ETH, \
|
||||
.driver = NULL, \
|
||||
.stack = ESP_NETIF_NETSTACK_DEFAULT_ETH, \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Default configuration reference of WIFI AP
|
||||
*/
|
||||
#define ESP_NETIF_DEFAULT_WIFI_AP() \
|
||||
{ \
|
||||
.base = ESP_NETIF_BASE_DEFAULT_WIFI_AP, \
|
||||
.driver = NULL, \
|
||||
.stack = ESP_NETIF_NETSTACK_DEFAULT_WIFI_AP, \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Default configuration reference of WIFI STA
|
||||
*/
|
||||
#define ESP_NETIF_DEFAULT_WIFI_STA() \
|
||||
{ \
|
||||
.base = ESP_NETIF_BASE_DEFAULT_WIFI_STA, \
|
||||
.driver = NULL, \
|
||||
.stack = ESP_NETIF_NETSTACK_DEFAULT_WIFI_STA, \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Default configuration reference of PPP client
|
||||
*/
|
||||
#define ESP_NETIF_DEFAULT_PPP() \
|
||||
{ \
|
||||
.base = ESP_NETIF_BASE_DEFAULT_PPP, \
|
||||
.driver = NULL, \
|
||||
.stack = ESP_NETIF_NETSTACK_DEFAULT_PPP, \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Default configuration reference of SLIP client
|
||||
*/
|
||||
#define ESP_NETIF_DEFAULT_SLIP() \
|
||||
{ \
|
||||
.base = ESP_NETIF_BASE_DEFAULT_SLIP, \
|
||||
.driver = NULL, \
|
||||
.stack = ESP_NETIF_NETSTACK_DEFAULT_SLIP, \
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Default base config (esp-netif inherent) of WIFI STA
|
||||
*/
|
||||
#define ESP_NETIF_BASE_DEFAULT_WIFI_STA &_g_esp_netif_inherent_sta_config
|
||||
|
||||
/**
|
||||
* @brief Default base config (esp-netif inherent) of WIFI AP
|
||||
*/
|
||||
#define ESP_NETIF_BASE_DEFAULT_WIFI_AP &_g_esp_netif_inherent_ap_config
|
||||
|
||||
/**
|
||||
* @brief Default base config (esp-netif inherent) of ethernet interface
|
||||
*/
|
||||
#define ESP_NETIF_BASE_DEFAULT_ETH &_g_esp_netif_inherent_eth_config
|
||||
|
||||
/**
|
||||
* @brief Default base config (esp-netif inherent) of ppp interface
|
||||
*/
|
||||
#define ESP_NETIF_BASE_DEFAULT_PPP &_g_esp_netif_inherent_ppp_config
|
||||
|
||||
/**
|
||||
* @brief Default base config (esp-netif inherent) of slip interface
|
||||
*/
|
||||
#define ESP_NETIF_BASE_DEFAULT_SLIP &_g_esp_netif_inherent_slip_config
|
||||
|
||||
|
||||
|
||||
#define ESP_NETIF_NETSTACK_DEFAULT_ETH _g_esp_netif_netstack_default_eth
|
||||
#define ESP_NETIF_NETSTACK_DEFAULT_WIFI_STA _g_esp_netif_netstack_default_wifi_sta
|
||||
#define ESP_NETIF_NETSTACK_DEFAULT_WIFI_AP _g_esp_netif_netstack_default_wifi_ap
|
||||
#define ESP_NETIF_NETSTACK_DEFAULT_PPP _g_esp_netif_netstack_default_ppp
|
||||
#define ESP_NETIF_NETSTACK_DEFAULT_SLIP _g_esp_netif_netstack_default_slip
|
||||
|
||||
//
|
||||
// Include default network stacks configs
|
||||
// - Network stack configurations are provided in a specific network stack
|
||||
// implementation that is invisible to user API
|
||||
// - Here referenced only as opaque pointers
|
||||
//
|
||||
extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_eth;
|
||||
extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_wifi_sta;
|
||||
extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_wifi_ap;
|
||||
extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_ppp;
|
||||
extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_slip;
|
||||
|
||||
//
|
||||
// Include default common configs inherent to esp-netif
|
||||
// - These inherent configs are defined in esp_netif_defaults.c and describe
|
||||
// common behavioural patterns for common interfaces such as STA, AP, ETH, PPP
|
||||
//
|
||||
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_sta_config;
|
||||
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_ap_config;
|
||||
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_eth_config;
|
||||
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_ppp_config;
|
||||
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_slip_config;
|
||||
|
||||
extern const esp_netif_ip_info_t _g_esp_netif_soft_ap_ip;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_ESP_NETIF_DEFAULTS_H
|
131
tools/sdk/esp32/include/esp_netif/include/esp_netif_ip_addr.h
Normal file
131
tools/sdk/esp32/include/esp_netif/include/esp_netif_ip_addr.h
Normal file
@ -0,0 +1,131 @@
|
||||
// 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_IP_ADDR_H_
|
||||
#define _ESP_NETIF_IP_ADDR_H_
|
||||
|
||||
#include <machine/endian.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
#define esp_netif_htonl(x) ((uint32_t)(x))
|
||||
#else
|
||||
#define esp_netif_htonl(x) ((((x) & (uint32_t)0x000000ffUL) << 24) | \
|
||||
(((x) & (uint32_t)0x0000ff00UL) << 8) | \
|
||||
(((x) & (uint32_t)0x00ff0000UL) >> 8) | \
|
||||
(((x) & (uint32_t)0xff000000UL) >> 24))
|
||||
#endif
|
||||
|
||||
#define esp_netif_ip4_makeu32(a,b,c,d) (((uint32_t)((a) & 0xff) << 24) | \
|
||||
((uint32_t)((b) & 0xff) << 16) | \
|
||||
((uint32_t)((c) & 0xff) << 8) | \
|
||||
(uint32_t)((d) & 0xff))
|
||||
|
||||
// Access address in 16-bit block
|
||||
#define ESP_IP6_ADDR_BLOCK1(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[0]) >> 16) & 0xffff))
|
||||
#define ESP_IP6_ADDR_BLOCK2(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[0])) & 0xffff))
|
||||
#define ESP_IP6_ADDR_BLOCK3(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[1]) >> 16) & 0xffff))
|
||||
#define ESP_IP6_ADDR_BLOCK4(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[1])) & 0xffff))
|
||||
#define ESP_IP6_ADDR_BLOCK5(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[2]) >> 16) & 0xffff))
|
||||
#define ESP_IP6_ADDR_BLOCK6(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[2])) & 0xffff))
|
||||
#define ESP_IP6_ADDR_BLOCK7(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[3]) >> 16) & 0xffff))
|
||||
#define ESP_IP6_ADDR_BLOCK8(ip6addr) ((uint16_t)((esp_netif_htonl((ip6addr)->addr[3])) & 0xffff))
|
||||
|
||||
#define IPSTR "%d.%d.%d.%d"
|
||||
#define esp_ip4_addr_get_byte(ipaddr, idx) (((const uint8_t*)(&(ipaddr)->addr))[idx])
|
||||
#define esp_ip4_addr1(ipaddr) esp_ip4_addr_get_byte(ipaddr, 0)
|
||||
#define esp_ip4_addr2(ipaddr) esp_ip4_addr_get_byte(ipaddr, 1)
|
||||
#define esp_ip4_addr3(ipaddr) esp_ip4_addr_get_byte(ipaddr, 2)
|
||||
#define esp_ip4_addr4(ipaddr) esp_ip4_addr_get_byte(ipaddr, 3)
|
||||
|
||||
|
||||
#define esp_ip4_addr1_16(ipaddr) ((uint16_t)esp_ip4_addr1(ipaddr))
|
||||
#define esp_ip4_addr2_16(ipaddr) ((uint16_t)esp_ip4_addr2(ipaddr))
|
||||
#define esp_ip4_addr3_16(ipaddr) ((uint16_t)esp_ip4_addr3(ipaddr))
|
||||
#define esp_ip4_addr4_16(ipaddr) ((uint16_t)esp_ip4_addr4(ipaddr))
|
||||
|
||||
#define IP2STR(ipaddr) esp_ip4_addr1_16(ipaddr), \
|
||||
esp_ip4_addr2_16(ipaddr), \
|
||||
esp_ip4_addr3_16(ipaddr), \
|
||||
esp_ip4_addr4_16(ipaddr)
|
||||
|
||||
#define IPV6STR "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
|
||||
|
||||
#define IPV62STR(ipaddr) ESP_IP6_ADDR_BLOCK1(&(ipaddr)), \
|
||||
ESP_IP6_ADDR_BLOCK2(&(ipaddr)), \
|
||||
ESP_IP6_ADDR_BLOCK3(&(ipaddr)), \
|
||||
ESP_IP6_ADDR_BLOCK4(&(ipaddr)), \
|
||||
ESP_IP6_ADDR_BLOCK5(&(ipaddr)), \
|
||||
ESP_IP6_ADDR_BLOCK6(&(ipaddr)), \
|
||||
ESP_IP6_ADDR_BLOCK7(&(ipaddr)), \
|
||||
ESP_IP6_ADDR_BLOCK8(&(ipaddr))
|
||||
|
||||
#define ESP_IPADDR_TYPE_V4 0U
|
||||
#define ESP_IPADDR_TYPE_V6 6U
|
||||
#define ESP_IPADDR_TYPE_ANY 46U
|
||||
|
||||
#define ESP_IP4TOUINT32(a,b,c,d) (((uint32_t)((a) & 0xffU) << 24) | \
|
||||
((uint32_t)((b) & 0xffU) << 16) | \
|
||||
((uint32_t)((c) & 0xffU) << 8) | \
|
||||
(uint32_t)((d) & 0xffU))
|
||||
|
||||
#define ESP_IP4TOADDR(a,b,c,d) esp_netif_htonl(ESP_IP4TOUINT32(a, b, c, d))
|
||||
|
||||
struct esp_ip6_addr {
|
||||
uint32_t addr[4];
|
||||
uint8_t zone;
|
||||
};
|
||||
|
||||
struct esp_ip4_addr {
|
||||
uint32_t addr;
|
||||
};
|
||||
|
||||
typedef struct esp_ip4_addr esp_ip4_addr_t;
|
||||
|
||||
typedef struct esp_ip6_addr esp_ip6_addr_t;
|
||||
|
||||
typedef struct _ip_addr {
|
||||
union {
|
||||
esp_ip6_addr_t ip6;
|
||||
esp_ip4_addr_t ip4;
|
||||
} u_addr;
|
||||
uint8_t type;
|
||||
} esp_ip_addr_t;
|
||||
|
||||
typedef enum {
|
||||
ESP_IP6_ADDR_IS_UNKNOWN,
|
||||
ESP_IP6_ADDR_IS_GLOBAL,
|
||||
ESP_IP6_ADDR_IS_LINK_LOCAL,
|
||||
ESP_IP6_ADDR_IS_SITE_LOCAL,
|
||||
ESP_IP6_ADDR_IS_UNIQUE_LOCAL,
|
||||
ESP_IP6_ADDR_IS_IPV4_MAPPED_IPV6
|
||||
} esp_ip6_addr_type_t;
|
||||
|
||||
/**
|
||||
* @brief Get the IPv6 address type
|
||||
*
|
||||
* @param[in] ip6_addr IPv6 type
|
||||
*
|
||||
* @return IPv6 type in form of enum esp_ip6_addr_type_t
|
||||
*/
|
||||
esp_ip6_addr_type_t esp_netif_ip6_get_addr_type(esp_ip6_addr_t* ip6_addr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_ESP_NETIF_IP_ADDR_H_
|
106
tools/sdk/esp32/include/esp_netif/include/esp_netif_net_stack.h
Normal file
106
tools/sdk/esp32/include/esp_netif/include/esp_netif_net_stack.h
Normal file
@ -0,0 +1,106 @@
|
||||
// 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_NET_STACK_H_
|
||||
#define _ESP_NETIF_NET_STACK_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//
|
||||
// Network stack API: This ESP-NETIF API are supposed to be called only from internals of TCP/IP stack
|
||||
//
|
||||
|
||||
/** @addtogroup ESP_NETIF_CONVERT
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Returns esp-netif handle
|
||||
*
|
||||
* @param[in] dev opaque ptr to network interface of specific TCP/IP stack
|
||||
*
|
||||
* @return handle to related esp-netif instance
|
||||
*/
|
||||
esp_netif_t* esp_netif_get_handle_from_netif_impl(void *dev);
|
||||
|
||||
/**
|
||||
* @brief Returns network stack specific implementation handle (if supported)
|
||||
*
|
||||
* Note that it is not supported to acquire PPP netif impl pointer and
|
||||
* this function will return NULL for esp_netif instances configured to PPP mode
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
*
|
||||
* @return handle to related network stack netif handle
|
||||
*/
|
||||
void* esp_netif_get_netif_impl(esp_netif_t *esp_netif);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_DATA_IO_API
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Outputs packets from the TCP/IP stack to the media to be transmitted
|
||||
*
|
||||
* This function gets called from network stack to output packets to IO driver.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] data Data to be transmitted
|
||||
* @param[in] len Length of the data frame
|
||||
*
|
||||
* @return ESP_OK on success, an error passed from the I/O driver otherwise
|
||||
*/
|
||||
esp_err_t esp_netif_transmit(esp_netif_t *esp_netif, void* data, size_t len);
|
||||
|
||||
/**
|
||||
* @brief Outputs packets from the TCP/IP stack to the media to be transmitted
|
||||
*
|
||||
* This function gets called from network stack to output packets to IO driver.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] data Data to be transmitted
|
||||
* @param[in] len Length of the data frame
|
||||
* @param[in] netstack_buf net stack buffer
|
||||
*
|
||||
* @return ESP_OK on success, an error passed from the I/O driver otherwise
|
||||
*/
|
||||
esp_err_t esp_netif_transmit_wrap(esp_netif_t *esp_netif, void *data, size_t len, void *netstack_buf);
|
||||
|
||||
/**
|
||||
* @brief Free the rx buffer allocated by the media driver
|
||||
*
|
||||
* This function gets called from network stack when the rx buffer to be freed in IO driver context,
|
||||
* i.e. to deallocate a buffer owned by io driver (when data packets were passed to higher levels
|
||||
* to avoid copying)
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] buffer Rx buffer pointer
|
||||
*/
|
||||
void esp_netif_free_rx_buffer(void *esp_netif, void* buffer);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_ESP_NETIF_NET_STACK_H_
|
110
tools/sdk/esp32/include/esp_netif/include/esp_netif_ppp.h
Normal file
110
tools/sdk/esp32/include/esp_netif/include/esp_netif_ppp.h
Normal file
@ -0,0 +1,110 @@
|
||||
// Copyright 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_PPP_H_
|
||||
#define _ESP_NETIF_PPP_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** @brief PPP event base */
|
||||
ESP_EVENT_DECLARE_BASE(NETIF_PPP_STATUS);
|
||||
|
||||
/** @brief Configuration structure for PPP network interface
|
||||
*
|
||||
*/
|
||||
typedef struct esp_netif_ppp_config {
|
||||
bool ppp_phase_event_enabled; /**< Enables events coming from PPP PHASE change */
|
||||
bool ppp_error_event_enabled; /**< Enables events from main PPP state machine producing errors */
|
||||
} esp_netif_ppp_config_t;
|
||||
|
||||
/** @brief event id offset for PHASE related events
|
||||
*
|
||||
* All PPP related events are produced from esp-netif under `NETIF_PPP_STATUS`, this offset defines
|
||||
* helps distinguish between error and phase events
|
||||
*/
|
||||
#define NETIF_PP_PHASE_OFFSET (0x100)
|
||||
|
||||
/** @brief event ids for different PPP related events
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
NETIF_PPP_ERRORNONE = 0, /* No error. */
|
||||
NETIF_PPP_ERRORPARAM = 1, /* Invalid parameter. */
|
||||
NETIF_PPP_ERROROPEN = 2, /* Unable to open PPP session. */
|
||||
NETIF_PPP_ERRORDEVICE = 3, /* Invalid I/O device for PPP. */
|
||||
NETIF_PPP_ERRORALLOC = 4, /* Unable to allocate resources. */
|
||||
NETIF_PPP_ERRORUSER = 5, /* User interrupt. */
|
||||
NETIF_PPP_ERRORCONNECT = 6, /* Connection lost. */
|
||||
NETIF_PPP_ERRORAUTHFAIL = 7, /* Failed authentication challenge. */
|
||||
NETIF_PPP_ERRORPROTOCOL = 8, /* Failed to meet protocol. */
|
||||
NETIF_PPP_ERRORPEERDEAD = 9, /* Connection timeout */
|
||||
NETIF_PPP_ERRORIDLETIMEOUT = 10, /* Idle Timeout */
|
||||
NETIF_PPP_ERRORCONNECTTIME = 11, /* Max connect time reached */
|
||||
NETIF_PPP_ERRORLOOPBACK = 12, /* Loopback detected */
|
||||
NETIF_PPP_PHASE_DEAD = NETIF_PP_PHASE_OFFSET + 0,
|
||||
NETIF_PPP_PHASE_MASTER = NETIF_PP_PHASE_OFFSET + 1,
|
||||
NETIF_PPP_PHASE_HOLDOFF = NETIF_PP_PHASE_OFFSET + 2,
|
||||
NETIF_PPP_PHASE_INITIALIZE = NETIF_PP_PHASE_OFFSET + 3,
|
||||
NETIF_PPP_PHASE_SERIALCONN = NETIF_PP_PHASE_OFFSET + 4,
|
||||
NETIF_PPP_PHASE_DORMANT = NETIF_PP_PHASE_OFFSET + 5,
|
||||
NETIF_PPP_PHASE_ESTABLISH = NETIF_PP_PHASE_OFFSET + 6,
|
||||
NETIF_PPP_PHASE_AUTHENTICATE = NETIF_PP_PHASE_OFFSET + 7,
|
||||
NETIF_PPP_PHASE_CALLBACK = NETIF_PP_PHASE_OFFSET + 8,
|
||||
NETIF_PPP_PHASE_NETWORK = NETIF_PP_PHASE_OFFSET + 9,
|
||||
NETIF_PPP_PHASE_RUNNING = NETIF_PP_PHASE_OFFSET + 10,
|
||||
NETIF_PPP_PHASE_TERMINATE = NETIF_PP_PHASE_OFFSET + 11,
|
||||
NETIF_PPP_PHASE_DISCONNECT = NETIF_PP_PHASE_OFFSET + 12,
|
||||
} esp_netif_ppp_status_event_t;
|
||||
|
||||
/** @brief definitions of different authorisation types
|
||||
*
|
||||
*/
|
||||
typedef enum {
|
||||
NETIF_PPP_AUTHTYPE_NONE = 0x00,
|
||||
NETIF_PPP_AUTHTYPE_PAP = 0x01,
|
||||
NETIF_PPP_AUTHTYPE_CHAP = 0x02,
|
||||
NETIF_PPP_AUTHTYPE_MSCHAP = 0x04,
|
||||
NETIF_PPP_AUTHTYPE_MSCHAP_V2 = 0x08,
|
||||
NETIF_PPP_AUTHTYPE_EAP = 0x10,
|
||||
} esp_netif_auth_type_t;
|
||||
|
||||
/** @brief Sets the auth parameters for the supplied esp-netif.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] authtype Authorisation type
|
||||
* @param[in] user User name
|
||||
* @param[in] passwd Password
|
||||
*
|
||||
* @return ESP_OK on success, ESP_ERR_ESP_NETIF_INVALID_PARAMS if netif null or not PPP
|
||||
*/
|
||||
esp_err_t esp_netif_ppp_set_auth(esp_netif_t *netif, esp_netif_auth_type_t authtype, const char *user, const char *passwd);
|
||||
|
||||
/** @brief Sets common parameters for the supplied esp-netif.
|
||||
*
|
||||
* @param[in] esp_netif Handle to esp-netif instance
|
||||
* @param[in] config Pointer to PPP netif configuration structure
|
||||
*
|
||||
* @return ESP_OK on success, ESP_ERR_ESP_NETIF_INVALID_PARAMS if netif null or not PPP
|
||||
*/
|
||||
esp_err_t esp_netif_ppp_set_params(esp_netif_t *netif, const esp_netif_ppp_config_t *config);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_ESP_NETIF_PPP_H_
|
79
tools/sdk/esp32/include/esp_netif/include/esp_netif_slip.h
Normal file
79
tools/sdk/esp32/include/esp_netif/include/esp_netif_slip.h
Normal file
@ -0,0 +1,79 @@
|
||||
// Copyright 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_SLIP_H_
|
||||
#define _ESP_NETIF_SLIP_H_
|
||||
|
||||
#include "esp_netif.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** @brief Configuration structure for SLIP network interface
|
||||
*
|
||||
*/
|
||||
typedef struct esp_netif_slip_config {
|
||||
esp_ip6_addr_t ip6_addr; /* Local IP6 address */
|
||||
|
||||
} esp_netif_slip_config_t;
|
||||
|
||||
|
||||
/** @brief Sets common parameters for the supplied esp-netif.
|
||||
*
|
||||
* @param[in] esp_netif handle to slip esp-netif instance
|
||||
* @param[in] config Pointer to SLIP netif configuration structure
|
||||
*
|
||||
* @return ESP_OK on success, ESP_ERR_ESP_NETIF_INVALID_PARAMS if netif null or not SLIP
|
||||
*/
|
||||
esp_err_t esp_netif_slip_set_params(esp_netif_t *netif, const esp_netif_slip_config_t *config);
|
||||
|
||||
#if CONFIG_LWIP_IPV6
|
||||
/** @brief Sets IPV6 address for the supplied esp-netif.
|
||||
*
|
||||
* @param[in] netif handle to slip esp-netif instance
|
||||
* @param[in] ipv6 IPv6 address of the SLIP interface
|
||||
*
|
||||
* @return ESP_OK on success, ESP_ERR_ESP_NETIF_INVALID_PARAMS if netif null or not SLIP
|
||||
*/
|
||||
esp_err_t esp_netif_slip_set_ipv6(esp_netif_t *netif, const esp_ip6_addr_t *ipv6);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Data path API to write raw packet ous the SLIP interface
|
||||
*
|
||||
* This API is typically used when implementing user defined methods
|
||||
*
|
||||
* @param[in] esp_netif handle to slip esp-netif instance
|
||||
* @param[in] buffer pointer to the outgoing data
|
||||
* @param[in] len length of the data
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK on success
|
||||
*/
|
||||
void esp_netif_lwip_slip_raw_output(esp_netif_t *netif, void *buffer, size_t len);
|
||||
|
||||
/**
|
||||
* @brief Fetch IP6 address attached to the SLIP interface
|
||||
*
|
||||
* @param[in] esp_netif handle to slip esp-netif instance
|
||||
* @param[in] address index (unused)
|
||||
*
|
||||
* @return
|
||||
* - pointer to the internal ip6 address object
|
||||
*/
|
||||
const esp_ip6_addr_t *esp_slip_get_ip6(esp_netif_t *slip_netif);
|
||||
|
||||
#endif
|
@ -0,0 +1,71 @@
|
||||
// Copyright 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_STA_LIST_H_
|
||||
#define _ESP_NETIF_STA_LIST_H_
|
||||
|
||||
#include "esp_netif_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief station list info element
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t mac[6]; /**< Station MAC address */
|
||||
esp_ip4_addr_t ip; /**< Station assigned IP address */
|
||||
} esp_netif_sta_info_t;
|
||||
|
||||
/**
|
||||
* @brief station list structure
|
||||
*/
|
||||
typedef struct {
|
||||
esp_netif_sta_info_t sta[ESP_WIFI_MAX_CONN_NUM]; /**< Connected stations */
|
||||
int num; /**< Number of connected stations */
|
||||
} esp_netif_sta_list_t;
|
||||
|
||||
/**
|
||||
* @defgroup ESP_NETIF_STA_LIST ESP-NETIF STA list api
|
||||
* @brief List of stations for Wi-Fi AP interface
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup ESP_NETIF_STA_LIST
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get IP information for stations connected to the Wi-Fi AP interface
|
||||
*
|
||||
* @param[in] wifi_sta_list Wi-Fi station info list, returned from esp_wifi_ap_get_sta_list()
|
||||
* @param[out] netif_sta_list IP layer station info list, corresponding to MAC addresses provided in wifi_sta_list
|
||||
*
|
||||
* @return
|
||||
* - ESP_OK
|
||||
* - ESP_ERR_ESP_NETIF_NO_MEM
|
||||
* - ESP_ERR_ESP_NETIF_INVALID_PARAMS
|
||||
*/
|
||||
esp_err_t esp_netif_get_sta_list(const wifi_sta_list_t *wifi_sta_list, esp_netif_sta_list_t *netif_sta_list);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_ESP_NETIF_STA_LIST_H_
|
220
tools/sdk/esp32/include/esp_netif/include/esp_netif_types.h
Normal file
220
tools/sdk/esp32/include/esp_netif/include/esp_netif_types.h
Normal file
@ -0,0 +1,220 @@
|
||||
// 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_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @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
|
||||
#define ESP_ERR_ESP_NETIF_DRIVER_ATTACH_FAILED ESP_ERR_ESP_NETIF_BASE + 0x08
|
||||
#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
|
||||
|
||||
|
||||
/** @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_SUBNET_MASK = 1, /**< Network mask */
|
||||
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 {
|
||||
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 */
|
||||
} 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 */
|
||||
int ip_index; /*!< IPv6 address index */
|
||||
} 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 {
|
||||
ESP_NETIF_DHCP_CLIENT = 1 << 0,
|
||||
ESP_NETIF_DHCP_SERVER = 1 << 1,
|
||||
ESP_NETIF_FLAG_AUTOUP = 1 << 2,
|
||||
ESP_NETIF_FLAG_GARP = 1 << 3,
|
||||
ESP_NETIF_FLAG_EVENT_IP_MODIFIED = 1 << 4,
|
||||
ESP_NETIF_FLAG_IS_PPP = 1 << 5,
|
||||
ESP_NETIF_FLAG_IS_SLIP = 1 << 6,
|
||||
} 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 */
|
||||
const esp_netif_ip_info_t* ip_info; /*!< initial ip address for this interface */
|
||||
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 */
|
||||
const char * if_desc; /*!< textual description of the interface */
|
||||
int route_prio; /*!< numeric priority of this interface to become a default
|
||||
routing if (if other netifs are up).
|
||||
A higher value of route_prio indicates
|
||||
a higher priority */
|
||||
} 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);
|
||||
esp_err_t (*transmit_wrap)(void *h, void *buffer, size_t len, void *netstack_buffer);
|
||||
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;
|
||||
};
|
||||
|
||||
/**
|
||||
* @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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _ESP_NETIF_TYPES_H_
|
Reference in New Issue
Block a user