1 /*
   2  * Copyright 1989 Sun Microsystems, Inc.  All rights reserved.
   3  * Use is subject to license terms.
   4  */
   5 
   6 #pragma ident   "%Z%%M% %I%     %E% SMI"
   7 
   8 /*
   9  * Copyright (c) 1982, 1985, 1986 Regents of the University of California.
  10  * All rights reserved.  The Berkeley software License Agreement
  11  * specifies the terms and conditions for redistribution.
  12  */
  13 
  14 #ifndef _sys_socket_h
  15 #define _sys_socket_h
  16 
  17 /*
  18  * Definitions related to sockets: types, address families, options.
  19  */
  20 
  21 /*
  22  * Types
  23  */
  24 #define SOCK_STREAM     1               /* stream socket */
  25 #define SOCK_DGRAM      2               /* datagram socket */
  26 #define SOCK_RAW        3               /* raw-protocol interface */
  27 #define SOCK_RDM        4               /* reliably-delivered message */
  28 #define SOCK_SEQPACKET  5               /* sequenced packet stream */
  29 
  30 /*
  31  * Option flags per-socket.
  32  */
  33 #define SO_DEBUG        0x0001          /* turn on debugging info recording */
  34 #define SO_ACCEPTCONN   0x0002          /* socket has had listen() */
  35 #define SO_REUSEADDR    0x0004          /* allow local address reuse */
  36 #define SO_KEEPALIVE    0x0008          /* keep connections alive */
  37 #define SO_DONTROUTE    0x0010          /* just use interface addresses */
  38 #define SO_BROADCAST    0x0020          /* permit sending of broadcast msgs */
  39 #define SO_USELOOPBACK  0x0040          /* bypass hardware when possible */
  40 #define SO_LINGER       0x0080          /* linger on close if data present */
  41 #define SO_OOBINLINE    0x0100          /* leave received OOB data in line */
  42 /*
  43  * N.B.: The following definition is present only for compatibility
  44  * with release 3.0.  It will disappear in later releases.
  45  */
  46 #define SO_DONTLINGER   (~SO_LINGER)    /* ~SO_LINGER */
  47 
  48 /*
  49  * Additional options, not kept in so_options.
  50  */
  51 #define SO_SNDBUF       0x1001          /* send buffer size */
  52 #define SO_RCVBUF       0x1002          /* receive buffer size */
  53 #define SO_SNDLOWAT     0x1003          /* send low-water mark */
  54 #define SO_RCVLOWAT     0x1004          /* receive low-water mark */
  55 #define SO_SNDTIMEO     0x1005          /* send timeout */
  56 #define SO_RCVTIMEO     0x1006          /* receive timeout */
  57 #define SO_ERROR        0x1007          /* get error status and clear */
  58 #define SO_TYPE         0x1008          /* get socket type */
  59 
  60 /*
  61  * Structure used for manipulating linger option.
  62  */
  63 struct  linger {
  64         int     l_onoff;                /* option on/off */
  65         int     l_linger;               /* linger time */
  66 };
  67 
  68 /*
  69  * Level number for (get/set)sockopt() to apply to socket itself.
  70  */
  71 #define SOL_SOCKET      0xffff          /* options for socket level */
  72 
  73 /*
  74  * Address families.
  75  */
  76 #define AF_UNSPEC       0               /* unspecified */
  77 #define AF_UNIX         1               /* local to host (pipes, portals) */
  78 #define AF_INET         2               /* internetwork: UDP, TCP, etc. */
  79 #define AF_IMPLINK      3               /* arpanet imp addresses */
  80 #define AF_PUP          4               /* pup protocols: e.g. BSP */
  81 #define AF_CHAOS        5               /* mit CHAOS protocols */
  82 #define AF_NS           6               /* XEROX NS protocols */
  83 #define AF_NBS          7               /* nbs protocols */
  84 #define AF_ECMA         8               /* european computer manufacturers */
  85 #define AF_DATAKIT      9               /* datakit protocols */
  86 #define AF_CCITT        10              /* CCITT protocols, X.25 etc */
  87 #define AF_SNA          11              /* IBM SNA */
  88 #define AF_DECnet       12              /* DECnet */
  89 #define AF_DLI          13              /* Direct data link interface */
  90 #define AF_LAT          14              /* LAT */
  91 #define AF_HYLINK       15              /* NSC Hyperchannel */
  92 #define AF_APPLETALK    16              /* Apple Talk */
  93 
  94 #define AF_NIT          17              /* Network Interface Tap */
  95 #define AF_802          18              /* IEEE 802.2, also ISO 8802 */
  96 #define AF_OSI          19              /* umbrella for all families used
  97                                          * by OSI (e.g. protosw lookup) */
  98 #define AF_X25          20              /* CCITT X.25 in particular */
  99 #define AF_OSINET       21              /* AFI = 47, IDI = 4 */
 100 #define AF_GOSIP        22              /* U.S. Government OSI */
 101 
 102 #define AF_MAX          21
 103 
 104 /*
 105  * Structure used by kernel to store most
 106  * addresses.
 107  */
 108 struct sockaddr {
 109         u_short sa_family;              /* address family */
 110         char    sa_data[14];            /* up to 14 bytes of direct address */
 111 };
 112 
 113 /*
 114  * Structure used by kernel to pass protocol
 115  * information in raw sockets.
 116  */
 117 struct sockproto {
 118         u_short sp_family;              /* address family */
 119         u_short sp_protocol;            /* protocol */
 120 };
 121 
 122 /*
 123  * Protocol families, same as address families for now.
 124  */
 125 #define PF_UNSPEC       AF_UNSPEC
 126 #define PF_UNIX         AF_UNIX
 127 #define PF_INET         AF_INET
 128 #define PF_IMPLINK      AF_IMPLINK
 129 #define PF_PUP          AF_PUP
 130 #define PF_CHAOS        AF_CHAOS
 131 #define PF_NS           AF_NS
 132 #define PF_NBS          AF_NBS
 133 #define PF_ECMA         AF_ECMA
 134 #define PF_DATAKIT      AF_DATAKIT
 135 #define PF_CCITT        AF_CCITT
 136 #define PF_SNA          AF_SNA
 137 #define PF_DECnet       AF_DECnet
 138 #define PF_DLI          AF_DLI
 139 #define PF_LAT          AF_LAT
 140 #define PF_HYLINK       AF_HYLINK
 141 #define PF_APPLETALK    AF_APPLETALK
 142 #define PF_NIT          AF_NIT
 143 #define PF_802          AF_802
 144 #define PF_OSI          AF_OSI
 145 #define PF_X25          AF_X25
 146 #define PF_OSINET       AF_OSINET
 147 #define PF_GOSIP        AF_GOSIP
 148 
 149 #define PF_MAX          AF_MAX
 150 
 151 /*
 152  * Maximum queue length specifiable by listen.
 153  */
 154 #define SOMAXCONN       5
 155 
 156 /*
 157  * Message header for recvmsg and sendmsg calls.
 158  */
 159 struct msghdr {
 160         caddr_t msg_name;               /* optional address */
 161         int     msg_namelen;            /* size of address */
 162         struct  iovec *msg_iov;         /* scatter/gather array */
 163         int     msg_iovlen;             /* # elements in msg_iov */
 164         caddr_t msg_accrights;          /* access rights sent/received */
 165         int     msg_accrightslen;
 166 };
 167 
 168 #define MSG_OOB         0x1             /* process out-of-band data */
 169 #define MSG_PEEK        0x2             /* peek at incoming message */
 170 #define MSG_DONTROUTE   0x4             /* send without using routing tables */
 171 
 172 #define MSG_MAXIOVLEN   16
 173 
 174 #endif /*!_sys_socket_h*/