/*
* 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);
};