softnet_data Structure
We will see in Chapter 10 that each CPU
has its own queue for incoming frames . Because each CPU has its own data structure
to manage ingress and egress traffic, there is no need for any locking among different
CPUs. The data structure for this queue, softnet_data,
is defined in include/linux/netdevice.h as follows:
struct softnet_data
{
int throttle;
int cng_level;
int avg_blog;
struct sk_buff_head input_pkt_queue;
struct list_head poll_list;
struct net_device *output_queue;
struct sk_buff *completion_queue;
struct net_device backlog_dev;
}The structure includes both fields used for reception and fields used for
transmission. In other words, both the NET_RX_SOFTIRQ
and NET_TX_SOFTIRQ softirqs refer to the structure.
Ingress frames are queued to input_pkt_queue,
[*] and egress frames are placed into the specialized queues handled by Traffic
Control (the QoS layer) instead of being handled by softirqs and the softnet_data structure, but softirqs are still used to clean
up transmitted buffers afterward, to keep that task from slowing transmission.
Fields of softnet_data
The following is a brief field-by-field description of this data structure; details will be given in later chapters. Some drivers use the NAPI interface, whereas others have not yet been updated to NAPI; both types of driver use this structure, but some fields are reserved for the non-NAPI drivers.
-
throttle -
avg_blog -
cng_level These three parameters are used by the congestion management algorithm ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access