diff options
Diffstat (limited to 'include/linux/netdevice.h')
| -rw-r--r-- | include/linux/netdevice.h | 232 |
1 files changed, 168 insertions, 64 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 12d7f4469dc9..9060f5f3517a 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -451,6 +451,131 @@ struct netdev_queue { | |||
| 451 | struct Qdisc *qdisc_sleeping; | 451 | struct Qdisc *qdisc_sleeping; |
| 452 | } ____cacheline_aligned_in_smp; | 452 | } ____cacheline_aligned_in_smp; |
| 453 | 453 | ||
| 454 | |||
| 455 | /* | ||
| 456 | * This structure defines the management hooks for network devices. | ||
| 457 | * The following hooks can bed defined and are optonal (can be null) | ||
| 458 | * unless otherwise noted. | ||
| 459 | * | ||
| 460 | * int (*ndo_init)(struct net_device *dev); | ||
| 461 | * This function is called once when network device is registered. | ||
| 462 | * The network device can use this to any late stage initializaton | ||
| 463 | * or semantic validattion. It can fail with an error code which will | ||
| 464 | * be propogated back to register_netdev | ||
| 465 | * | ||
| 466 | * void (*ndo_uninit)(struct net_device *dev); | ||
| 467 | * This function is called when device is unregistered or when registration | ||
| 468 | * fails. It is not called if init fails. | ||
| 469 | * | ||
| 470 | * int (*ndo_open)(struct net_device *dev); | ||
| 471 | * This function is called when network device transistions to the up | ||
| 472 | * state. | ||
| 473 | * | ||
| 474 | * int (*ndo_stop)(struct net_device *dev); | ||
| 475 | * This function is called when network device transistions to the down | ||
| 476 | * state. | ||
| 477 | * | ||
| 478 | * void (*ndo_change_rx_flags)(struct net_device *dev, int flags); | ||
| 479 | * This function is called to allow device receiver to make | ||
| 480 | * changes to configuration when multicast or promiscious is enabled. | ||
| 481 | * | ||
| 482 | * void (*ndo_set_rx_mode)(struct net_device *dev); | ||
| 483 | * This function is called device changes address list filtering. | ||
| 484 | * | ||
| 485 | * void (*ndo_set_multicast_list)(struct net_device *dev); | ||
| 486 | * This function is called when the multicast address list changes. | ||
| 487 | * | ||
| 488 | * int (*ndo_set_mac_address)(struct net_device *dev, void *addr); | ||
| 489 | * This function is called when the Media Access Control address | ||
| 490 | * needs to be changed. If not this interface is not defined, the | ||
| 491 | * mac address can not be changed. | ||
| 492 | * | ||
| 493 | * int (*ndo_validate_addr)(struct net_device *dev); | ||
| 494 | * Test if Media Access Control address is valid for the device. | ||
| 495 | * | ||
| 496 | * int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd); | ||
| 497 | * Called when a user request an ioctl which can't be handled by | ||
| 498 | * the generic interface code. If not defined ioctl's return | ||
| 499 | * not supported error code. | ||
| 500 | * | ||
| 501 | * int (*ndo_set_config)(struct net_device *dev, struct ifmap *map); | ||
| 502 | * Used to set network devices bus interface parameters. This interface | ||
| 503 | * is retained for legacy reason, new devices should use the bus | ||
| 504 | * interface (PCI) for low level management. | ||
| 505 | * | ||
| 506 | * int (*ndo_change_mtu)(struct net_device *dev, int new_mtu); | ||
| 507 | * Called when a user wants to change the Maximum Transfer Unit | ||
| 508 | * of a device. If not defined, any request to change MTU will | ||
| 509 | * will return an error. | ||
| 510 | * | ||
| 511 | * void (*ndo_tx_timeout) (struct net_device *dev); | ||
| 512 | * Callback uses when the transmitter has not made any progress | ||
| 513 | * for dev->watchdog ticks. | ||
| 514 | * | ||
| 515 | * struct net_device_stats* (*get_stats)(struct net_device *dev); | ||
| 516 | * Called when a user wants to get the network device usage | ||
| 517 | * statistics. If not defined, the counters in dev->stats will | ||
| 518 | * be used. | ||
| 519 | * | ||
| 520 | * void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp); | ||
| 521 | * If device support VLAN receive accleration | ||
| 522 | * (ie. dev->features & NETIF_F_HW_VLAN_RX), then this function is called | ||
| 523 | * when vlan groups for the device changes. Note: grp is NULL | ||
| 524 | * if no vlan's groups are being used. | ||
| 525 | * | ||
| 526 | * void (*ndo_vlan_rx_add_vid)(struct net_device *dev, unsigned short vid); | ||
| 527 | * If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER) | ||
| 528 | * this function is called when a VLAN id is registered. | ||
| 529 | * | ||
| 530 | * void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, unsigned short vid); | ||
| 531 | * If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER) | ||
| 532 | * this function is called when a VLAN id is unregistered. | ||
| 533 | * | ||
| 534 | * void (*ndo_poll_controller)(struct net_device *dev); | ||
| 535 | */ | ||
| 536 | struct net_device_ops { | ||
| 537 | int (*ndo_init)(struct net_device *dev); | ||
| 538 | void (*ndo_uninit)(struct net_device *dev); | ||
| 539 | int (*ndo_open)(struct net_device *dev); | ||
| 540 | int (*ndo_stop)(struct net_device *dev); | ||
| 541 | #define HAVE_CHANGE_RX_FLAGS | ||
| 542 | void (*ndo_change_rx_flags)(struct net_device *dev, | ||
| 543 | int flags); | ||
| 544 | #define HAVE_SET_RX_MODE | ||
| 545 | void (*ndo_set_rx_mode)(struct net_device *dev); | ||
| 546 | #define HAVE_MULTICAST | ||
| 547 | void (*ndo_set_multicast_list)(struct net_device *dev); | ||
| 548 | #define HAVE_SET_MAC_ADDR | ||
| 549 | int (*ndo_set_mac_address)(struct net_device *dev, | ||
| 550 | void *addr); | ||
| 551 | #define HAVE_VALIDATE_ADDR | ||
| 552 | int (*ndo_validate_addr)(struct net_device *dev); | ||
| 553 | #define HAVE_PRIVATE_IOCTL | ||
| 554 | int (*ndo_do_ioctl)(struct net_device *dev, | ||
| 555 | struct ifreq *ifr, int cmd); | ||
| 556 | #define HAVE_SET_CONFIG | ||
| 557 | int (*ndo_set_config)(struct net_device *dev, | ||
| 558 | struct ifmap *map); | ||
| 559 | #define HAVE_CHANGE_MTU | ||
| 560 | int (*ndo_change_mtu)(struct net_device *dev, int new_mtu); | ||
| 561 | |||
| 562 | #define HAVE_TX_TIMEOUT | ||
| 563 | void (*ndo_tx_timeout) (struct net_device *dev); | ||
| 564 | |||
| 565 | struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); | ||
| 566 | |||
| 567 | void (*ndo_vlan_rx_register)(struct net_device *dev, | ||
| 568 | struct vlan_group *grp); | ||
| 569 | void (*ndo_vlan_rx_add_vid)(struct net_device *dev, | ||
| 570 | unsigned short vid); | ||
| 571 | void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, | ||
| 572 | unsigned short vid); | ||
| 573 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 574 | #define HAVE_NETDEV_POLL | ||
| 575 | void (*ndo_poll_controller)(struct net_device *dev); | ||
| 576 | #endif | ||
| 577 | }; | ||
| 578 | |||
| 454 | /* | 579 | /* |
| 455 | * The DEVICE structure. | 580 | * The DEVICE structure. |
| 456 | * Actually, this whole structure is a big mistake. It mixes I/O | 581 | * Actually, this whole structure is a big mistake. It mixes I/O |
| @@ -498,11 +623,6 @@ struct net_device | |||
| 498 | #ifdef CONFIG_NETPOLL | 623 | #ifdef CONFIG_NETPOLL |
| 499 | struct list_head napi_list; | 624 | struct list_head napi_list; |
| 500 | #endif | 625 | #endif |
| 501 | |||
| 502 | /* The device initialization function. Called only once. */ | ||
| 503 | int (*init)(struct net_device *dev); | ||
| 504 | |||
| 505 | /* ------- Fields preinitialized in Space.c finish here ------- */ | ||
| 506 | 626 | ||
| 507 | /* Net device features */ | 627 | /* Net device features */ |
| 508 | unsigned long features; | 628 | unsigned long features; |
| @@ -546,15 +666,13 @@ struct net_device | |||
| 546 | * for all in netdev_increment_features. | 666 | * for all in netdev_increment_features. |
| 547 | */ | 667 | */ |
| 548 | #define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \ | 668 | #define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \ |
| 549 | NETIF_F_SG | NETIF_F_HIGHDMA | \ | 669 | NETIF_F_SG | NETIF_F_HIGHDMA | \ |
| 550 | NETIF_F_FRAGLIST) | 670 | NETIF_F_FRAGLIST) |
| 551 | 671 | ||
| 552 | /* Interface index. Unique device identifier */ | 672 | /* Interface index. Unique device identifier */ |
| 553 | int ifindex; | 673 | int ifindex; |
| 554 | int iflink; | 674 | int iflink; |
| 555 | 675 | ||
| 556 | |||
| 557 | struct net_device_stats* (*get_stats)(struct net_device *dev); | ||
| 558 | struct net_device_stats stats; | 676 | struct net_device_stats stats; |
| 559 | 677 | ||
| 560 | #ifdef CONFIG_WIRELESS_EXT | 678 | #ifdef CONFIG_WIRELESS_EXT |
| @@ -564,18 +682,13 @@ struct net_device | |||
| 564 | /* Instance data managed by the core of Wireless Extensions. */ | 682 | /* Instance data managed by the core of Wireless Extensions. */ |
| 565 | struct iw_public_data * wireless_data; | 683 | struct iw_public_data * wireless_data; |
| 566 | #endif | 684 | #endif |
| 685 | /* Management operations */ | ||
| 686 | const struct net_device_ops *netdev_ops; | ||
| 567 | const struct ethtool_ops *ethtool_ops; | 687 | const struct ethtool_ops *ethtool_ops; |
| 568 | 688 | ||
| 569 | /* Hardware header description */ | 689 | /* Hardware header description */ |
| 570 | const struct header_ops *header_ops; | 690 | const struct header_ops *header_ops; |
| 571 | 691 | ||
| 572 | /* | ||
| 573 | * This marks the end of the "visible" part of the structure. All | ||
| 574 | * fields hereafter are internal to the system, and may change at | ||
| 575 | * will (read: may be cleaned up at will). | ||
| 576 | */ | ||
| 577 | |||
| 578 | |||
| 579 | unsigned int flags; /* interface flags (a la BSD) */ | 692 | unsigned int flags; /* interface flags (a la BSD) */ |
| 580 | unsigned short gflags; | 693 | unsigned short gflags; |
| 581 | unsigned short priv_flags; /* Like 'flags' but invisible to userspace. */ | 694 | unsigned short priv_flags; /* Like 'flags' but invisible to userspace. */ |
| @@ -634,7 +747,7 @@ struct net_device | |||
| 634 | unsigned long last_rx; /* Time of last Rx */ | 747 | unsigned long last_rx; /* Time of last Rx */ |
| 635 | /* Interface address info used in eth_type_trans() */ | 748 | /* Interface address info used in eth_type_trans() */ |
| 636 | unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast | 749 | unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast |
| 637 | because most packets are unicast) */ | 750 | because most packets are unicast) */ |
| 638 | 751 | ||
| 639 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 752 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
| 640 | 753 | ||
| @@ -648,6 +761,10 @@ struct net_device | |||
| 648 | /* Number of TX queues currently active in device */ | 761 | /* Number of TX queues currently active in device */ |
| 649 | unsigned int real_num_tx_queues; | 762 | unsigned int real_num_tx_queues; |
| 650 | 763 | ||
| 764 | /* Map buffer to appropriate transmit queue */ | ||
| 765 | u16 (*select_queue)(struct net_device *dev, | ||
| 766 | struct sk_buff *skb); | ||
| 767 | |||
| 651 | unsigned long tx_queue_len; /* Max frames per queue allowed */ | 768 | unsigned long tx_queue_len; /* Max frames per queue allowed */ |
| 652 | spinlock_t tx_global_lock; | 769 | spinlock_t tx_global_lock; |
| 653 | /* | 770 | /* |
| @@ -662,9 +779,6 @@ struct net_device | |||
| 662 | int watchdog_timeo; /* used by dev_watchdog() */ | 779 | int watchdog_timeo; /* used by dev_watchdog() */ |
| 663 | struct timer_list watchdog_timer; | 780 | struct timer_list watchdog_timer; |
| 664 | 781 | ||
| 665 | /* | ||
| 666 | * refcnt is a very hot point, so align it on SMP | ||
| 667 | */ | ||
| 668 | /* Number of references to this device */ | 782 | /* Number of references to this device */ |
| 669 | atomic_t refcnt ____cacheline_aligned_in_smp; | 783 | atomic_t refcnt ____cacheline_aligned_in_smp; |
| 670 | 784 | ||
| @@ -683,56 +797,14 @@ struct net_device | |||
| 683 | NETREG_RELEASED, /* called free_netdev */ | 797 | NETREG_RELEASED, /* called free_netdev */ |
| 684 | } reg_state; | 798 | } reg_state; |
| 685 | 799 | ||
| 686 | /* Called after device is detached from network. */ | 800 | /* Called from unregister, can be used to call free_netdev */ |
| 687 | void (*uninit)(struct net_device *dev); | 801 | void (*destructor)(struct net_device *dev); |
| 688 | /* Called after last user reference disappears. */ | ||
| 689 | void (*destructor)(struct net_device *dev); | ||
| 690 | 802 | ||
| 691 | /* Pointers to interface service routines. */ | 803 | int (*neigh_setup)(struct net_device *dev, struct neigh_parms *); |
| 692 | int (*open)(struct net_device *dev); | ||
| 693 | int (*stop)(struct net_device *dev); | ||
| 694 | #define HAVE_NETDEV_POLL | ||
| 695 | #define HAVE_CHANGE_RX_FLAGS | ||
| 696 | void (*change_rx_flags)(struct net_device *dev, | ||
| 697 | int flags); | ||
| 698 | #define HAVE_SET_RX_MODE | ||
| 699 | void (*set_rx_mode)(struct net_device *dev); | ||
| 700 | #define HAVE_MULTICAST | ||
| 701 | void (*set_multicast_list)(struct net_device *dev); | ||
| 702 | #define HAVE_SET_MAC_ADDR | ||
| 703 | int (*set_mac_address)(struct net_device *dev, | ||
| 704 | void *addr); | ||
| 705 | #define HAVE_VALIDATE_ADDR | ||
| 706 | int (*validate_addr)(struct net_device *dev); | ||
| 707 | #define HAVE_PRIVATE_IOCTL | ||
| 708 | int (*do_ioctl)(struct net_device *dev, | ||
| 709 | struct ifreq *ifr, int cmd); | ||
| 710 | #define HAVE_SET_CONFIG | ||
| 711 | int (*set_config)(struct net_device *dev, | ||
| 712 | struct ifmap *map); | ||
| 713 | #define HAVE_CHANGE_MTU | ||
| 714 | int (*change_mtu)(struct net_device *dev, int new_mtu); | ||
| 715 | 804 | ||
| 716 | #define HAVE_TX_TIMEOUT | ||
| 717 | void (*tx_timeout) (struct net_device *dev); | ||
| 718 | |||
| 719 | void (*vlan_rx_register)(struct net_device *dev, | ||
| 720 | struct vlan_group *grp); | ||
| 721 | void (*vlan_rx_add_vid)(struct net_device *dev, | ||
| 722 | unsigned short vid); | ||
| 723 | void (*vlan_rx_kill_vid)(struct net_device *dev, | ||
| 724 | unsigned short vid); | ||
| 725 | |||
| 726 | int (*neigh_setup)(struct net_device *dev, struct neigh_parms *); | ||
| 727 | #ifdef CONFIG_NETPOLL | 805 | #ifdef CONFIG_NETPOLL |
| 728 | struct netpoll_info *npinfo; | 806 | struct netpoll_info *npinfo; |
| 729 | #endif | 807 | #endif |
| 730 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 731 | void (*poll_controller)(struct net_device *dev); | ||
| 732 | #endif | ||
| 733 | |||
| 734 | u16 (*select_queue)(struct net_device *dev, | ||
| 735 | struct sk_buff *skb); | ||
| 736 | 808 | ||
| 737 | #ifdef CONFIG_NET_NS | 809 | #ifdef CONFIG_NET_NS |
| 738 | /* Network namespace this network device is inside */ | 810 | /* Network namespace this network device is inside */ |
| @@ -763,6 +835,38 @@ struct net_device | |||
| 763 | /* for setting kernel sock attribute on TCP connection setup */ | 835 | /* for setting kernel sock attribute on TCP connection setup */ |
| 764 | #define GSO_MAX_SIZE 65536 | 836 | #define GSO_MAX_SIZE 65536 |
| 765 | unsigned int gso_max_size; | 837 | unsigned int gso_max_size; |
| 838 | |||
| 839 | #ifdef CONFIG_COMPAT_NET_DEV_OPS | ||
| 840 | struct { | ||
| 841 | int (*init)(struct net_device *dev); | ||
| 842 | void (*uninit)(struct net_device *dev); | ||
| 843 | int (*open)(struct net_device *dev); | ||
| 844 | int (*stop)(struct net_device *dev); | ||
| 845 | void (*change_rx_flags)(struct net_device *dev, | ||
| 846 | int flags); | ||
| 847 | void (*set_rx_mode)(struct net_device *dev); | ||
| 848 | void (*set_multicast_list)(struct net_device *dev); | ||
| 849 | int (*set_mac_address)(struct net_device *dev, | ||
| 850 | void *addr); | ||
| 851 | int (*validate_addr)(struct net_device *dev); | ||
| 852 | int (*do_ioctl)(struct net_device *dev, | ||
| 853 | struct ifreq *ifr, int cmd); | ||
| 854 | int (*set_config)(struct net_device *dev, | ||
| 855 | struct ifmap *map); | ||
| 856 | int (*change_mtu)(struct net_device *dev, int new_mtu); | ||
| 857 | void (*tx_timeout) (struct net_device *dev); | ||
| 858 | struct net_device_stats* (*get_stats)(struct net_device *dev); | ||
| 859 | void (*vlan_rx_register)(struct net_device *dev, | ||
| 860 | struct vlan_group *grp); | ||
| 861 | void (*vlan_rx_add_vid)(struct net_device *dev, | ||
| 862 | unsigned short vid); | ||
| 863 | void (*vlan_rx_kill_vid)(struct net_device *dev, | ||
| 864 | unsigned short vid); | ||
| 865 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 866 | void (*poll_controller)(struct net_device *dev); | ||
| 867 | #endif | ||
| 868 | #endif | ||
| 869 | }; | ||
| 766 | }; | 870 | }; |
| 767 | #define to_net_dev(d) container_of(d, struct net_device, dev) | 871 | #define to_net_dev(d) container_of(d, struct net_device, dev) |
| 768 | 872 | ||
