Changeset 18973 in vbox for trunk/src/VBox/HostDrivers/VBoxNetFlt/linux
- Timestamp:
- Apr 17, 2009 6:59:16 AM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 46057
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
r18706 r18973 28 28 #include <linux/etherdevice.h> 29 29 #include <linux/rtnetlink.h> 30 #include <linux/miscdevice.h> 30 31 31 32 #define LOG_GROUP LOG_GROUP_NET_FLT_DRV … … 157 158 static VBOXNETFLTGLOBALS g_VBoxNetFltGlobals; 158 159 159 160 /*161 * NetAdp-related part162 */163 164 #define VBOX_NETADP_NAME "vboxnet%d"165 166 struct net_device *g_pNetDev;167 168 struct VBoxNetAdpPriv169 {170 struct net_device_stats Stats;171 };172 typedef struct VBoxNetAdpPriv VBOXNETADPPRIV;173 typedef VBOXNETADPPRIV *PVBOXNETADPPRIV;174 175 static int vboxNetAdpOpen(struct net_device *pNetDev)176 {177 netif_start_queue(pNetDev);178 printk("vboxNetAdpOpen returns 0\n");179 return 0;180 }181 182 static int vboxNetAdpStop(struct net_device *pNetDev)183 {184 netif_stop_queue(pNetDev);185 return 0;186 }187 188 static int vboxNetAdpXmit(struct sk_buff *pSkb, struct net_device *pNetDev)189 {190 PVBOXNETADPPRIV pPriv = netdev_priv(pNetDev);191 192 /* Update the stats. */193 pPriv->Stats.tx_packets++;194 pPriv->Stats.tx_bytes += pSkb->len;195 /* Update transmission time stamp. */196 pNetDev->trans_start = jiffies;197 /* Nothing else to do, just free the sk_buff. */198 dev_kfree_skb(pSkb);199 return 0;200 }201 202 struct net_device_stats *vboxNetAdpGetStats(struct net_device *pNetDev)203 {204 PVBOXNETADPPRIV pPriv = netdev_priv(pNetDev);205 return &pPriv->Stats;206 }207 208 /* Currently not referenced in vboxNetAdpNetDevInit209 static int vboxNetAdpValidateAddr(struct net_device *dev)210 {211 Log(("vboxNetAdpValidateAddr: %02x:%02x:%02x:%02x:%02x:%02x\n",212 dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],213 dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]));214 return -EADDRNOTAVAIL;215 } */216 217 static void vboxNetAdpNetDevInit(struct net_device *pNetDev)218 {219 PVBOXNETADPPRIV pPriv;220 221 ether_setup(pNetDev);222 /// @todo Use Sun vendor id223 memcpy(pNetDev->dev_addr, "\0vbnet", ETH_ALEN);224 Log(("vboxNetAdpNetDevInit: pNetDev->dev_addr = %.6Rhxd\n", pNetDev->dev_addr));225 pNetDev->open = vboxNetAdpOpen;226 pNetDev->stop = vboxNetAdpStop;227 pNetDev->hard_start_xmit = vboxNetAdpXmit;228 pNetDev->get_stats = vboxNetAdpGetStats;229 //pNetDev->validate_addr = vboxNetAdpValidateAddr;230 /* pNetDev-> = vboxNetAdp;231 pNetDev-> = vboxNetAdp;232 pNetDev-> = vboxNetAdp;233 pNetDev-> = vboxNetAdp;234 pNetDev-> = vboxNetAdp;*/235 236 pPriv = netdev_priv(pNetDev);237 memset(pPriv, 0, sizeof(*pPriv));238 }239 240 static int vboxNetAdpRegisterNetDev(void)241 {242 int rc = VINF_SUCCESS;243 struct net_device *pNetDev;244 245 /* No need for private data. */246 pNetDev = alloc_netdev(sizeof(VBOXNETADPPRIV), VBOX_NETADP_NAME, vboxNetAdpNetDevInit);247 if (pNetDev)248 {249 int err = register_netdev(pNetDev);250 if (!err)251 {252 g_pNetDev = pNetDev;253 return VINF_SUCCESS;254 }255 free_netdev(pNetDev);256 rc = RTErrConvertFromErrno(err);257 }258 return rc;259 }260 261 static int vboxNetAdpUnregisterNetDev(void)262 {263 unregister_netdev(g_pNetDev);264 free_netdev(g_pNetDev);265 g_pNetDev = NULL;266 return VINF_SUCCESS;267 }268 269 160 /** 270 161 * Initialize module. … … 301 192 if (RT_SUCCESS(rc)) 302 193 { 303 rc = vboxNetAdpRegisterNetDev(); 304 if (RT_SUCCESS(rc)) 305 { 306 LogRel(("VBoxNetFlt: Successfully started.\n")); 307 return 0; 308 } 309 else 310 LogRel(("VBoxNetFlt: failed to register device (rc=%d)\n", rc)); 194 LogRel(("VBoxNetFlt: Successfully started.\n")); 195 return 0; 311 196 } 312 197 else … … 336 221 * Undo the work done during start (in reverse order). 337 222 */ 338 rc = vboxNetAdpUnregisterNetDev();339 AssertRC(rc);340 223 rc = vboxNetFltTryDeleteIdcAndGlobals(&g_VBoxNetFltGlobals); 341 224 AssertRC(rc); NOREF(rc);
Note:
See TracChangeset
for help on using the changeset viewer.