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