struct sock — network layer representation of sockets
struct sock { struct sock_common __sk_common; #define sk_node __sk_common.skc_node #define sk_nulls_node __sk_common.skc_nulls_node #define sk_refcnt __sk_common.skc_refcnt #define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping #define sk_dontcopy_begin __sk_common.skc_dontcopy_begin #define sk_dontcopy_end __sk_common.skc_dontcopy_end #define sk_hash __sk_common.skc_hash #define sk_portpair __sk_common.skc_portpair #define sk_num __sk_common.skc_num #define sk_dport __sk_common.skc_dport #define sk_addrpair __sk_common.skc_addrpair #define sk_daddr __sk_common.skc_daddr #define sk_rcv_saddr __sk_common.skc_rcv_saddr #define sk_family __sk_common.skc_family #define sk_state __sk_common.skc_state #define sk_reuse __sk_common.skc_reuse #define sk_reuseport __sk_common.skc_reuseport #define sk_ipv6only __sk_common.skc_ipv6only #define sk_bound_dev_if __sk_common.skc_bound_dev_if #define sk_bind_node __sk_common.skc_bind_node #define sk_prot __sk_common.skc_prot #define sk_net __sk_common.skc_net #define sk_v6_daddr __sk_common.skc_v6_daddr #define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr #define sk_cookie __sk_common.skc_cookie socket_lock_t sk_lock; struct sk_buff_head sk_receive_queue; struct sk_backlog; #define sk_rmem_alloc sk_backlog.rmem_alloc int sk_forward_alloc; #ifdef CONFIG_RPS __u32 sk_rxhash; #endif u16 sk_incoming_cpu; __u32 sk_txhash; #ifdef CONFIG_NET_RX_BUSY_POLL unsigned int sk_napi_id; unsigned int sk_ll_usec; #endif atomic_t sk_drops; int sk_rcvbuf; struct sk_filter __rcu * sk_filter; struct socket_wq __rcu * sk_wq; #ifdef CONFIG_XFRM struct xfrm_policy * sk_policy[2]; #endif unsigned long sk_flags; struct dst_entry * sk_rx_dst; struct dst_entry __rcu * sk_dst_cache; spinlock_t sk_dst_lock; atomic_t sk_wmem_alloc; atomic_t sk_omem_alloc; int sk_sndbuf; struct sk_buff_head sk_write_queue; unsigned int sk_shutdown:2; unsigned int sk_no_check_tx:1; unsigned int sk_no_check_rx:1; unsigned int sk_userlocks:4; unsigned int sk_protocol:8; #define SK_PROTOCOL_MAX U8_MAX int sk_wmem_queued; gfp_t sk_allocation; u32 sk_pacing_rate; u32 sk_max_pacing_rate; netdev_features_t sk_route_caps; netdev_features_t sk_route_nocaps; int sk_gso_type; unsigned int sk_gso_max_size; u16 sk_gso_max_segs; int sk_rcvlowat; unsigned long sk_lingertime; struct sk_buff_head sk_error_queue; struct proto * sk_prot_creator; rwlock_t sk_callback_lock; int sk_err; int sk_err_soft; u32 sk_ack_backlog; u32 sk_max_ack_backlog; __u32 sk_priority; #if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) __u32 sk_cgrp_prioidx; #endif struct pid * sk_peer_pid; const struct cred * sk_peer_cred; long sk_rcvtimeo; long sk_sndtimeo; void * sk_protinfo; struct timer_list sk_timer; ktime_t sk_stamp; u16 sk_tsflags; u32 sk_tskey; struct socket * sk_socket; void * sk_user_data; struct page_frag sk_frag; struct sk_buff * sk_send_head; __s32 sk_peek_off; int sk_write_pending; #ifdef CONFIG_SECURITY void * sk_security; #endif __u32 sk_mark; u32 sk_classid; struct cg_proto * sk_cgrp; void (* sk_state_change) (struct sock *sk); void (* sk_data_ready) (struct sock *sk); void (* sk_write_space) (struct sock *sk); void (* sk_error_report) (struct sock *sk); int (* sk_backlog_rcv) (struct sock *sk,struct sk_buff *skb); void (* sk_destruct) (struct sock *sk); };
shared layout with inet_timewait_sock
synchronizer
incoming packets
always used with the per-socket spinlock held
space allocated forward
flow hash received from netif layer
record cpu processing incoming packets
computed flow hash for use on transmit
id of the last napi context to receive data for sk
usecs to busypoll when there is no data
raw/udp drops counter
size of receive buffer in bytes
socket filtering instructions
sock wait queue and async head
flow policy
SO_LINGER
(l_onoff), SO_BROADCAST
, SO_KEEPALIVE
,
SO_OOBINLINE
settings, SO_TIMESTAMPING
settings
receive input route used by early demux
destination cache
destination cache lock
transmit queue bytes committed
"o“ is ”option“ or ”other"
size of send buffer in bytes
Packet sending queue
mask of SEND_SHUTDOWN
and/or RCV_SHUTDOWN
SO_NO_CHECK
setting, set checksum in TX packets
allow zero checksum in RX packets
SO_SNDBUF
and SO_RCVBUF
settings
which protocol this socket belongs in this network family
persistent queue size
allocation mode
Pacing rate (if supported by transport/packet scheduler)
Maximum pacing rate (SO_MAX_PACING_RATE
)
route capabilities (e.g. NETIF_F_TSO
)
forbidden route capabilities (e.g NETIF_F_GSO_MASK)
GSO type (e.g. SKB_GSO_TCPV4
)
Maximum GSO segment size to build
Maximum number of GSO segments
SO_RCVLOWAT
setting
SO_LINGER
l_linger setting
rarely used
sk_prot of original sock creator (see ipv6_setsockopt, IPV6_ADDRFORM for instance)
used with the callbacks in the end of this struct
last error
errors that don't cause failure but are the cause of a persistent failure not just 'timed out'
current listen backlog
listen backlog set in listen
SO_PRIORITY
setting
socket group's priority map index
struct pid for this socket's peer
SO_PEERCRED
setting
SO_RCVTIMEO
setting
SO_SNDTIMEO
setting
private area, net family specific, when not using slab
sock cleanup timer
time stamp of last packet received
SO_TIMESTAMPING socket options
counter to disambiguate concurrent tstamp requests
Identd and reporting IO signals
RPC layer private data
cached page frag
front of stuff to transmit
current peek_offset value
a write to stream socket waits to start
used by security modules
generic packet mark
this socket's cgroup classid
this socket's cgroup-specific proto data
callback to indicate change in the state of the sock
callback to indicate there is data to be processed
callback to indicate there is bf sending space available
callback to indicate errors (e.g. MSG_ERRQUEUE
)
callback to process the backlog
called at sock freeing time, i.e. when all refcnt == 0