Scroll to navigation

STRUCT SOCK(9) Linux Networking STRUCT SOCK(9)

NAME

struct_sock - network layer representation of sockets

SYNOPSIS

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;
__u32 sk_dst_pending_confirm;
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:1;
unsigned int sk_kern_sock:1;
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; };

MEMBERS

struct sock_common __sk_common

shared layout with inet_timewait_sock

socket_lock_t sk_lock

synchronizer

atomic_t sk_drops

raw/udp drops counter

int sk_rcvlowat

SO_RCVLOWAT setting

struct sk_buff_head sk_error_queue

rarely used

struct sk_buff_head sk_receive_queue

incoming packets

struct {unnamed_struct}

anonymous

struct xfrm_policy __rcu * sk_policy[2]

flow policy

struct dst_entry * sk_rx_dst

receive input route used by early demux

struct dst_entry __rcu * sk_dst_cache

destination cache

atomic_t sk_omem_alloc

"o“ is ”option“ or ”other"

int sk_sndbuf

size of send buffer in bytes

int sk_wmem_queued

persistent queue size

atomic_t sk_wmem_alloc

transmit queue bytes committed

struct sk_buff * sk_send_head

front of stuff to transmit

struct sk_buff_head sk_write_queue

Packet sending queue

__s32 sk_peek_off

current peek_offset value

int sk_write_pending

a write to stream socket waits to start

__u32 sk_dst_pending_confirm

need to confirm neighbour

long sk_sndtimeo

SO_SNDTIMEO setting

struct timer_list sk_timer

sock cleanup timer

__u32 sk_priority

SO_PRIORITY setting

__u32 sk_mark

generic packet mark

u32 sk_pacing_rate

Pacing rate (if supported by transport/packet scheduler)

u32 sk_max_pacing_rate

Maximum pacing rate (SO_MAX_PACING_RATE)

struct page_frag sk_frag

cached page frag

netdev_features_t sk_route_caps

route capabilities (e.g. NETIF_F_TSO)

netdev_features_t sk_route_nocaps

forbidden route capabilities (e.g NETIF_F_GSO_MASK)

int sk_gso_type

GSO type (e.g. SKB_GSO_TCPV4)

unsigned int sk_gso_max_size

Maximum GSO segment size to build

gfp_t sk_allocation

allocation mode

__u32 sk_txhash

computed flow hash for use on transmit

unsigned int:1 sk_padding

unused element for alignment

unsigned int:1 sk_kern_sock

True if sock is using kernel lock classes

unsigned int:1 sk_no_check_tx

SO_NO_CHECK setting, set checksum in TX packets

unsigned int:1 sk_no_check_rx

allow zero checksum in RX packets

unsigned int:4 sk_userlocks

SO_SNDBUF and SO_RCVBUF settings

unsigned int:8 sk_protocol

which protocol this socket belongs in this network family

unsigned int:16 sk_type

socket type (SOCK_STREAM, etc)

u16 sk_gso_max_segs

Maximum number of GSO segments

unsigned long sk_lingertime

SO_LINGER l_linger setting

struct proto * sk_prot_creator

sk_prot of original sock creator (see ipv6_setsockopt, IPV6_ADDRFORM for instance)

rwlock_t sk_callback_lock

used with the callbacks in the end of this struct

int sk_err

last error

int sk_err_soft

errors that don't cause failure but are the cause of a persistent failure not just 'timed out'

u32 sk_ack_backlog

current listen backlog

u32 sk_max_ack_backlog

listen backlog set in listen

struct pid * sk_peer_pid

struct pid for this socket's peer

const struct cred * sk_peer_cred

SO_PEERCRED setting

long sk_rcvtimeo

SO_RCVTIMEO setting

ktime_t sk_stamp

time stamp of last packet received

u16 sk_tsflags

SO_TIMESTAMPING socket options

u8 sk_shutdown

mask of SEND_SHUTDOWN and/or RCV_SHUTDOWN

u32 sk_tskey

counter to disambiguate concurrent tstamp requests

struct socket * sk_socket

Identd and reporting IO signals

void * sk_user_data

RPC layer private data

void * sk_security

used by security modules

struct sock_cgroup_data sk_cgrp_data

cgroup data for this cgroup

struct mem_cgroup * sk_memcg

this socket's memory cgroup association

void (*)(struct sock *sk) sk_state_change

callback to indicate change in the state of the sock

void (*)(struct sock *sk) sk_data_ready

callback to indicate there is data to be processed

void (*)(struct sock *sk) sk_write_space

callback to indicate there is bf sending space available

void (*)(struct sock *sk) sk_error_report

callback to indicate errors (e.g. MSG_ERRQUEUE)

int (*)(struct sock *sk,struct sk_buff *skb) sk_backlog_rcv

callback to process the backlog

void (*)(struct sock *sk) sk_destruct

called at sock freeing time, i.e. when all refcnt == 0

struct sock_reuseport __rcu * sk_reuseport_cb

reuseport group container

struct rcu_head sk_rcu

used during RCU grace period

COPYRIGHT

June 2017 Kernel Hackers Manual 4.11