Understanding Linux Network Device Drivers (Part 6)

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);

Leave a Comment