diff -uNrp 2009_0918_RT2860_Linux_STA_v2.2.0.0.orig/include/rtmp_os.h 2009_0918_RT2860_Linux_STA_v2.2.0.0/include/rtmp_os.h
--- 2009_0918_RT2860_Linux_STA_v2.2.0.0.orig/include/rtmp_os.h	2009-11-21 17:13:28.039532271 +0900
+++ 2009_0918_RT2860_Linux_STA_v2.2.0.0/include/rtmp_os.h	2009-11-21 17:03:01.613890031 +0900
@@ -53,7 +53,7 @@
 */
 typedef struct _RTMP_OS_NETDEV_OP_HOOK_
 {
-	void			*open;
+/*	void			*open;
 	void			*stop;
 	void			*xmit;
 	void			*ioctl;
@@ -63,6 +63,8 @@ typedef struct _RTMP_OS_NETDEV_OP_HOOK_
 	unsigned char devAddr[6];
 	unsigned char	devName[16];
 	unsigned char	needProtcted;
+*/
+	struct net_device_ops *netdev_ops;
 }RTMP_OS_NETDEV_OP_HOOK, *PRTMP_OS_NETDEV_OP_HOOK;
 
 
diff -uNrp 2009_0918_RT2860_Linux_STA_v2.2.0.0.orig/os/linux/rt_linux.c 2009_0918_RT2860_Linux_STA_v2.2.0.0/os/linux/rt_linux.c
--- 2009_0918_RT2860_Linux_STA_v2.2.0.0.orig/os/linux/rt_linux.c	2009-11-21 17:13:28.074767868 +0900
+++ 2009_0918_RT2860_Linux_STA_v2.2.0.0/os/linux/rt_linux.c	2009-11-21 17:08:44.069889219 +0900
@@ -1686,10 +1686,13 @@ int RtmpOSNetDevAttach(
 		PRTMP_ADAPTER pAd = NULL;
 	
 		GET_PAD_FROM_NET_DEV(pAd, pNetDev);	
+		pNetDev->netdev_ops = pDevOpHook->netdev_ops;
+/*
 		pNetDev->open			= pDevOpHook->open;
 		pNetDev->stop			= pDevOpHook->stop;
 		pNetDev->hard_start_xmit	= (HARD_START_XMIT_FUNC)(pDevOpHook->xmit);
 		pNetDev->do_ioctl		= pDevOpHook->ioctl;
+*/
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
 		pNetDev->ethtool_ops = &RALINK_Ethtool_Ops;
@@ -1698,11 +1701,12 @@ int RtmpOSNetDevAttach(
 		/* if you don't implement get_stats, just leave the callback function as NULL, a dummy 
 		     function will make kernel panic.
 		*/
-		if (pDevOpHook->get_stats)
+		/*if (pDevOpHook->get_stats)
 			pNetDev->get_stats = pDevOpHook->get_stats;
+		*/
 
 		/* OS specific flags, here we used to indicate if we are virtual interface */
-		pNetDev->priv_flags = pDevOpHook->priv_flags; 
+		// pNetDev->priv_flags = pDevOpHook->priv_flags; 
 
 #if (WIRELESS_EXT < 21) && (WIRELESS_EXT >= 12)
 		pNetDev->get_wireless_stats = rt28xx_get_wireless_stats;
@@ -1727,14 +1731,16 @@ int RtmpOSNetDevAttach(
 #endif // CONFIG_APSTA_MIXED_SUPPORT //
 
 		// copy the net device mac address to the net_device structure.
-		NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], MAC_ADDR_LEN);
+		// NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], MAC_ADDR_LEN);
 
-		rtnl_locked = pDevOpHook->needProtcted;
+		// rtnl_locked = pDevOpHook->needProtcted;
 	}
 
+/*
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
 	pNetDev->validate_addr = NULL;
 #endif
+*/
 
 	if (rtnl_locked)
 		ret = register_netdevice(pNetDev);
diff -uNrp 2009_0918_RT2860_Linux_STA_v2.2.0.0.orig/os/linux/rt_main_dev.c 2009_0918_RT2860_Linux_STA_v2.2.0.0/os/linux/rt_main_dev.c
--- 2009_0918_RT2860_Linux_STA_v2.2.0.0.orig/os/linux/rt_main_dev.c	2009-11-21 17:13:28.077514045 +0900
+++ 2009_0918_RT2860_Linux_STA_v2.2.0.0/os/linux/rt_main_dev.c	2009-11-21 17:12:26.665764759 +0900
@@ -538,6 +538,20 @@ err:
 	return (-1);
 } /* End of rt28xx_open */
 
+static const struct net_device_ops rt2870_netdev_ops = {
+	.ndo_open               = MainVirtualIF_open,//
+	.ndo_stop               = MainVirtualIF_close,//
+	.ndo_do_ioctl           = rt28xx_ioctl,//
+	.ndo_get_stats          = RT28xx_get_ether_stats,//
+	.ndo_validate_addr      = NULL,
+	.ndo_set_mac_address    = eth_mac_addr,
+	.ndo_change_mtu         = eth_change_mtu,
+#ifdef IKANOS_VX_1X0
+	.ndo_start_xmit         = IKANOS_DataFramesTx,//
+#else
+	.ndo_start_xmit         = rt28xx_send_packets,//
+#endif
+};
 
 PNET_DEV RtmpPhyNetDevInit(
 	IN RTMP_ADAPTER *pAd,
@@ -554,6 +568,8 @@ PNET_DEV RtmpPhyNetDevInit(
 	}
 
 	NdisZeroMemory((unsigned char *)pNetDevHook, sizeof(RTMP_OS_NETDEV_OP_HOOK));
+	pNetDevHook->netdev_ops = &rt2870_netdev_ops;
+/*
 	pNetDevHook->open = MainVirtualIF_open;
 	pNetDevHook->stop = MainVirtualIF_close;
 	pNetDevHook->xmit = rt28xx_send_packets;
@@ -565,6 +581,7 @@ PNET_DEV RtmpPhyNetDevInit(
 	pNetDevHook->get_stats = RT28xx_get_ether_stats;
 
 	pNetDevHook->needProtcted = FALSE;
+*/
 
 	RTMP_OS_NETDEV_SET_PRIV(net_dev, pAd);
 	pAd->net_dev = net_dev;
