1<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>struct sock</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="Linux Networking and Network Devices APIs"><link rel="up" href="ch01s02.html" title="Socket Buffer Functions"><link rel="prev" href="API-struct-sock-common.html" title="struct sock_common"><link rel="next" href="API-sk-nulls-for-each-entry-offset.html" title="sk_nulls_for_each_entry_offset"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><span class="phrase">struct sock</span></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="API-struct-sock-common.html">Prev</a> </td><th width="60%" align="center">Socket Buffer Functions</th><td width="20%" align="right"> <a accesskey="n" href="API-sk-nulls-for-each-entry-offset.html">Next</a></td></tr></table><hr></div><div class="refentry"><a name="API-struct-sock"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>struct sock — 
2     network layer representation of sockets
3 </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="programlisting">
4struct sock {
5  struct sock_common __sk_common;
6#define sk_node			__sk_common.skc_node
7#define sk_nulls_node		__sk_common.skc_nulls_node
8#define sk_refcnt		__sk_common.skc_refcnt
9#define sk_tx_queue_mapping	__sk_common.skc_tx_queue_mapping
10#define sk_dontcopy_begin	__sk_common.skc_dontcopy_begin
11#define sk_dontcopy_end		__sk_common.skc_dontcopy_end
12#define sk_hash			__sk_common.skc_hash
13#define sk_portpair		__sk_common.skc_portpair
14#define sk_num			__sk_common.skc_num
15#define sk_dport		__sk_common.skc_dport
16#define sk_addrpair		__sk_common.skc_addrpair
17#define sk_daddr		__sk_common.skc_daddr
18#define sk_rcv_saddr		__sk_common.skc_rcv_saddr
19#define sk_family		__sk_common.skc_family
20#define sk_state		__sk_common.skc_state
21#define sk_reuse		__sk_common.skc_reuse
22#define sk_reuseport		__sk_common.skc_reuseport
23#define sk_ipv6only		__sk_common.skc_ipv6only
24#define sk_net_refcnt		__sk_common.skc_net_refcnt
25#define sk_bound_dev_if		__sk_common.skc_bound_dev_if
26#define sk_bind_node		__sk_common.skc_bind_node
27#define sk_prot			__sk_common.skc_prot
28#define sk_net			__sk_common.skc_net
29#define sk_v6_daddr		__sk_common.skc_v6_daddr
30#define sk_v6_rcv_saddr	__sk_common.skc_v6_rcv_saddr
31#define sk_cookie		__sk_common.skc_cookie
32#define sk_incoming_cpu		__sk_common.skc_incoming_cpu
33#define sk_flags		__sk_common.skc_flags
34#define sk_rxhash		__sk_common.skc_rxhash
35  socket_lock_t sk_lock;
36  struct sk_buff_head sk_receive_queue;
37  struct {unnamed_struct};
38#ifdef CONFIG_XFRM
39  struct xfrm_policy __rcu * sk_policy[2];
40#endif
41  struct dst_entry * sk_rx_dst;
42  struct dst_entry __rcu * sk_dst_cache;
43  atomic_t sk_wmem_alloc;
44  atomic_t sk_omem_alloc;
45  int sk_sndbuf;
46  struct sk_buff_head sk_write_queue;
47  unsigned int sk_shutdown:2;
48  unsigned int sk_no_check_tx:1;
49  unsigned int sk_no_check_rx:1;
50  unsigned int sk_userlocks:4;
51  unsigned int sk_protocol:8;
52  unsigned int sk_type:16;
53#define SK_PROTOCOL_MAX U8_MAX
54  int sk_wmem_queued;
55  gfp_t sk_allocation;
56  u32 sk_pacing_rate;
57  u32 sk_max_pacing_rate;
58  netdev_features_t sk_route_caps;
59  netdev_features_t sk_route_nocaps;
60  int sk_gso_type;
61  unsigned int sk_gso_max_size;
62  u16 sk_gso_max_segs;
63  int sk_rcvlowat;
64  unsigned long sk_lingertime;
65  struct sk_buff_head sk_error_queue;
66  struct proto * sk_prot_creator;
67  rwlock_t sk_callback_lock;
68  int sk_err;
69  int sk_err_soft;
70  u32 sk_ack_backlog;
71  u32 sk_max_ack_backlog;
72  __u32 sk_priority;
73#if IS_ENABLED(CONFIG_CGROUP_NET_PRIO)
74  __u32 sk_cgrp_prioidx;
75#endif
76  struct pid * sk_peer_pid;
77  const struct cred * sk_peer_cred;
78  long sk_rcvtimeo;
79  long sk_sndtimeo;
80  struct timer_list sk_timer;
81  ktime_t sk_stamp;
82  u16 sk_tsflags;
83  u32 sk_tskey;
84  struct socket * sk_socket;
85  void * sk_user_data;
86  struct page_frag sk_frag;
87  struct sk_buff * sk_send_head;
88  __s32 sk_peek_off;
89  int sk_write_pending;
90#ifdef CONFIG_SECURITY
91  void * sk_security;
92#endif
93  __u32 sk_mark;
94#ifdef CONFIG_CGROUP_NET_CLASSID
95  u32 sk_classid;
96#endif
97  struct cg_proto * sk_cgrp;
98  void (* sk_state_change) (struct sock *sk);
99  void (* sk_data_ready) (struct sock *sk);
100  void (* sk_write_space) (struct sock *sk);
101  void (* sk_error_report) (struct sock *sk);
102  int (* sk_backlog_rcv) (struct sock *sk,struct sk_buff *skb);
103  void (* sk_destruct) (struct sock *sk);
104};  </pre></div><div class="refsect1"><a name="id-1.3.3.77.5"></a><h2>Members</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term">__sk_common</span></dt><dd><p>
105   shared layout with inet_timewait_sock
106      </p></dd><dt><span class="term">sk_lock</span></dt><dd><p>
107   synchronizer
108      </p></dd><dt><span class="term">sk_receive_queue</span></dt><dd><p>
109   incoming packets
110      </p></dd><dt><span class="term">{unnamed_struct}</span></dt><dd><p>
111   anonymous
112      </p></dd><dt><span class="term">sk_policy[2]</span></dt><dd><p>
113   flow policy
114      </p></dd><dt><span class="term">sk_rx_dst</span></dt><dd><p>
115   receive input route used by early demux
116      </p></dd><dt><span class="term">sk_dst_cache</span></dt><dd><p>
117   destination cache
118      </p></dd><dt><span class="term">sk_wmem_alloc</span></dt><dd><p>
119   transmit queue bytes committed
120      </p></dd><dt><span class="term">sk_omem_alloc</span></dt><dd><p>
121   "o<span class="quote">“<span class="quote"> is </span>”</span>option<span class="quote">“<span class="quote"> or </span>”</span>other"
122      </p></dd><dt><span class="term">sk_sndbuf</span></dt><dd><p>
123   size of send buffer in bytes
124      </p></dd><dt><span class="term">sk_write_queue</span></dt><dd><p>
125   Packet sending queue
126      </p></dd><dt><span class="term">sk_shutdown</span></dt><dd><p>
127   mask of <code class="constant">SEND_SHUTDOWN</code> and/or <code class="constant">RCV_SHUTDOWN</code>
128      </p></dd><dt><span class="term">sk_no_check_tx</span></dt><dd><p>
129   <code class="constant">SO_NO_CHECK</code> setting, set checksum in TX packets
130      </p></dd><dt><span class="term">sk_no_check_rx</span></dt><dd><p>
131   allow zero checksum in RX packets
132      </p></dd><dt><span class="term">sk_userlocks</span></dt><dd><p>
133   <code class="constant">SO_SNDBUF</code> and <code class="constant">SO_RCVBUF</code> settings
134      </p></dd><dt><span class="term">sk_protocol</span></dt><dd><p>
135   which protocol this socket belongs in this network family
136      </p></dd><dt><span class="term">sk_type</span></dt><dd><p>
137   socket type (<code class="constant">SOCK_STREAM</code>, etc)
138      </p></dd><dt><span class="term">sk_wmem_queued</span></dt><dd><p>
139   persistent queue size
140      </p></dd><dt><span class="term">sk_allocation</span></dt><dd><p>
141   allocation mode
142      </p></dd><dt><span class="term">sk_pacing_rate</span></dt><dd><p>
143   Pacing rate (if supported by transport/packet scheduler)
144      </p></dd><dt><span class="term">sk_max_pacing_rate</span></dt><dd><p>
145   Maximum pacing rate (<code class="constant">SO_MAX_PACING_RATE</code>)
146      </p></dd><dt><span class="term">sk_route_caps</span></dt><dd><p>
147   route capabilities (e.g. <code class="constant">NETIF_F_TSO</code>)
148      </p></dd><dt><span class="term">sk_route_nocaps</span></dt><dd><p>
149   forbidden route capabilities (e.g NETIF_F_GSO_MASK)
150      </p></dd><dt><span class="term">sk_gso_type</span></dt><dd><p>
151   GSO type (e.g. <code class="constant">SKB_GSO_TCPV4</code>)
152      </p></dd><dt><span class="term">sk_gso_max_size</span></dt><dd><p>
153   Maximum GSO segment size to build
154      </p></dd><dt><span class="term">sk_gso_max_segs</span></dt><dd><p>
155   Maximum number of GSO segments
156      </p></dd><dt><span class="term">sk_rcvlowat</span></dt><dd><p>
157   <code class="constant">SO_RCVLOWAT</code> setting
158      </p></dd><dt><span class="term">sk_lingertime</span></dt><dd><p>
159   <code class="constant">SO_LINGER</code> l_linger setting
160      </p></dd><dt><span class="term">sk_error_queue</span></dt><dd><p>
161   rarely used
162      </p></dd><dt><span class="term">sk_prot_creator</span></dt><dd><p>
163   sk_prot of original sock creator (see ipv6_setsockopt,
164   IPV6_ADDRFORM for instance)
165      </p></dd><dt><span class="term">sk_callback_lock</span></dt><dd><p>
166   used with the callbacks in the end of this struct
167      </p></dd><dt><span class="term">sk_err</span></dt><dd><p>
168   last error
169      </p></dd><dt><span class="term">sk_err_soft</span></dt><dd><p>
170   errors that don't cause failure but are the cause of a
171   persistent failure not just 'timed out'
172      </p></dd><dt><span class="term">sk_ack_backlog</span></dt><dd><p>
173   current listen backlog
174      </p></dd><dt><span class="term">sk_max_ack_backlog</span></dt><dd><p>
175   listen backlog set in <code class="function">listen</code>
176      </p></dd><dt><span class="term">sk_priority</span></dt><dd><p>
177   <code class="constant">SO_PRIORITY</code> setting
178      </p></dd><dt><span class="term">sk_cgrp_prioidx</span></dt><dd><p>
179   socket group's priority map index
180      </p></dd><dt><span class="term">sk_peer_pid</span></dt><dd><p>
181   <span class="structname">struct pid</span> for this socket's peer
182      </p></dd><dt><span class="term">sk_peer_cred</span></dt><dd><p>
183   <code class="constant">SO_PEERCRED</code> setting
184      </p></dd><dt><span class="term">sk_rcvtimeo</span></dt><dd><p>
185   <code class="constant">SO_RCVTIMEO</code> setting
186      </p></dd><dt><span class="term">sk_sndtimeo</span></dt><dd><p>
187   <code class="constant">SO_SNDTIMEO</code> setting
188      </p></dd><dt><span class="term">sk_timer</span></dt><dd><p>
189   sock cleanup timer
190      </p></dd><dt><span class="term">sk_stamp</span></dt><dd><p>
191   time stamp of last packet received
192      </p></dd><dt><span class="term">sk_tsflags</span></dt><dd><p>
193   SO_TIMESTAMPING socket options
194      </p></dd><dt><span class="term">sk_tskey</span></dt><dd><p>
195   counter to disambiguate concurrent tstamp requests
196      </p></dd><dt><span class="term">sk_socket</span></dt><dd><p>
197   Identd and reporting IO signals
198      </p></dd><dt><span class="term">sk_user_data</span></dt><dd><p>
199   RPC layer private data
200      </p></dd><dt><span class="term">sk_frag</span></dt><dd><p>
201   cached page frag
202      </p></dd><dt><span class="term">sk_send_head</span></dt><dd><p>
203   front of stuff to transmit
204      </p></dd><dt><span class="term">sk_peek_off</span></dt><dd><p>
205   current peek_offset value
206      </p></dd><dt><span class="term">sk_write_pending</span></dt><dd><p>
207   a write to stream socket waits to start
208      </p></dd><dt><span class="term">sk_security</span></dt><dd><p>
209   used by security modules
210      </p></dd><dt><span class="term">sk_mark</span></dt><dd><p>
211   generic packet mark
212      </p></dd><dt><span class="term">sk_classid</span></dt><dd><p>
213   this socket's cgroup classid
214      </p></dd><dt><span class="term">sk_cgrp</span></dt><dd><p>
215   this socket's cgroup-specific proto data
216      </p></dd><dt><span class="term">sk_state_change</span></dt><dd><p>
217   callback to indicate change in the state of the sock
218      </p></dd><dt><span class="term">sk_data_ready</span></dt><dd><p>
219   callback to indicate there is data to be processed
220      </p></dd><dt><span class="term">sk_write_space</span></dt><dd><p>
221   callback to indicate there is bf sending space available
222      </p></dd><dt><span class="term">sk_error_report</span></dt><dd><p>
223   callback to indicate errors (e.g. <code class="constant">MSG_ERRQUEUE</code>)
224      </p></dd><dt><span class="term">sk_backlog_rcv</span></dt><dd><p>
225   callback to process the backlog
226      </p></dd><dt><span class="term">sk_destruct</span></dt><dd><p>
227   called at sock freeing time, i.e. when all refcnt == 0
228      </p></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="API-struct-sock-common.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch01s02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="API-sk-nulls-for-each-entry-offset.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"><span class="phrase">struct sock_common</span> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> <span class="phrase">sk_nulls_for_each_entry_offset</span></td></tr></table></div></body></html>
229