vlan.c (c1d3ee9925ca714a5ed3f8fce01a7027137f4e3f) | vlan.c (e89fe42cd03c8fd3686df82d8390a235717a66de) |
---|---|
1/* 2 * INET 802.1Q VLAN 3 * Ethernet-type device handling. 4 * 5 * Authors: Ben Greear <greearb@candelatech.com> 6 * Please send support related email to: vlan@scry.wanfear.com 7 * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html 8 * --- 433 unchanged lines hidden (view full) --- 442 /* was already registered. */ 443 printk(VLAN_DBG "%s: ALREADY had VLAN registered\n", __FUNCTION__); 444 return -EEXIST; 445 } 446 447 return 0; 448} 449 | 1/* 2 * INET 802.1Q VLAN 3 * Ethernet-type device handling. 4 * 5 * Authors: Ben Greear <greearb@candelatech.com> 6 * Please send support related email to: vlan@scry.wanfear.com 7 * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html 8 * --- 433 unchanged lines hidden (view full) --- 442 /* was already registered. */ 443 printk(VLAN_DBG "%s: ALREADY had VLAN registered\n", __FUNCTION__); 444 return -EEXIST; 445 } 446 447 return 0; 448} 449 |
450static int register_vlan_dev(struct net_device *dev) 451{ 452 struct vlan_dev_info *vlan = VLAN_DEV_INFO(dev); 453 struct net_device *real_dev = vlan->real_dev; 454 unsigned short vlan_id = vlan->vlan_id; 455 struct vlan_group *grp, *ngrp = NULL; 456 int err; 457 458 grp = __vlan_find_group(real_dev->ifindex); 459 if (!grp) { 460 ngrp = grp = vlan_group_alloc(real_dev->ifindex); 461 if (!grp) 462 return -ENOBUFS; 463 } 464 465 err = register_netdevice(dev); 466 if (err < 0) 467 goto out_free_group; 468 469 /* Account for reference in struct vlan_dev_info */ 470 dev_hold(real_dev); 471 472 vlan_transfer_operstate(real_dev, dev); 473 linkwatch_fire_event(dev); /* _MUST_ call rfc2863_policy() */ 474 475 /* So, got the sucker initialized, now lets place 476 * it into our local structure. 477 */ 478 vlan_group_set_device(grp, vlan_id, dev); 479 if (ngrp && real_dev->features & NETIF_F_HW_VLAN_RX) 480 real_dev->vlan_rx_register(real_dev, ngrp); 481 if (real_dev->features & NETIF_F_HW_VLAN_FILTER) 482 real_dev->vlan_rx_add_vid(real_dev, vlan_id); 483 484 if (vlan_proc_add_dev(dev) < 0) 485 printk(KERN_WARNING "VLAN: failed to add proc entry for %s\n", 486 dev->name); 487 return 0; 488 489out_free_group: 490 if (ngrp) 491 vlan_group_free(ngrp); 492 return err; 493} 494 |
|
450/* Attach a VLAN device to a mac address (ie Ethernet Card). 451 * Returns the device that was created, or NULL if there was 452 * an error of some kind. 453 */ 454static struct net_device *register_vlan_device(struct net_device *real_dev, 455 unsigned short VLAN_ID) 456{ | 495/* Attach a VLAN device to a mac address (ie Ethernet Card). 496 * Returns the device that was created, or NULL if there was 497 * an error of some kind. 498 */ 499static struct net_device *register_vlan_device(struct net_device *real_dev, 500 unsigned short VLAN_ID) 501{ |
457 struct vlan_group *grp, *ngrp = NULL; | |
458 struct net_device *new_dev; 459 char name[IFNAMSIZ]; 460 461#ifdef VLAN_DEBUG 462 printk(VLAN_DBG "%s: if_name -:%s:- vid: %i\n", 463 __FUNCTION__, eth_IF_name, VLAN_ID); 464#endif 465 --- 51 unchanged lines hidden (view full) --- 517 sizeof(struct vlan_dev_info)); 518#endif 519 520 VLAN_DEV_INFO(new_dev)->vlan_id = VLAN_ID; /* 1 through VLAN_VID_MASK */ 521 VLAN_DEV_INFO(new_dev)->real_dev = real_dev; 522 VLAN_DEV_INFO(new_dev)->dent = NULL; 523 VLAN_DEV_INFO(new_dev)->flags = 1; 524 | 502 struct net_device *new_dev; 503 char name[IFNAMSIZ]; 504 505#ifdef VLAN_DEBUG 506 printk(VLAN_DBG "%s: if_name -:%s:- vid: %i\n", 507 __FUNCTION__, eth_IF_name, VLAN_ID); 508#endif 509 --- 51 unchanged lines hidden (view full) --- 561 sizeof(struct vlan_dev_info)); 562#endif 563 564 VLAN_DEV_INFO(new_dev)->vlan_id = VLAN_ID; /* 1 through VLAN_VID_MASK */ 565 VLAN_DEV_INFO(new_dev)->real_dev = real_dev; 566 VLAN_DEV_INFO(new_dev)->dent = NULL; 567 VLAN_DEV_INFO(new_dev)->flags = 1; 568 |
525#ifdef VLAN_DEBUG 526 printk(VLAN_DBG "About to go find the group for idx: %i\n", 527 real_dev->ifindex); 528#endif 529 grp = __vlan_find_group(real_dev->ifindex); 530 if (!grp) { 531 ngrp = grp = vlan_group_alloc(real_dev->ifindex); 532 if (!grp) 533 goto out_free_newdev; 534 } | 569 if (register_vlan_dev(new_dev) < 0) 570 goto out_free_newdev; |
535 | 571 |
536 if (register_netdevice(new_dev)) 537 goto out_free_group; 538 539 vlan_transfer_operstate(real_dev, new_dev); 540 linkwatch_fire_event(new_dev); /* _MUST_ call rfc2863_policy() */ 541 542 /* So, got the sucker initialized, now lets place 543 * it into our local structure. 544 */ 545 if (ngrp && real_dev->features & NETIF_F_HW_VLAN_RX) 546 real_dev->vlan_rx_register(real_dev, ngrp); 547 548 vlan_group_set_device(grp, VLAN_ID, new_dev); 549 550 if (vlan_proc_add_dev(new_dev)<0)/* create it's proc entry */ 551 printk(KERN_WARNING "VLAN: failed to add proc entry for %s\n", 552 new_dev->name); 553 554 if (real_dev->features & NETIF_F_HW_VLAN_FILTER) 555 real_dev->vlan_rx_add_vid(real_dev, VLAN_ID); 556 | |
557 /* Account for reference in struct vlan_dev_info */ 558 dev_hold(real_dev); 559#ifdef VLAN_DEBUG 560 printk(VLAN_DBG "Allocated new device successfully, returning.\n"); 561#endif 562 return new_dev; 563 | 572 /* Account for reference in struct vlan_dev_info */ 573 dev_hold(real_dev); 574#ifdef VLAN_DEBUG 575 printk(VLAN_DBG "Allocated new device successfully, returning.\n"); 576#endif 577 return new_dev; 578 |
564out_free_group: 565 if (ngrp) 566 vlan_group_free(ngrp); 567 | |
568out_free_newdev: 569 free_netdev(new_dev); 570 571out_ret_null: 572 return NULL; 573} 574 575static int vlan_device_event(struct notifier_block *unused, unsigned long event, void *ptr) --- 234 unchanged lines hidden --- | 579out_free_newdev: 580 free_netdev(new_dev); 581 582out_ret_null: 583 return NULL; 584} 585 586static int vlan_device_event(struct notifier_block *unused, unsigned long event, void *ptr) --- 234 unchanged lines hidden --- |