📄 socketvar.h
字号:
/* socketvar.h - internal socket structures and definitions *//* * Copyright (c) 2001-2005 Wind River Systems, Inc. * * The right to copy, distribute, modify or otherwise make use * of this software may be licensed only pursuant to the terms * of an applicable Wind River license agreement. *//* * Copyright (c) 1982, 1986, 1990, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)socketvar.h 8.3 (Berkeley) 2/19/95 * $FreeBSD: src/sys/sys/socketvar.h,v 1.46.2.9 2002/08/14 22:23:10 dg Exp $ *//*modification history--------------------02e,15sep05,kch Added so_vlan_options to socket structure. Modified SO_VLAN_ADD() macro to use the so_vlan_options (SPR #112513).02d,23aug05,kch Keep the vlan in m_pkthdr in host byte order.02c,09aug05,kch Added so_vlan to socket structure.02b,27feb05,dlk Make so_linger an unsigned short; part of linger time-out support.02a,09feb05,dlk Embed socket semaphores in struct socket. Remove excess semaphores. Added unixIoctlMemValidate() routine.01z,07feb05,vvv _KERNEL cleanup01y,02feb05,vvv replaced _WRS_KERNEL with _KERNEL to fix build error01x,24jan05,dlk Remove sb_sel member of struct sockbuf; use SB_SEL flag (SPR #105576).01x,14jan05,vvv osdep.h cleanup01w,19sep04,ann removed usage of the SELECT_LIST macro defined in osdep.h.01v,23aug04,rp merged from COMP_WN_IPV6_BASE6_ITER5_TO_UNIFIED_PRE_MERGE01u,28may04,niq Merging from base6 label POST_ITER5_FRZ16_REBASE (ver /main/vdt/base6_itn5_networking-int/1)01t,07jan04,ann fixed sblock definition (SPR #92509)01s,02jan04,vvv added pSoConnTimo field in socket structure01r,08dec03,vvv updated based on inspection comments01q,20nov03,niq Remove copyright_wrs.h file inclusion01p,17nov03,nee Added socket backend table pointer01o,05nov03,cdw Removal of unnecessary _KERNEL guards.01n,04nov03,rlm Ran batch header path update for header re-org.01m,03nov03,rlm Removed wrn/coreip/ prefix from #includes for header re-org.01l,24oct03,cdw update include statements post header re-org.01k,06aug03,nee Accordion Base6 merge from ACCORDION_BASE6_MERGE_BASELINE label01j,09may03,vvv included semLib.h and selectLib.h01i,01feb03,pas merge from FreeBSD 4.7 - added sf_buf functions01h,06sep02,hsh add c++ protection01g,02feb02,ham changed for tornado build.01f,13dec01,ann enabling the xsockets for sysctl01e,29oct01,ann fixing bugs from the test mode01d,12sep01,ann changing the sbfree macro based on new buffer library01c,24aug01,ann changing the path for protosw.h01b,10aug01,ann more porting stuff01a,02aug01,ann performed the WRS-port from FreeBSD 4.3 v 1.46.2.5*/#ifndef _SYS_SOCKETVAR_H_#define _SYS_SOCKETVAR_H_#include <net/protosw.h>#include <sys/queue.h>#include <semLib.h>#include <selectLib.h>#include <sockFunc.h>#ifdef __cplusplus extern "C" {#endif/* * Kernel structure per socket. * Contains send and receive buffer queues, * handle on protocol and pointer to protocol * private data and error information. */typedef u_quad_t so_gen_t;/* * WRS-port * - if 0'd so_zone, and the accept filter members */#ifdef _WRS_KERNELstruct socket { struct sockFunc *pSockFuncTbl; /* socket backend function table */ short so_type; /* generic type, see socket.h */ short so_options; /* from socket call, see socket.h */ u_short so_linger; /* time to linger while closing */ short so_state; /* internal state flags SS_*, below */ caddr_t so_pcb; /* protocol control block */ struct protosw *so_proto; /* protocol handle *//* * Variables for connection queuing. * Socket where accepts occur is so_head in all subsidiary sockets. * If so_head is 0, socket is not related to an accept. * For head socket so_incomp queues partially completed connections, * while so_comp is a queue of connections ready to be accepted. * If a connection is aborted and it has so_head set, then * it has to be pulled out of either so_incomp or so_comp. * We allow connections to queue up based on current queue lengths * and limit on number of queued connections for this socket. */ struct socket *so_head; /* back pointer to accept socket */ TAILQ_HEAD(, socket) so_incomp; /* queue of partial unaccepted connections */ TAILQ_HEAD(, socket) so_comp; /* queue of complete unaccepted connections */ TAILQ_ENTRY(socket) so_list; /* list of unaccepted connections */ short so_qlen; /* number of unaccepted connections */ short so_incqlen; /* number of unaccepted incomplete connections */ short so_qlimit; /* max number queued connections */ short so_timeo; /* connection timeout */ u_short so_error; /* error affecting connection */ u_long so_oobmark; /* chars to oob mark */ short so_pgrp; /* WRS extension for ASYNC oper */ int so_fd; /* WRS extension for storing FD */ SEL_WAKEUP_LIST so_selWakeupList; /* WRS extension for select *//* * Variables for socket buffering. */ struct sockbuf { u_long sb_cc; /* actual chars in buffer */ u_long sb_hiwat; /* max actual char count */ u_long sb_mbcnt; /* chars of mbufs used */ u_long sb_mbmax; /* max chars of mbufs to use */ long sb_lowat; /* low water mark */ struct mbuf *sb_mb; /* the mbuf chain */ short sb_flags; /* flags, see below */ short sb_timeo; /* timeout for read/write */ u_long sb_selCount; SEMAPHORE sb_Sem; /* WRS extension for sb semaphore */ } so_rcv, so_snd;#define SB_MAX (256*1024) /* default for max chars in sockbuf */#define SB_LOCK 0x01 /* lock on data queue */#define SB_WANT 0x02 /* someone is waiting to lock */#define SB_WAIT 0x04 /* someone is waiting for data/space */#define SB_SEL 0x08 /* someone is selecting */#define SB_ASYNC 0x10 /* ASYNC I/O, need signals */#define SB_UPCALL 0x20 /* someone wants an upcall */#define SB_NOINTR 0x40 /* operations not interruptible */#define SB_AIO 0x80 /* AIO operations queued */#define SB_KNOTE 0x100 /* kernel note attached */ void (*so_upcall) __P((struct socket *, void *, int)); void *so_upcallarg; /* NB: generation count must not be first; easiest to make it last. */ so_gen_t _so_gencnt; /* generation count */ void *so_emuldata; /* private data for emulators */#ifdef VIRTUAL_STACK unsigned vsid; /* WRS extension for virtual stack ID */ int vsCookie; /* cookie assigned during socket creation and used during socket deletion */#endif int connTimeo; /* connection establishment timeout */#ifdef SOCKET_VLAN /* * The two bytes vlan tag control information are broken into a 3-bit * user priority (0-7), a canonical format indicator (CFI) field (0 for * ethernet), and a 12-bit vlan identifier (VID) */ u_short so_vlan; /* 802.1Q vlan tag control information */ /* * Two possible so_vlan_options currently supported: * CSUM_VLAN - indicates the so_vlan contains valid vlan id and/or user * priority information. Lower layers (i.e. subnet-based * vlan and/or MUX-L2) shall apply the egress classification * and assign the appropriate vlan id if so_vlan does not * specifies a valid vlan id (i.e. vlan id is 0). * tagged frame if the egress classification for the * CSUM_PTAGGED - indicates the so_vlan contains the 802.1P User Priority * information only. Lower layers (i.e. subnet-based vlan * and/or MUX-L2) shall not apply any egress classification * and must send the frame as priority-tagged frame only */ u_short so_vlan_options; #endif /* SOCKET_VLAN */};#endif /* _WRS_KERNEL *//* * Socket state bits. */#define SS_NOFDREF 0x0001 /* no file table ref any more */#define SS_ISCONNECTED 0x0002 /* socket connected to a peer */#define SS_ISCONNECTING 0x0004 /* in process of connecting to peer */#define SS_ISDISCONNECTING 0x0008 /* in process of disconnecting */#define SS_CANTSENDMORE 0x0010 /* can't send more data to peer */#define SS_CANTRCVMORE 0x0020 /* can't receive more data from peer */#define SS_RCVATMARK 0x0040 /* at mark on input */#define SS_PRIV 0x0080 /* privileged for broadcast, raw... */#define SS_NBIO 0x0100 /* non-blocking ops */#define SS_ASYNC 0x0200 /* async i/o notify */#define SS_ISCONFIRMING 0x0400 /* deciding to accept connection req */#define SS_INCOMP 0x0800 /* unaccepted, incomplete connection */#define SS_COMP 0x1000 /* unaccepted, complete connection */#define SS_ISDISCONNECTED 0x2000 /* socket disconnected from peer *//* * Externalized form of struct socket used by the sysctl(3) interface. */struct xsocket { size_t xso_len; /* length of this structure */ struct socket *xso_so; /* makes a convenient handle sometimes */ short so_type; short so_options; u_short so_linger; short so_state; caddr_t so_pcb; /* another convenient handle */ int xso_protocol; int xso_family; short so_qlen; short so_incqlen; short so_qlimit; short so_timeo; u_short so_error; u_long so_oobmark; struct xsockbuf { u_long sb_cc; u_long sb_hiwat;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -