/* * 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; }
/** * @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; }
/** * @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; }
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; } }
/* * 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; }
/** * @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; }