linux的softnet_data结构体
时间: 2024-05-04 21:21:24 浏览: 10
softnet_data结构体是Linux内核中网络软中断处理机制的关键数据结构。它定义在include/net_softnet.h头文件中,其定义如下:
```
struct softnet_data {
struct list_head input_pkt_queue;
struct list_head process_queue;
#ifdef CONFIG_NET_RX_BUSY_POLL
u64 start_jiffies;
#endif
atomic_t poll_list_len;
atomic_t process_budget;
atomic_t backlog;
bool have_raw; /* raw sockets are present, optimize for this */
bool have_fq;
bool have_fq_tea;
#ifdef CONFIG_RPS
bool have_rps_sock;
#endif
#ifdef CONFIG_RFS_ACCEL
bool have_rfs_sock;
#endif
};
```
其中,softnet_data结构体成员说明如下:
- input_pkt_queue:存储网络接收的数据包队列的头部。
- process_queue:存储网络接收的数据包经过协议栈处理后的数据包队列的头部。
- start_jiffies:网络接收数据包的起始时间。
- poll_list_len:网络接收数据包队列的长度。
- process_budget:网络接收数据包被处理的预算。
- backlog:网络接收数据包被缓存的数量。
- have_raw:标识是否存在原始套接字。
- have_fq:标识是否启用了Fair Queueing。
- have_fq_tea:标识是否启用了Traffic Engineering and Accounting。
- have_rps_sock:标识是否存在RPS套接字。
- have_rfs_sock:标识是否存在RFS套接字。
该结构体主要用于协议栈接收数据包时的软中断处理机制,其中包括将接收到的数据包添加到input_pkt_queue、将input_pkt_queue中的数据包经过协议栈处理后添加到process_queue等操作。