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