示例#1
0
/*
* Jeff: this function should be called under ioctl (rtnl_lock is accquired) while
* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
*/
int rtw_change_ifname(_adapter *padapter, const char *ifname)
{
	struct net_device *pnetdev;
	struct net_device *cur_pnetdev;
	struct rereg_nd_name_data *rereg_priv;
	int ret;

	if(!padapter)
		goto error;

	cur_pnetdev = padapter->pnetdev;
	rereg_priv = &padapter->rereg_nd_name_priv;

	//free the old_pnetdev
	if(rereg_priv->old_pnetdev) {
		free_netdev(rereg_priv->old_pnetdev);
		rereg_priv->old_pnetdev = NULL;
	}

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
	if(!rtnl_is_locked())
		unregister_netdev(cur_pnetdev);
	else
#endif
		unregister_netdevice(cur_pnetdev);

	rereg_priv->old_pnetdev=cur_pnetdev;

	pnetdev = rtw_init_netdev(padapter);
	if (!pnetdev)  {
		ret = -1;
		goto error;
	}

	SET_NETDEV_DEV(pnetdev, dvobj_to_dev(adapter_to_dvobj(padapter)));

	rtw_init_netdev_name(pnetdev, ifname);

	_rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
	if(!rtnl_is_locked())
		ret = register_netdev(pnetdev);
	else
#endif
		ret = register_netdevice(pnetdev);

	if ( ret != 0) {
		RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
		goto error;
	}

	return 0;

error:

	return -1;

}
int rtw_change_ifname(struct adapter *padapter, const char *ifname)
{
	struct net_device *pnetdev;
	struct net_device *cur_pnetdev;
	struct rereg_nd_name_data *rereg_priv;
	int ret;

	if (!padapter)
		goto error;

	cur_pnetdev = padapter->pnetdev;
	rereg_priv = &padapter->rereg_nd_name_priv;

	/* free the old_pnetdev */
	if (rereg_priv->old_pnetdev) {
		free_netdev(rereg_priv->old_pnetdev);
		rereg_priv->old_pnetdev = NULL;
	}

	if (!rtnl_is_locked())
		unregister_netdev(cur_pnetdev);
	else
		unregister_netdevice(cur_pnetdev);

	rtw_proc_remove_one(cur_pnetdev);

	rereg_priv->old_pnetdev = cur_pnetdev;

	pnetdev = rtw_init_netdev(padapter);
	if (!pnetdev)  {
		ret = -1;
		goto error;
	}

	SET_NETDEV_DEV(pnetdev, dvobj_to_dev(adapter_to_dvobj(padapter)));

	rtw_init_netdev_name(pnetdev, ifname);

	memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);

	if (!rtnl_is_locked())
		ret = register_netdev(pnetdev);
	else
		ret = register_netdevice(pnetdev);
	if (ret != 0) {
		RT_TRACE(_module_hci_intfs_c_, _drv_err_,
			 ("register_netdev() failed\n"));
		goto error;
	}
	rtw_proc_init_one(pnetdev);
	return 0;
error:
	return -1;
}
示例#3
0
/**
*  @brief 	ATWILC_WFI_deinit_mon_interface
*  @details 	
*  @param[in]   
*  @return 	int : Return 0 on Success
*  @author	mdaftedar
*  @date	12 JUL 2012	
*  @version	1.0
*/
int ATWILC_WFI_deinit_mon_interface()
{
	bool rollback_lock = false;
		
	if(atwilc_wfi_mon != NULL)
	{
		PRINT_D(HOSTAPD_DBG,"In Deinit monitor interface\n");
		PRINT_D(HOSTAPD_DBG,"RTNL is being locked\n");
		if (rtnl_is_locked()) 
                {
			rtnl_unlock();
			rollback_lock = true;
		}
		PRINT_D(HOSTAPD_DBG,"Unregister netdev\n");
		unregister_netdev(atwilc_wfi_mon);
		//ATL_PRINTF("Free Netdev\n");
		//free_netdev(atwilc_wfi_mon);
		
		if (rollback_lock) 
		{
			rtnl_lock();
			rollback_lock = false;
		}
		atwilc_wfi_mon = NULL;
	}
	return ATL_SUCCESS;
	
}
示例#4
0
文件: adf_net.c 项目: KHATEEBNSIT/AP
/**
 * @brief remove the device
 * @param hdl
 */
a_status_t
__adf_net_delete_dev(adf_net_handle_t hdl)
{    
    __adf_softc_t *sc = hdl_to_softc(hdl);

    __adf_net_stop(sc->netdev);
    
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
    if (rtnl_is_locked())
        unregister_netdevice(sc->netdev);
    else
#endif        
        unregister_netdev(sc->netdev);
    
    return A_STATUS_OK;
}
示例#5
0
void wilc_wfi_deinit_mon_interface(void)
{
	bool rollback_lock = false;

	if (wilc_wfi_mon) {
		if (rtnl_is_locked()) {
			rtnl_unlock();
			rollback_lock = true;
		}
		unregister_netdev(wilc_wfi_mon);

		if (rollback_lock) {
			rtnl_lock();
			rollback_lock = false;
		}
		wilc_wfi_mon = NULL;
	}
}
示例#6
0
/*
* Jeff: this function should be called under ioctl (rtnl_lock is accquired) while 
* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
*/
int rtw_change_ifname(_adapter *padapter, const char *ifname)
{
	struct net_device *pnetdev;
	struct net_device *cur_pnetdev = padapter->pnetdev;
	struct rereg_nd_name_data *rereg_priv;
	int ret;

	if(!padapter)
		goto error;

	rereg_priv = &padapter->rereg_nd_name_priv;
	
	//free the old_pnetdev
	if(rereg_priv->old_pnetdev) {
		free_netdev(rereg_priv->old_pnetdev);
		rereg_priv->old_pnetdev = NULL;
	}

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
	if(!rtnl_is_locked())
		unregister_netdev(cur_pnetdev);
	else
#endif
		unregister_netdevice(cur_pnetdev);

	#ifdef CONFIG_PROC_DEBUG
	rtw_proc_remove_one(cur_pnetdev);
	#endif //CONFIG_PROC_DEBUG

	rereg_priv->old_pnetdev=cur_pnetdev;

	pnetdev = rtw_init_netdev(padapter);
	if (!pnetdev)  {
		ret = -1;
		goto error;
	}

#ifdef CONFIG_USB_HCI

	SET_NETDEV_DEV(pnetdev, &padapter->dvobjpriv.pusbintf->dev);

	usb_set_intfdata(padapter->dvobjpriv.pusbintf, pnetdev);

#elif defined(CONFIG_PCI_HCI)

#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
	SET_NETDEV_DEV(pnetdev, &padapter->dvobjpriv.ppcidev->dev);
#endif

	pci_set_drvdata(padapter->dvobjpriv.ppcidev, pnetdev);

#endif

	rtw_init_netdev_name(pnetdev, ifname);

	_rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26))
	if(!rtnl_is_locked())
		ret = register_netdev(pnetdev);
	else
#endif
		ret = register_netdevice(pnetdev);

	if ( ret != 0) {
		RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
		goto error;
	}

	#ifdef CONFIG_PROC_DEBUG
	rtw_proc_init_one(pnetdev);
	#endif //CONFIG_PROC_DEBUG

	return 0;

error:
	
	return -1;
	
}
示例#7
0
文件: adf_net.c 项目: KHATEEBNSIT/AP
/**
 * @brief Create a VAP networking device
 * 
 * @param hdl
 * @param op
 * @param info
 * 
 * @return adf_net_handle_t
 */
adf_net_handle_t
__adf_net_create_vapdev(adf_drv_handle_t        hdl, adf_dev_sw_t   *op,
                        adf_net_dev_info_t     *info, void          *vap_cfg)
{
    __adf_softc_t      *sc      = NULL;
    struct net_device  *netdev  = NULL;
    int                 error   = 0;

    netdev = alloc_netdev(sizeof(struct __adf_softc), info->if_name,
                          ether_setup);
    
    if (!netdev) return NULL;

    sc              = netdev_to_softc(netdev);
    sc->netdev      = netdev;
    sc->sw          = *op;
    sc->drv_hdl     = hdl;
    sc->vlgrp       = NULL; /*Not part of any VLAN*/
    sc->vid         = 0;
    sc->cfg_api     = vap_cfg; 

    netdev->watchdog_timeo      = ADF_DEF_TX_TIMEOUT * HZ;
    netdev->features           |= ( NETIF_F_HW_VLAN_FILTER | 
                                    NETIF_F_HW_VLAN_RX | 
                                    NETIF_F_HW_VLAN_TX );

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
    netdev->netdev_ops          = &__adf_net_vapdev_ops;
#else
    netdev->open                = __adf_net_open;
    netdev->stop                = __adf_net_stop;
    netdev->hard_start_xmit     = __adf_net_start_tx;
    netdev->do_ioctl            = __adf_net_vap_ioctl;
    netdev->vlan_rx_register    = __adf_net_vlan_register;
    netdev->vlan_rx_add_vid     = __adf_net_vlan_add;
    netdev->vlan_rx_kill_vid    = __adf_net_vlan_del;
    netdev->get_stats           = __adf_net_get_stats;
    netdev->set_mac_address     = __adf_net_set_vapaddr;
#endif
    
    netdev->destructor          = __adf_net_free_netdev;
    netdev->hard_header_len     = info->header_len ;
    netdev->wireless_handlers   = __adf_net_iwget_vap();

    if(!is_valid_ether_addr(info->dev_addr)){
        printk("ADF_NET:invalid MAC address\n");
        error = EINVAL;
    }
    
    adf_os_assert(is_valid_ether_addr(info->dev_addr));

    memcpy(netdev->dev_addr, info->dev_addr, ADF_NET_MAC_ADDR_MAX_LEN);
    memcpy(netdev->perm_addr, info->dev_addr, ADF_NET_MAC_ADDR_MAX_LEN);

    /**
     * make sure nothing's on before open
     */
    netif_stop_queue(netdev);

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30)
    if(rtnl_is_locked())
        error = register_netdevice(netdev) ;
    else
#endif        
        error = register_netdev(netdev) ;
    
    adf_os_assert(!error);

    return (adf_net_handle_t)sc;
}