/********************************************************************************************************* ** 函数名称: __tshellIfUp ** 功能描述: 系统命令 "ifup" ** 输 入 : iArgC 参数个数 ** ppcArgV 参数表 ** 输 出 : 0 ** 全局变量: ** 调用模块: *********************************************************************************************************/ static INT __tshellIfUp (INT iArgC, PCHAR *ppcArgV) { struct netif *netif; BOOL bUseDHCP = LW_FALSE; /* 是否使用自动获取 IP */ BOOL bShutDownDHCP = LW_FALSE; /* 是否强制关闭 DHCP */ if (iArgC < 2) { fprintf(stderr, "argments error!\n"); return (-ERROR_TSHELL_EPARAM); } else if (iArgC > 2) { if (lib_strcmp(ppcArgV[2], "-dhcp") == 0) { bUseDHCP = LW_TRUE; /* 使用 DHCP 启动 */ } else if (lib_strcmp(ppcArgV[2], "-nodhcp") == 0) { bShutDownDHCP = LW_TRUE; } } netif = netif_find(ppcArgV[1]); /* 查询网络接口 */ if (netif == LW_NULL) { fprintf(stderr, "can not find net interface.\n"); return (-ERROR_TSHELL_EPARAM); } if (netif_is_up(netif)) { /* 网卡是否已经启动 */ #if LWIP_DHCP > 0 /* 首先关闭网卡 */ if (netif->dhcp && netif->dhcp->pcb) { netifapi_netif_common(netif, NULL, dhcp_release); /* 解除 DHCP 租约 */ netifapi_dhcp_stop(netif); /* 释放资源 */ } #endif /* LWIP_DHCP > 0 */ netifapi_netif_set_down(netif); /* 禁用网卡 */ } netifapi_netif_set_up(netif); /* 启动网卡 */ #if LWIP_DHCP > 0 if (bUseDHCP) { netif->flags2 |= NETIF_FLAG2_DHCP; /* 使用 DHCP 启动 */ } else if (bShutDownDHCP) { netif->flags2 &= ~NETIF_FLAG2_DHCP; /* 强制关闭 DHCP */ } if (netif->flags2 & NETIF_FLAG2_DHCP) { ip_addr_t inaddrNone; lib_bzero(&inaddrNone, sizeof(ip_addr_t)); netifapi_netif_set_addr(netif, &inaddrNone, &inaddrNone, &inaddrNone); /* 所有地址设置为 0 */ printf("DHCP client starting...\n"); if (netifapi_dhcp_start(netif) < ERR_OK) { printf("DHCP client serious error.\n"); } else { printf("DHCP client start.\n"); } } #endif /* LWIP_DHCP > 0 */ printf("net interface \"%s\" set up.\n", ppcArgV[1]); return (ERROR_NONE); }
/********************************************************************************************************* ** 函数名称: if_up ** 功能描述: 打开网卡 ** 输 入 : ifname if name ** 输 出 : 网卡是否打开 ** 全局变量: ** 调用模块: API 函数 *********************************************************************************************************/ LW_API INT if_up (const char *ifname) { INT iError; struct netif *pnetif; LWIP_NETIF_LOCK(); /* 进入临界区 */ pnetif = netif_find((char *)ifname); if (pnetif) { if (!(pnetif->flags & NETIF_FLAG_UP)) { netifapi_netif_set_up(pnetif); #if LWIP_DHCP > 0 if (pnetif->flags2 & NETIF_FLAG2_DHCP) { ip_addr_t inaddrNone; lib_bzero(&inaddrNone, sizeof(ip_addr_t)); netifapi_netif_set_addr(pnetif, &inaddrNone, &inaddrNone, &inaddrNone); netifapi_dhcp_start(pnetif); } #endif /* LWIP_DHCP > 0 */ iError = ERROR_NONE; } else { _ErrorHandle(EALREADY); iError = PX_ERROR; } } else { _ErrorHandle(ENXIO); iError = PX_ERROR; } LWIP_NETIF_UNLOCK(); /* 退出临界区 */ return (iError); }
err_t tls_netif2_set_up(void) { return netifapi_netif_set_up(nif->next); }
err_t tls_netif_set_up(void) { return netifapi_netif_set_up(nif); }