net

    xiaoxiao2021-03-25  74

    /*  * This structure defines the management hooks for network devices.  * The following hooks can be defined; unless noted otherwise, they are  * optional and can be filled with a null pointer.  *  * int (*ndo_init)(struct net_device *dev);  *     This function is called once when a network device is registered.  *     The network device can use this for any late stage initialization  *     or semantic validation. It can fail with an error code which will  *     be propagated back to register_netdev.  *  * void (*ndo_uninit)(struct net_device *dev);  *     This function is called when device is unregistered or when registration  *     fails. It is not called if init fails.  *  * int (*ndo_open)(struct net_device *dev);  *     This function is called when a network device transitions to the up  *     state.  *  * int (*ndo_stop)(struct net_device *dev);  *     This function is called when a network device transitions to the down  *     state.  *  * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb,  *                               struct net_device *dev);  * Called when a packet needs to be transmitted.  * Returns NETDEV_TX_OK.  Can return NETDEV_TX_BUSY, but you should stop  * the queue before that can happen; it's for obsolete devices and weird  * corner cases, but the stack really does a non-trivial amount  * of useless work if you return NETDEV_TX_BUSY.  * Required; cannot be NULL.  *  * netdev_features_t (*ndo_fix_features)(struct net_device *dev,  * netdev_features_t features);  * Adjusts the requested feature flags according to device-specific  * constraints, and returns the resulting flags. Must not modify  * the device state.  *  * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb,  *                         void *accel_priv, select_queue_fallback_t fallback);  * Called to decide which queue to use when device supports multiple  * transmit queues.  *  * void (*ndo_change_rx_flags)(struct net_device *dev, int flags);  * This function is called to allow device receiver to make  * changes to configuration when multicast or promiscuous is enabled.  *  * void (*ndo_set_rx_mode)(struct net_device *dev);  * This function is called device changes address list filtering.  * If driver handles unicast address filtering, it should set  * IFF_UNICAST_FLT in its priv_flags.  *  * int (*ndo_set_mac_address)(struct net_device *dev, void *addr);  * This function  is called when the Media Access Control address  * needs to be changed. If this interface is not defined, the  * MAC address can not be changed.  *  * int (*ndo_validate_addr)(struct net_device *dev);  * Test if Media Access Control address is valid for the device.  *  * int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);  * Called when a user requests an ioctl which can't be handled by  * the generic interface code. If not defined ioctls return  * not supported error code.  *  * int (*ndo_set_config)(struct net_device *dev, struct ifmap *map);  * Used to set network devices bus interface parameters. This interface  * is retained for legacy reasons; new devices should use the bus  * interface (PCI) for low level management.  *  * int (*ndo_change_mtu)(struct net_device *dev, int new_mtu);  * Called when a user wants to change the Maximum Transfer Unit  * of a device. If not defined, any request to change MTU will  * will return an error.  *  * void (*ndo_tx_timeout)(struct net_device *dev);  * Callback used when the transmitter has not made any progress  * for dev->watchdog ticks.  *  * struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev,  *                      struct rtnl_link_stats64 *storage);  * struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);  * Called when a user wants to get the network device usage  * statistics. Drivers must do one of the following:  * 1. Define @ndo_get_stats64 to fill in a zero-initialised  *   rtnl_link_stats64 structure passed by the caller.  * 2. Define @ndo_get_stats to update a net_device_stats structure  *   (which should normally be dev->stats) and return a pointer to  *   it. The structure may be changed asynchronously only if each  *   field is written atomically.  * 3. Update dev->stats asynchronously and atomically, and define  *   neither operation.  *  * bool (*ndo_has_offload_stats)(int attr_id)  * Return true if this device supports offload stats of this attr_id.  *  * int (*ndo_get_offload_stats)(int attr_id, const struct net_device *dev,  * void *attr_data)  * Get statistics for offload operations by attr_id. Write it into the  * attr_data pointer.  *  * int (*ndo_vlan_rx_add_vid)(struct net_device *dev, __be16 proto, u16 vid);  * If device supports VLAN filtering this function is called when a  * VLAN id is registered.  *  * int (*ndo_vlan_rx_kill_vid)(struct net_device *dev, __be16 proto, u16 vid);  * If device supports VLAN filtering this function is called when a  * VLAN id is unregistered.  *  * void (*ndo_poll_controller)(struct net_device *dev);  *  * SR-IOV management functions.  * int (*ndo_set_vf_mac)(struct net_device *dev, int vf, u8* mac);  * int (*ndo_set_vf_vlan)(struct net_device *dev, int vf, u16 vlan,  *  u8 qos, __be16 proto);  * int (*ndo_set_vf_rate)(struct net_device *dev, int vf, int min_tx_rate,  *  int max_tx_rate);  * int (*ndo_set_vf_spoofchk)(struct net_device *dev, int vf, bool setting);  * int (*ndo_set_vf_trust)(struct net_device *dev, int vf, bool setting);  * int (*ndo_get_vf_config)(struct net_device *dev,  *    int vf, struct ifla_vf_info *ivf);  * int (*ndo_set_vf_link_state)(struct net_device *dev, int vf, int link_state);  * int (*ndo_set_vf_port)(struct net_device *dev, int vf,  *  struct nlattr *port[]);  *  *      Enable or disable the VF ability to query its RSS Redirection Table and  *      Hash Key. This is needed since on some devices VF share this information  *      with PF and querying it may introduce a theoretical security risk.  * int (*ndo_set_vf_rss_query_en)(struct net_device *dev, int vf, bool setting);  * int (*ndo_get_vf_port)(struct net_device *dev, int vf, struct sk_buff *skb);  * int (*ndo_setup_tc)(struct net_device *dev, u8 tc)  * Called to setup 'tc' number of traffic classes in the net device. This  * is always called from the stack with the rtnl lock held and netif tx  * queues stopped. This allows the netdevice to perform queue management  * safely.  *  * Fiber Channel over Ethernet (FCoE) offload functions.  * int (*ndo_fcoe_enable)(struct net_device *dev);  * Called when the FCoE protocol stack wants to start using LLD for FCoE  * so the underlying device can perform whatever needed configuration or  * initialization to support acceleration of FCoE traffic.  *  * int (*ndo_fcoe_disable)(struct net_device *dev);  * Called when the FCoE protocol stack wants to stop using LLD for FCoE  * so the underlying device can perform whatever needed clean-ups to  * stop supporting acceleration of FCoE traffic.  *  * int (*ndo_fcoe_ddp_setup)(struct net_device *dev, u16 xid,  *     struct scatterlist *sgl, unsigned int sgc);  * Called when the FCoE Initiator wants to initialize an I/O that  * is a possible candidate for Direct Data Placement (DDP). The LLD can  * perform necessary setup and returns 1 to indicate the device is set up  * successfully to perform DDP on this I/O, otherwise this returns 0.  *  * int (*ndo_fcoe_ddp_done)(struct net_device *dev,  u16 xid);  * Called when the FCoE Initiator/Target is done with the DDPed I/O as  * indicated by the FC exchange id 'xid', so the underlying device can  * clean up and reuse resources for later DDP requests.  *  * int (*ndo_fcoe_ddp_target)(struct net_device *dev, u16 xid,  *      struct scatterlist *sgl, unsigned int sgc);  * Called when the FCoE Target wants to initialize an I/O that  * is a possible candidate for Direct Data Placement (DDP). The LLD can  * perform necessary setup and returns 1 to indicate the device is set up  * successfully to perform DDP on this I/O, otherwise this returns 0.  *  * int (*ndo_fcoe_get_hbainfo)(struct net_device *dev,  *       struct netdev_fcoe_hbainfo *hbainfo);  * Called when the FCoE Protocol stack wants information on the underlying  * device. This information is utilized by the FCoE protocol stack to  * register attributes with Fiber Channel management service as per the  * FC-GS Fabric Device Management Information(FDMI) specification.  *  * int (*ndo_fcoe_get_wwn)(struct net_device *dev, u64 *wwn, int type);  * Called when the underlying device wants to override default World Wide  * Name (WWN) generation mechanism in FCoE protocol stack to pass its own  * World Wide Port Name (WWPN) or World Wide Node Name (WWNN) to the FCoE  * protocol stack to use.  *  * RFS acceleration.  * int (*ndo_rx_flow_steer)(struct net_device *dev, const struct sk_buff *skb,  *    u16 rxq_index, u32 flow_id);  * Set hardware filter for RFS.  rxq_index is the target queue index;  * flow_id is a flow ID to be passed to rps_may_expire_flow() later.  * Return the filter ID on success, or a negative error code.  *  * Slave management functions (for bridge, bonding, etc).  * int (*ndo_add_slave)(struct net_device *dev, struct net_device *slave_dev);  * Called to make another netdev an underling.  *  * int (*ndo_del_slave)(struct net_device *dev, struct net_device *slave_dev);  * Called to release previously enslaved netdev.  *  *      Feature/offload setting functions.  * int (*ndo_set_features)(struct net_device *dev, netdev_features_t features);  * Called to update device configuration to new features. Passed  * feature set might be less than what was returned by ndo_fix_features()).  * Must return >0 or -errno if it changed dev->features itself.  *  * int (*ndo_fdb_add)(struct ndmsg *ndm, struct nlattr *tb[],  *      struct net_device *dev,  *      const unsigned char *addr, u16 vid, u16 flags)  * Adds an FDB entry to dev for addr.  * int (*ndo_fdb_del)(struct ndmsg *ndm, struct nlattr *tb[],  *      struct net_device *dev,  *      const unsigned char *addr, u16 vid)  * Deletes the FDB entry from dev coresponding to addr.  * int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb,  *       struct net_device *dev, struct net_device *filter_dev,  *       int *idx)  * Used to add FDB entries to dump requests. Implementers should add  * entries to skb and update idx with the number of entries.  *  * int (*ndo_bridge_setlink)(struct net_device *dev, struct nlmsghdr *nlh,  *     u16 flags)  * int (*ndo_bridge_getlink)(struct sk_buff *skb, u32 pid, u32 seq,  *     struct net_device *dev, u32 filter_mask,  *     int nlflags)  * int (*ndo_bridge_dellink)(struct net_device *dev, struct nlmsghdr *nlh,  *     u16 flags);  *  * int (*ndo_change_carrier)(struct net_device *dev, bool new_carrier);  * Called to change device carrier. Soft-devices (like dummy, team, etc)  * which do not represent real hardware may define this to allow their  * userspace components to manage their virtual carrier state. Devices  * that determine carrier state from physical hardware properties (eg  * network cables) or protocol-dependent mechanisms (eg  * USB_CDC_NOTIFY_NETWORK_CONNECTION) should NOT implement this function.  *  * int (*ndo_get_phys_port_id)(struct net_device *dev,  *       struct netdev_phys_item_id *ppid);  * Called to get ID of physical port of this device. If driver does  * not implement this, it is assumed that the hw is not able to have  * multiple net devices on single physical port.  *  * void (*ndo_udp_tunnel_add)(struct net_device *dev,  *      struct udp_tunnel_info *ti);  * Called by UDP tunnel to notify a driver about the UDP port and socket  * address family that a UDP tunnel is listnening to. It is called only  * when a new port starts listening. The operation is protected by the  * RTNL.  *  * void (*ndo_udp_tunnel_del)(struct net_device *dev,  *      struct udp_tunnel_info *ti);  * Called by UDP tunnel to notify the driver about a UDP port and socket  * address family that the UDP tunnel is not listening to anymore. The  * operation is protected by the RTNL.  *  * void* (*ndo_dfwd_add_station)(struct net_device *pdev,  * struct net_device *dev)  * Called by upper layer devices to accelerate switching or other  * station functionality into hardware. 'pdev is the lowerdev  * to use for the offload and 'dev' is the net device that will  * back the offload. Returns a pointer to the private structure  * the upper layer will maintain.  * void (*ndo_dfwd_del_station)(struct net_device *pdev, void *priv)  * Called by upper layer device to delete the station created  * by 'ndo_dfwd_add_station'. 'pdev' is the net device backing  * the station and priv is the structure returned by the add  * operation.  * netdev_tx_t (*ndo_dfwd_start_xmit)(struct sk_buff *skb,  *      struct net_device *dev,  *      void *priv);  * Callback to use for xmit over the accelerated station. This  * is used in place of ndo_start_xmit on accelerated net  * devices.  * netdev_features_t (*ndo_features_check)(struct sk_buff *skb,  *   struct net_device *dev  *   netdev_features_t features);  * Called by core transmit path to determine if device is capable of  * performing offload operations on a given packet. This is to give  * the device an opportunity to implement any restrictions that cannot  * be otherwise expressed by feature flags. The check is called with  * the set of features that the stack has calculated and it returns  * those the driver believes to be appropriate.  * int (*ndo_set_tx_maxrate)(struct net_device *dev,  *     int queue_index, u32 maxrate);  * Called when a user wants to set a max-rate limitation of specific  * TX queue.  * int (*ndo_get_iflink)(const struct net_device *dev);  * Called to get the iflink value of this device.  * void (*ndo_change_proto_down)(struct net_device *dev,  * bool proto_down);  * This function is used to pass protocol port error state information  * to the switch driver. The switch driver can react to the proto_down  *      by doing a phys down on the associated switch port.  * int (*ndo_fill_metadata_dst)(struct net_device *dev, struct sk_buff *skb);  * This function is used to get egress tunnel information for given skb.  * This is useful for retrieving outer tunnel header parameters while  * sampling packet.  * void (*ndo_set_rx_headroom)(struct net_device *dev, int needed_headroom);  * This function is used to specify the headroom that the skb must  * consider when allocation skb during packet reception. Setting  * appropriate rx headroom value allows avoiding skb head copy on  * forward. Setting a negative value resets the rx headroom to the  * default value.  * int (*ndo_xdp)(struct net_device *dev, struct netdev_xdp *xdp);  * This function is used to set or query state related to XDP on the  * netdevice. See definition of enum xdp_netdev_command for details.  *  */ struct net_device_ops { int (*ndo_init)(struct net_device *dev); void (*ndo_uninit)(struct net_device *dev); int (*ndo_open)(struct net_device *dev); int (*ndo_stop)(struct net_device *dev); netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb,  struct net_device *dev); netdev_features_t (*ndo_features_check)(struct sk_buff *skb,      struct net_device *dev,      netdev_features_t features); u16 (*ndo_select_queue)(struct net_device *dev,    struct sk_buff *skb,    void *accel_priv,    select_queue_fallback_t fallback); void (*ndo_change_rx_flags)(struct net_device *dev,       int flags); void (*ndo_set_rx_mode)(struct net_device *dev); int (*ndo_set_mac_address)(struct net_device *dev,       void *addr); int (*ndo_validate_addr)(struct net_device *dev); int (*ndo_do_ioctl)(struct net_device *dev,        struct ifreq *ifr, int cmd); int (*ndo_set_config)(struct net_device *dev,          struct ifmap *map); int (*ndo_change_mtu)(struct net_device *dev,  int new_mtu); int (*ndo_neigh_setup)(struct net_device *dev,   struct neigh_parms *); void (*ndo_tx_timeout) (struct net_device *dev); struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev,     struct rtnl_link_stats64 *storage); bool (*ndo_has_offload_stats)(int attr_id); int (*ndo_get_offload_stats)(int attr_id, const struct net_device *dev, void *attr_data); struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); int (*ndo_vlan_rx_add_vid)(struct net_device *dev,       __be16 proto, u16 vid); int (*ndo_vlan_rx_kill_vid)(struct net_device *dev,        __be16 proto, u16 vid); #ifdef CONFIG_NET_POLL_CONTROLLER void                    (*ndo_poll_controller)(struct net_device *dev); int (*ndo_netpoll_setup)(struct net_device *dev,     struct netpoll_info *info); void (*ndo_netpoll_cleanup)(struct net_device *dev); #endif #ifdef CONFIG_NET_RX_BUSY_POLL int (*ndo_busy_poll)(struct napi_struct *dev); #endif int (*ndo_set_vf_mac)(struct net_device *dev,  int queue, u8 *mac); int (*ndo_set_vf_vlan)(struct net_device *dev,   int queue, u16 vlan,   u8 qos, __be16 proto); int (*ndo_set_vf_rate)(struct net_device *dev,   int vf, int min_tx_rate,   int max_tx_rate); int (*ndo_set_vf_spoofchk)(struct net_device *dev,       int vf, bool setting); int (*ndo_set_vf_trust)(struct net_device *dev,    int vf, bool setting); int (*ndo_get_vf_config)(struct net_device *dev,     int vf,     struct ifla_vf_info *ivf); int (*ndo_set_vf_link_state)(struct net_device *dev, int vf, int link_state); int (*ndo_get_vf_stats)(struct net_device *dev,    int vf,    struct ifla_vf_stats    *vf_stats); int (*ndo_set_vf_port)(struct net_device *dev,   int vf,   struct nlattr *port[]); int (*ndo_get_vf_port)(struct net_device *dev,   int vf, struct sk_buff *skb); int (*ndo_set_vf_guid)(struct net_device *dev,   int vf, u64 guid,   int guid_type); int (*ndo_set_vf_rss_query_en)(   struct net_device *dev,   int vf, bool setting); int (*ndo_setup_tc)(struct net_device *dev, u32 handle, __be16 protocol, struct tc_to_netdev *tc); #if IS_ENABLED(CONFIG_FCOE) int (*ndo_fcoe_enable)(struct net_device *dev); int (*ndo_fcoe_disable)(struct net_device *dev); int (*ndo_fcoe_ddp_setup)(struct net_device *dev,      u16 xid,      struct scatterlist *sgl,      unsigned int sgc); int (*ndo_fcoe_ddp_done)(struct net_device *dev,     u16 xid); int (*ndo_fcoe_ddp_target)(struct net_device *dev,       u16 xid,       struct scatterlist *sgl,       unsigned int sgc); int (*ndo_fcoe_get_hbainfo)(struct net_device *dev, struct netdev_fcoe_hbainfo *hbainfo); #endif #if IS_ENABLED(CONFIG_LIBFCOE) #define NETDEV_FCOE_WWNN 0 #define NETDEV_FCOE_WWPN 1 int (*ndo_fcoe_get_wwn)(struct net_device *dev,    u64 *wwn, int type); #endif #ifdef CONFIG_RFS_ACCEL int (*ndo_rx_flow_steer)(struct net_device *dev,     const struct sk_buff *skb,     u16 rxq_index,     u32 flow_id); #endif int (*ndo_add_slave)(struct net_device *dev, struct net_device *slave_dev); int (*ndo_del_slave)(struct net_device *dev, struct net_device *slave_dev); netdev_features_t (*ndo_fix_features)(struct net_device *dev,    netdev_features_t features); int (*ndo_set_features)(struct net_device *dev,    netdev_features_t features); int (*ndo_neigh_construct)(struct net_device *dev,       struct neighbour *n); void (*ndo_neigh_destroy)(struct net_device *dev,     struct neighbour *n); int (*ndo_fdb_add)(struct ndmsg *ndm,       struct nlattr *tb[],       struct net_device *dev,       const unsigned char *addr,       u16 vid,       u16 flags); int (*ndo_fdb_del)(struct ndmsg *ndm,       struct nlattr *tb[],       struct net_device *dev,       const unsigned char *addr,       u16 vid); int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb, struct net_device *dev, struct net_device *filter_dev, int *idx); int (*ndo_bridge_setlink)(struct net_device *dev,      struct nlmsghdr *nlh,      u16 flags); int (*ndo_bridge_getlink)(struct sk_buff *skb,      u32 pid, u32 seq,      struct net_device *dev,      u32 filter_mask,      int nlflags); int (*ndo_bridge_dellink)(struct net_device *dev,      struct nlmsghdr *nlh,      u16 flags); int (*ndo_change_carrier)(struct net_device *dev,      bool new_carrier); int (*ndo_get_phys_port_id)(struct net_device *dev, struct netdev_phys_item_id *ppid); int (*ndo_get_phys_port_name)(struct net_device *dev,  char *name, size_t len); void (*ndo_udp_tunnel_add)(struct net_device *dev,      struct udp_tunnel_info *ti); void (*ndo_udp_tunnel_del)(struct net_device *dev,      struct udp_tunnel_info *ti); void* (*ndo_dfwd_add_station)(struct net_device *pdev, struct net_device *dev); void (*ndo_dfwd_del_station)(struct net_device *pdev, void *priv); netdev_tx_t (*ndo_dfwd_start_xmit) (struct sk_buff *skb, struct net_device *dev, void *priv); int (*ndo_get_lock_subclass)(struct net_device *dev); int (*ndo_set_tx_maxrate)(struct net_device *dev,      int queue_index,      u32 maxrate); int (*ndo_get_iflink)(const struct net_device *dev); int (*ndo_change_proto_down)(struct net_device *dev, bool proto_down); int (*ndo_fill_metadata_dst)(struct net_device *dev,       struct sk_buff *skb); void (*ndo_set_rx_headroom)(struct net_device *dev,       int needed_headroom); int (*ndo_xdp)(struct net_device *dev,   struct netdev_xdp *xdp); };
    转载请注明原文地址: https://ju.6miu.com/read-37877.html

    最新回复(0)