2.3 Functions Related to Network Device Drivers
1. Allocate and initialize net_device structure
struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,unsigned char name_assign_type, void (*setup)(struct net_device *),unsigned int txqs, unsigned int rxqs);
Function: Allocate network device
Parameters:
@sizeof_priv: Size of private data, space allocated for it
@name: Device name format string
@assign_type: Source of device name
#define NET_NAME_UNKNOWN 0 /* unknown origin (not exposed to userspace) */
#define NET_NAME_ENUM 1 /* enumerated by kernel */
#define NET_NAME_PREDICTABLE 2 /* predictably named by the kernel */
#define NET_NAME_USER 3 /* provided by user-space */
#define NET_NAME_RENAMED 4 /* renamed by user-space */
@setup: Callback to initialize the device
void ether_setup(struct net_device *dev)
@txqs: Number of TX sub-queues to allocate
@rxqs: Number of RX sub-queues to allocate
Return value: Returns net_device on success, NULL on failure
2. Register network device driver
int register_netdev(struct net_device *dev)
Function: Register network device
Parameters: struct net_device network device object
Return value: Returns 0 on success, error code on failure
3. Unregister character device driver
void unregister_netdev(struct net_device *dev)
Function: Unregister network device
Parameters: struct net_device network device object
Return value: None
4. Free net_device memory
void free_netdev(struct net_device *dev)
Function: Free network device
Parameters: struct net_device network device object
Return value: None
Confirm network packet protocol ID
__be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev);
Set new MAC
int eth_mac_addr(struct net_device *dev, void *p);
Modify MTU value
int eth_change_mtu(struct net_device *dev, int new_mtu);
Check if MAC address is valid
int eth_validate_addr(struct net_device *dev);
Randomly generate MAC address
void eth_hw_addr_random(struct net_device *dev);
Set carrier (link up)
void netif_carrier_on(struct net_device *dev);
Clear carrier (link down)
void netif_carrier_off(struct net_device *dev);
Start sending queue
void netif_start_queue(struct net_device *dev);
Stop sending queue
void netif_stop_queue(struct net_device *dev);
Calculate IP header checksum
__sum16 ip_fast_csum(const void *iph, unsigned int ihl);