1 /*
2  * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef _ESP_NETIF_NET_STACK_H_
8 #define _ESP_NETIF_NET_STACK_H_
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 //
15 // Network stack API: This ESP-NETIF API are supposed to be called only from internals of TCP/IP stack
16 //
17 
18 /** @addtogroup ESP_NETIF_CONVERT
19  * @{
20  */
21 
22 /**
23  * @brief Returns esp-netif handle
24  *
25  * @param[in] dev opaque ptr to network interface of specific TCP/IP stack
26  *
27  * @return    handle to related esp-netif instance
28  */
29 esp_netif_t* esp_netif_get_handle_from_netif_impl(void *dev);
30 
31 /**
32  * @brief Returns network stack specific implementation handle (if supported)
33  *
34  * Note that it is not supported to acquire PPP netif impl pointer and
35  * this function will return NULL for esp_netif instances configured to PPP mode
36  *
37  * @param[in]  esp_netif Handle to esp-netif instance
38  *
39  * @return    handle to related network stack netif handle
40  */
41 void* esp_netif_get_netif_impl(esp_netif_t *esp_netif);
42 
43 /**
44  * @brief Set link-speed for the specified network interface
45  * @param[in] esp_netif Handle to esp-netif instance
46  * @param[in] speed  Link speed in bit/s
47  * @return ESP_OK on success
48  */
49 esp_err_t esp_netif_set_link_speed(esp_netif_t *esp_netif, uint32_t speed);
50 
51 /**
52  * @}
53  */
54 
55 /** @addtogroup ESP_NETIF_DATA_IO_API
56  * @{
57  */
58 
59 /**
60   * @brief  Outputs packets from the TCP/IP stack to the media to be transmitted
61   *
62   * This function gets called from network stack to output packets to IO driver.
63   *
64   * @param[in]  esp_netif Handle to esp-netif instance
65   * @param[in]  data Data to be transmitted
66   * @param[in]  len Length of the data frame
67   *
68   * @return   ESP_OK on success, an error passed from the I/O driver otherwise
69   */
70 esp_err_t esp_netif_transmit(esp_netif_t *esp_netif, void* data, size_t len);
71 
72 /**
73   * @brief  Outputs packets from the TCP/IP stack to the media to be transmitted
74   *
75   * This function gets called from network stack to output packets to IO driver.
76   *
77   * @param[in]  esp_netif Handle to esp-netif instance
78   * @param[in]  data Data to be transmitted
79   * @param[in]  len Length of the data frame
80   * @param[in]  netstack_buf net stack buffer
81   *
82   * @return   ESP_OK on success, an error passed from the I/O driver otherwise
83   */
84 esp_err_t esp_netif_transmit_wrap(esp_netif_t *esp_netif, void *data, size_t len, void *netstack_buf);
85 
86 /**
87   * @brief  Free the rx buffer allocated by the media driver
88   *
89   * This function gets called from network stack when the rx buffer to be freed in IO driver context,
90   * i.e. to deallocate a buffer owned by io driver (when data packets were passed to higher levels
91   * to avoid copying)
92   *
93   * @param[in]  esp_netif Handle to esp-netif instance
94   * @param[in]  buffer Rx buffer pointer
95   */
96 void esp_netif_free_rx_buffer(void *esp_netif, void* buffer);
97 
98 /**
99  * @}
100  */
101 
102 #ifdef __cplusplus
103 }
104 #endif
105 
106 #endif //_ESP_NETIF_NET_STACK_H_
107