netif_set_link_up和netif_set_up的区别

本文详细解释了netif_set_up与netif_set_link_up两个函数的区别。netif_set_up用于使能网卡并设置NETIF_FLAG_UP标志位,通常在网络设备初始化时由用户调用。而netif_set_link_up则是在网卡链路层激活时由驱动程序调用,例如无线站设备关联到接入点后。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

netif_set_up是使能网卡,设置NETIF_FLAG_UP标志位,必须在网卡被使用前用户来调用
netif_set_link_up是当网卡链路层active时由网卡驱动来设置的,如,station关联上AP后就应该调用netif_set_link_up

int dmpKernelUpdateNetifEntry(DAL_NETIF_ENTRY *entryRecieve, DAL_NETIF_ENTRY *entryFind, DAL_NETIF_ENTRY_FLAG_E netifFlag, DAL_NETIF_KERNEL_FLAG *kernelFlag) { if (entryFind == NULL || kernelFlag == NULL) { return; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_VLANID) { entry2Set.vlanId = pEntryRecieve->vlanId; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_MAC) { /* mac变更 */ if (0 != memcmp(pEntryRecieve->mac, entry2Set.mac, MAC_ADDR_SIZE)) { memcpy(entry2Set.mac, pEntryRecieve->mac, MAC_ADDR_SIZE); *kernelFlag |= DAL_NETIF_KERNEL_FLAG_MAC_SET; } } if (netifFlag & DAL_NETIF_ENTRY_FLAG_IFX) { entry2Set.ifindex = pEntryRecieve->ifindex; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_SUBIFTYPE) { entry2Set.subType = pEntryRecieve->subType; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_LINKSTATUS) { /* 如果iftype为需要在dmp侧判断linkstatus的类型 */ /* 理论上讲,上层不会下发这几个类型的linkstatus字段 */ /* 如果是从dal数据库恢复linkstatus状态(master->slave) */ if (FALSE == dalNetIfLinkScanFilter(entry2Set.if_id) || flag & DAL_NETIF_ENTRY_FLAG_RELOAD) { entry2Set.linkStatus = pEntryRecieve->linkStatus; /* 设置上kernel flag,直接在kernelhandle中处理 */ *kernelFlag |= DAL_NETIF_KERNEL_FLAG_LINK_SET; } } if (netifFlag & DAL_NETIF_ENTRY_FLAG_ADMINSTATUS) { /* 涉及到初始化问题,加上new flag判断 */ if ((*kernelFlag & DAL_NETIF_KERNEL_FLAG_NEW) || (entry2Set.adminStatus != pEntryRecieve->adminStatus)) { DBG("recieve status: %d", pEntryRecieve->adminStatus); entry2Set.adminStatus = pEntryRecieve->adminStatus; /* admin set flag仅管理口使用,netIF其他接口走linkscan逻辑 */ *kernelFlag |= DAL_NETIF_KERNEL_FLAG_ADMIN_SET; } } if (netifFlag & DAL_NETIF_ENTRY_FLAG_IPV4MODE) { entry2Set.ipv4Mode = pEntryRecieve->ipv4Mode; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_IPV4EN) { /* 涉及到初始化问题,加上new flag判断 */ if ((*kernelFlag & DAL_NETIF_KERNEL_FLAG_NEW) || entry2Set.ipv4En != pEntryRecieve->ipv4En) { entry2Set.ipv4En = !!pEntryRecieve->ipv4En; hiNetIfIpv4RouteEnableSet(entry2Set.vlanId, entry2Set.ipv4En); } } if (netifFlag & DAL_NETIF_ENTRY_FLAG_IPV6EN) { /* 涉及到初始化问题,加上new flag判断 */ if ((*kernelFlag & DAL_NETIF_KERNEL_FLAG_NEW) || entry2Set.ipv6En != pEntryRecieve->ipv6En) { entry2Set.ipv6En = !!pEntryRecieve->ipv6En; hiNetIfIpv6RouteEnableSet(entry2Set.vlanId, entry2Set.ipv6En); *kernelFlag |= DAL_NETIF_KERNEL_FLAG_IPV6_EN; } } if (netifFlag & DAL_NETIF_ENTRY_FLAG_VRFID) { entry2Set.vrfId = pEntryRecieve->vrfId; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_VRFNAME) { if (0 != strncmp(entry2Set.vrfName, pEntryRecieve->vrfName, VRF_NAME_LEN)) { snprintf(entry2Set.vrfName, sizeof(entry2Set.vrfName), pEntryRecieve->vrfName); *kernelFlag |= DAL_NETIF_KERNEL_FLAG_VRF_SET; } } if (netifFlag & DAL_NETIF_ENTRY_FLAG_SLAACEN) { entry2Set.slaacEn = pEntryRecieve->slaacEn; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_DHCP6EN) { entry2Set.dhcp6En = pEntryRecieve->dhcp6En; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_LINKLOCALMODE) { entry2Set.linklocalMode = pEntryRecieve->linklocalMode; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_LINKLOCALADDR) { if (0 != memcmp(&entry2Set.linklocalAddr, &pEntryRecieve->linklocalAddr, sizeof(IF_ADDR))) { memcpy(&entry2Set.linklocalAddr, &pEntryRecieve->linklocalAddr, sizeof(IF_ADDR)); *kernelFlag |= DAL_NETIF_KERNEL_FLAG_LINKLOCAL_SET; } } if (netifFlag & DAL_NETIF_ENTRY_FLAG_PARENTNAME) { snprintf(entry2Set.parentName, sizeof(entry2Set.parentName), pEntryRecieve->parentName); } if (netifFlag & DAL_NETIF_ENTRY_FLAG_KERNELNAME) { snprintf(entry2Set.kernelName, sizeof(entry2Set.kernelName), pEntryRecieve->kernelName); } if (netifFlag & DAL_NETIF_ENTRY_FLAG_LOCALADDR) { snprintf(entry2Set.localAddr, sizeof(entry2Set.localAddr), pEntryRecieve->localAddr); } if (netifFlag & DAL_NETIF_ENTRY_FLAG_REMOTEADDR) { snprintf(entry2Set.remoteAddr, sizeof(entry2Set.remoteAddr), pEntryRecieve->remoteAddr); } if (netifFlag & DAL_NETIF_ENTRY_FLAG_GROUPADDR) { snprintf(entry2Set.groupAddr, sizeof(entry2Set.groupAddr), pEntryRecieve->groupAddr); } if (netifFlag & DAL_NETIF_ENTRY_FLAG_TTL) { entry2Set.ttl = pEntryRecieve->ttl; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_VNI) { entry2Set.vni = pEntryRecieve->vni; } if (netifFlag & DAL_NETIF_ENTRY_FLAG_DSTPORT) { entry2Set.dstport = pEntryRecieve->dstport; } } 优化简化这段代码
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值