xilinx代码分析:netif_set_up函数

本文将对以下代码进行详细的解析和解释:

/**
 * @ingroup netif
 * Bring an interface up, available for processing
 * traffic.
 */
void
netif_set_up(struct netif *netif)
{
    
    
  LWIP_ASSERT_CORE_LOCKED();

  LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return);

  if (!(netif->flags & NETIF_FLAG_UP)) {
    
    
    netif_set_flags(netif, NETIF_FLAG_UP);

    MIB2_COPY_SYSUPTIME_TO(&netif->ts);

    NETIF_STATUS_CALLBACK(netif);

#if LWIP_NETIF_EXT_STATUS_CALLBACK
    {
    
    
      netif_ext_callback_args_t args;
      args.status_changed.state = 1;
      netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args);
    }
#endif

    netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6);
#if LWIP_IPV6
    nd6_restart_netif(netif);
#endif /* LWIP_IPV6 */
  }
}

1. 函数介绍

netif_set_up函数是lwIP协议栈中的一个函数,这个函数的作用是启动一个网络接口,并使其可以处理网络数据包。

函数的原型为:

void netif_set_up(struct netif *netif);

2. 参数解析

netif_set_up函数只有一个参数,即struct netif *netif,表示需要启动的网络接口。

3. 代码详解

3.1 确认核心已锁定

LWIP_ASSERT_CORE_LOCKED();

这个宏用于确保在调用netif_set_up函数的时候,lwIP的核心已经被锁定,防止并发问题。

3.2 检查网络接口是否有效

LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return);

这里检查传入的网络接口是否为NULL,如果为NULL,那么就打印错误信息并返回。

3.3 设置网络接口状态

if (!(netif->flags & NETIF_FLAG_UP)) {
    
    
  netif_set_flags(netif, NETIF_FLAG_UP);
  ...
}

如果网络接口的当前状态不是UP,那么就将其状态设置为UP。

3.4 设置网络接口的时间戳

MIB2_COPY_SYSUPTIME_TO(&netif->ts);

这里将当前的系统运行时间复制到网络接口的时间戳中。

3.5 调用网络接口的状态回调函数

NETIF_STATUS_CALLBACK(netif);

这里调用了网络接口的状态回调函数,通知其他部分网络接口的状态已经改变。

3.6 触发扩展回调函数

#if LWIP_NETIF_EXT_STATUS_CALLBACK
{
    
    
  netif_ext_callback_args_t args;
  args.status_changed.state = 1;
  netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args);
}
#endif

如果定义了LWIP_NETIF_EXT_STATUS_CALLBACK,那么就会触发网络接口的扩展回调函数。

3.7 发送网络接口报告

netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6);

这里发送了一个网络接口报告,报告的类型是IPv4和IPv6。

3.8 重启网络接口

#if LWIP_IPV6
nd6_restart_netif(netif);
#endif /* LWIP_IPV6 */

如果定义了LWIP_IPV6,那么就会重启网络接口,以便处理IPv6的数据包。

4. 总结

netif_set_up函数是lwIP协议栈中非常重要的一个函数,它负责启动一个网络接口,并使其可以处理网络数据包。这个函数的实现涉及到了很多

猜你喜欢

转载自blog.csdn.net/qq_24951479/article/details/131686987