示例#1
0
/*********************************************************************************************************
** 函数名称: __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);
}
示例#2
0
/*********************************************************************************************************
** 函数名称: 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);
}
示例#3
0
err_t tls_netif2_set_up(void)
{
    return netifapi_netif_set_up(nif->next);
}
示例#4
0
err_t tls_netif_set_up(void)
{
    return netifapi_netif_set_up(nif);
}