lwip_pkt_handle();
时间: 2023-09-10 10:04:39 浏览: 46
lwip_pkt_handle()是lwIP网络协议栈中的一个函数,用于处理接收到的网络数据包。当网络数据包到达网络协议栈时,网络接口驱动程序会调用lwip_pkt_handle()函数,将数据包交由网络协议栈进行处理。lwip_pkt_handle()函数会根据数据包的类型,选择相应的协议模块进行处理,比如TCP、UDP、ICMP等。在处理完成后,网络协议栈会将响应的数据包发送回网络接口驱动程序,由它进行发送。
相关问题
ethernetif_input( void * pvParameters )如何在LwIP_Pkt_Handle中调用
在LwIP中,`ethernetif_input()`函数被用于接收以太网帧并将其传递到LwIP协议栈进行进一步处理。如果你想在`LwIP_Pkt_Handle()`函数中调用`ethernetif_input()`函数,可以按照以下步骤进行操作:
1. 在`LwIP_Pkt_Handle()`函数中获取指向`struct netif`的指针,该指针指向当前网络接口。
2. 调用`ethernetif_input()`函数,将以太网帧和网络接口指针作为参数传递给它。
下面是一个示例代码片段,展示了如何在`LwIP_Pkt_Handle()`函数中调用`ethernetif_input()`函数:
```c
static err_t LwIP_Pkt_Handle( struct pbuf *p, struct netif *inp )
{
// process received packet here
// ...
// call ethernetif_input() function to pass the packet to LwIP stack
ethernetif_input( inp );
}
```
在上面的代码中,`LwIP_Pkt_Handle()`函数获取指向`struct netif`的指针`inp`,并将其作为参数传递给`ethernetif_input()`函数。这样,以太网帧就会被传递到LwIP协议栈进行进一步处理。
ethernetif_input( void * pvParameters )如何在LwIP_Pkt_Handle中调用,ethernetif_input没有参数
在LWIP中,`ethernetif_input()`函数的参数为一个指向网络接口结构体的指针,也就是类似于`struct netif *netif`这样的参数。这个指针可以通过LWIP提供的API函数`netif_find()`来获取,该函数会返回指向网络接口结构体的指针。
在`LwIP_Pkt_Handle()`函数中调用`ethernetif_input()`函数时,可以通过定义一个全局的网络接口结构体指针变量来传递参数。例如:
```c
static struct netif *g_pNetif;
void ethernetif_input( void * pvParameters )
{
struct pbuf *p = (struct pbuf *)pvParameters;
// ...
netif_input(g_pNetif, p);
}
err_t LwIP_Pkt_Handle(void *payload, uint32_t len)
{
// ...
g_pNetif = netif_find("eth0");
ethernetif_input(p_payload);
// ...
}
```
在这个例子中,我们定义了一个名为`g_pNetif`的全局指针变量,并在`LwIP_Pkt_Handle()`函数中使用`netif_find()`函数来获取指向网络接口结构体的指针,并将其赋值给`g_pNetif`变量。然后,在调用`ethernetif_input()`函数时,我们传递了`p_payload`指针作为参数,而在`ethernetif_input()`函数内部,我们可以通过`g_pNetif`变量来获取网络接口的信息。