void wireless_send_event(struct net_device *	dev,
			 unsigned int		cmd,
			 union iwreq_data *	wrqu,
			 char *			extra)
{
    
    printf("wireless_send_event[0x%x]",cmd);


    if(cmd == IWEVCUSTOM)
    {
        printf("[0x%x] %s\r\n",wrqu->data.flags,extra);
        switch (wrqu->data.flags) 
        {
            case IW_STA_LINKUP_EVENT_FLAG:
                netifapi_netif_common(&wireless_netif, netif_set_link_up, NULL);
#if LWIP_DHCP
                printf("dhcp_start...\r\n");
                netifapi_netif_common(&wireless_netif, NULL, dhcp_start);
#endif 
                break;
            case IW_STA_LINKDOWN_EVENT_FLAG:
                netifapi_netif_common(&wireless_netif, netif_set_link_down, NULL);
#if LWIP_DHCP
                netifapi_netif_common(&wireless_netif, dhcp_stop, NULL);
                netifapi_netif_common(&wireless_netif, netif_set_down, NULL);
                netifapi_netif_set_addr(&wireless_netif, IP_ADDR_ANY, IP_ADDR_ANY, IP_ADDR_ANY);
#endif                 
                break;                  
        }

    }   
}
示例#2
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);
}
示例#3
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);
}
示例#4
0
/*********************************************************************************************************
** 函数名称: __netIfSet
** 功能描述: 设置指定网络接口信息 (ip v4)
** 输 入  : netif     网络接口
**           pcItem    设置项目名称
**           ipaddr    地址信息
** 输 出  : NONE
** 全局变量:
** 调用模块:
*********************************************************************************************************/
static VOID  __netIfSet (struct netif  *netif, CPCHAR  pcItem, ip_addr_t  ipaddr)
{
    ip_addr_t  ipaddrInet;
    ip_addr_t  ipaddrMask;
    ip_addr_t  ipaddrGw;

    if (netif == LW_NULL) {
        return;
    }
    
    ipaddrInet = netif->ip_addr;
    ipaddrMask = netif->netmask;
    ipaddrGw   = netif->gw;

    if (lib_strcmp(pcItem, "inet") == 0) {
        netifapi_netif_set_addr(netif, &ipaddr, &ipaddrMask, &ipaddrGw);
    } else if (lib_strcmp(pcItem, "netmask") == 0) {
        netifapi_netif_set_addr(netif, &ipaddrInet, &ipaddr, &ipaddrGw);
    } else if (lib_strcmp(pcItem, "gateway") == 0) {
        netifapi_netif_set_addr(netif, &ipaddrInet, &ipaddrMask, &ipaddr);
    } else {
        fprintf(stderr, "argments error!\n");
    }
}
示例#5
0
/**
 * LwIP system initialization
 */
int lwip_system_init(void)
{
    rt_err_t rc;
    struct rt_semaphore done_sem;

    /* set default netif to NULL */
    netif_default = RT_NULL;

    rc = rt_sem_init(&done_sem, "done", 0, RT_IPC_FLAG_FIFO);

    if (rc != RT_EOK)
    {
        LWIP_ASSERT("Failed to create semaphore", 0);

        return -1;
    }

    tcpip_init(tcpip_init_done_callback, (void *)&done_sem);

    /* waiting for initialization done */
    if (rt_sem_take(&done_sem, RT_WAITING_FOREVER) != RT_EOK)
    {
        rt_sem_detach(&done_sem);

        return -1;
    }
    rt_sem_detach(&done_sem);

    /* set default ip address */
#if !LWIP_DHCP 
    if (netif_default != RT_NULL)
    {
        struct ip_addr ipaddr, netmask, gw;

        IP4_ADDR(&ipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3);
        IP4_ADDR(&gw, RT_LWIP_GWADDR0, RT_LWIP_GWADDR1, RT_LWIP_GWADDR2, RT_LWIP_GWADDR3);
        IP4_ADDR(&netmask, RT_LWIP_MSKADDR0, RT_LWIP_MSKADDR1, RT_LWIP_MSKADDR2, RT_LWIP_MSKADDR3);

        netifapi_netif_set_addr(netif_default, &ipaddr, &netmask, &gw);
    }
#endif
	rt_kprintf("lwIP-%d.%d.%d initialized!\n", LWIP_VERSION_MAJOR, LWIP_VERSION_MINOR, LWIP_VERSION_REVISION);

	return 0;
}
示例#6
0
/**
 * LwIP system initialization
 */
void lwip_system_init(void)
{
	rt_err_t rc;
	struct rt_semaphore done_sem;

	rc = rt_sem_init(&done_sem, "done", 0, RT_IPC_FLAG_FIFO);

	if(rc != RT_EOK)
	{
    	LWIP_ASSERT("Failed to create semaphore", 0);
		return;
	}

	tcpip_init(tcpip_init_done_callback,(void *)&done_sem);

	/* waiting for initialization done */
	if (rt_sem_take(&done_sem, RT_WAITING_FOREVER) != RT_EOK)
	{
		rt_sem_detach(&done_sem);
		return;
	}
	rt_sem_detach(&done_sem);

	/* set default ip address */
#if !LWIP_DHCP
	{
		struct ip_addr ipaddr, netmask, gw;

		IP4_ADDR(&ipaddr, RT_LWIP_IPADDR0, RT_LWIP_IPADDR1, RT_LWIP_IPADDR2, RT_LWIP_IPADDR3);
		IP4_ADDR(&gw, RT_LWIP_GWADDR0, RT_LWIP_GWADDR1, RT_LWIP_GWADDR2, RT_LWIP_GWADDR3);
		IP4_ADDR(&netmask, RT_LWIP_MSKADDR0, RT_LWIP_MSKADDR1, RT_LWIP_MSKADDR2, RT_LWIP_MSKADDR3);

		netifapi_netif_set_addr(netif_default, &ipaddr, &netmask, &gw);
	}
#endif
}
示例#7
0
err_t tls_netif2_set_addr(ip_addr_t *ipaddr,
                          ip_addr_t *netmask,
                          ip_addr_t *gw)
{
    return netifapi_netif_set_addr(nif->next, ipaddr, netmask, gw);
}