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_net_refcnt __sk_common.skc_net_refcnt #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 #define sk_incoming_cpu __sk_common.skc_incoming_cpu #define sk_flags __sk_common.skc_flags #define sk_rxhash __sk_common.skc_rxhash socket_lock_t sk_lock; atomic_t sk_drops; int sk_rcvlowat; struct sk_buff_head sk_error_queue; struct sk_buff_head sk_receive_queue; struct {unnamed_struct}; #ifdef CONFIG_XFRM struct xfrm_policy __rcu * sk_policy[2]; #endif struct dst_entry * sk_rx_dst; struct dst_entry __rcu * sk_dst_cache; atomic_t sk_omem_alloc; int sk_sndbuf; int sk_wmem_queued; atomic_t sk_wmem_alloc; struct sk_buff * sk_send_head; struct sk_buff_head sk_write_queue; __s32 sk_peek_off; int sk_write_pending; long sk_sndtimeo; struct timer_list sk_timer; __u32 sk_priority; __u32 sk_mark; u32 sk_pacing_rate; u32 sk_max_pacing_rate; struct page_frag sk_frag; netdev_features_t sk_route_caps; netdev_features_t sk_route_nocaps; int sk_gso_type; unsigned int sk_gso_max_size; gfp_t sk_allocation; __u32 sk_txhash; #ifdef __BIG_ENDIAN_BITFIELD #define SK_FL_PROTO_SHIFT 16 #define SK_FL_PROTO_MASK 0x00ff0000 #define SK_FL_TYPE_SHIFT 0 #define SK_FL_TYPE_MASK 0x0000ffff #else #define SK_FL_PROTO_SHIFT 8 #define SK_FL_PROTO_MASK 0x0000ff00 #define SK_FL_TYPE_SHIFT 16 #define SK_FL_TYPE_MASK 0xffff0000 #endif unsigned int sk_padding: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; unsigned int sk_type:16; #define SK_PROTOCOL_MAX U8_MAX u16 sk_gso_max_segs; unsigned long sk_lingertime; 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; struct pid * sk_peer_pid; const struct cred * sk_peer_cred; long sk_rcvtimeo; ktime_t sk_stamp; u16 sk_tsflags; u8 sk_shutdown; u32 sk_tskey; struct socket * sk_socket; void * sk_user_data; #ifdef CONFIG_SECURITY void * sk_security; #endif struct sock_cgroup_data sk_cgrp_data; struct mem_cgroup * sk_memcg; 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); struct sock_reuseport __rcu * sk_reuseport_cb; struct rcu_head sk_rcu; };
shared layout with inet_timewait_sock
synchronizer
raw/udp drops counter
SO_RCVLOWAT
setting
rarely used
incoming packets
anonymous
flow policy
receive input route used by early demux
destination cache
"o“ is ”option“ or ”other"
size of send buffer in bytes
persistent queue size
transmit queue bytes committed
front of stuff to transmit
Packet sending queue
current peek_offset value
a write to stream socket waits to start
SO_SNDTIMEO
setting
sock cleanup timer
SO_PRIORITY
setting
generic packet mark
Pacing rate (if supported by transport/packet scheduler)
Maximum pacing rate (SO_MAX_PACING_RATE
)
cached page frag
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
allocation mode
computed flow hash for use on transmit
unused element for alignment
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
socket type (SOCK_STREAM
, etc)
Maximum number of GSO segments
SO_LINGER
l_linger setting
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
struct pid for this socket's peer
SO_PEERCRED
setting
SO_RCVTIMEO
setting
time stamp of last packet received
SO_TIMESTAMPING socket options
mask of SEND_SHUTDOWN
and/or RCV_SHUTDOWN
counter to disambiguate concurrent tstamp requests
Identd and reporting IO signals
RPC layer private data
used by security modules
cgroup data for this cgroup
this socket's memory cgroup association
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
reuseport group container
used during RCU grace period