1 //Written in the D programming language
2 
3 /++
4     D header file for FreeBSD's extensions to POSIX's sys/socket.h.
5 
6     Copyright: Copyright 2023
7     License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
8     Authors:   $(HTTP jmdavisprog.com, Jonathan M Davis)
9  +/
10 module core.sys.freebsd.sys.socket;
11 
12 public import core.sys.posix.sys.socket;
13 
14 version (FreeBSD):
15 extern(C):
16 @nogc:
17 nothrow:
18 
19 // Creation flags, OR'ed into socket() and socketpair() type argument.
20 enum : uint
21 {
22     SOCK_CLOEXEC  = 0x10000000,
23     SOCK_NONBLOCK = 0x20000000,
24 }
25 
26 // Option flags per-socket.
27 enum : uint
28 {
29     SO_USELOOPBACK  = 0x00000040,
30     SO_TIMESTAMP    = 0x00000400,
31     SO_ACCEPTFILTER = 0x00001000,
32     SO_BINTIME      = 0x00002000,
33 
34     SO_NO_OFFLOAD   = 0x00004000,
35     SO_NO_DDP       = 0x00008000,
36     SO_REUSEPORT_LB = 0x00010000,
37     SO_RERROR       = 0x00020000,
38 }
39 
40 
41 // Additional options, not kept in so_options.
42 enum : uint
43 {
44     SO_LABEL           = 0x1009,
45     SO_PEERLABEL       = 0x1010,
46     SO_LISTENQLIMIT    = 0x1011,
47     SO_LISTENQLEN      = 0x1012,
48     SO_LISTENINCQLEN   = 0x1013,
49     SO_SETFIB          = 0x1014,
50     SO_USER_COOKIE     = 0x1015,
51     SO_PROTOCOL        = 0x1016,
52     SO_PROTOTYPE       = SO_PROTOCOL,
53     SO_TS_CLOCK        = 0x1017,
54     SO_MAX_PACING_RATE = 0x1018,
55     SO_DOMAIN          = 0x1019,
56 
57     SO_TS_REALTIME_MICRO = 0,
58     SO_TS_BINTIME        = 1,
59     SO_TS_REALTIME       = 2,
60     SO_TS_MONOTONIC      = 3,
61     SO_TS_DEFAULT        = SO_TS_REALTIME_MICRO,
62     SO_TS_CLOCK_MAX      = SO_TS_MONOTONIC,
63 }
64 
65 /+
66    Space reserved for new socket options added by third-party vendors.
67    This range applies to all socket option levels.  New socket options
68    in FreeBSD should always use an option value less than SO_VENDOR.
69  +/
70 enum : uint
71 {
72     SO_VENDOR = 0x80000000,
73 }
74 
75 struct accept_filter_arg
76 {
77     char[16]      af_name;
78     char [256-16] af_arg;
79 }
80 
81 // Address families.
82 enum : uint
83 {
84     AF_LOCAL = AF_UNIX,
85 
86     AF_IMPLINK = 3,
87     AF_PUP     = 4,
88     AF_CHAOS   = 5,
89     AF_NETBIOS = 6,
90     AF_ISO     = 7,
91     AF_OSI     = AF_ISO,
92     AF_ECMA    = 8,
93     AF_DATAKIT = 9,
94     AF_CCITT   = 10,
95     AF_SNA     = 11,
96     AF_DECnet  = 12,
97     AF_DLI     = 13,
98     AF_LAT     = 14,
99     AF_HYLINK  = 15,
100 
101     AF_ROUTE       = 17,
102     AF_LINK        = 18,
103     pseudo_AF_XTP  = 19,
104     AF_COIP        = 20,
105     AF_CNT         = 21,
106     pseudo_AF_RTIP = 22,
107 
108     AF_SIP        = 24,
109     pseudo_AF_PIP = 25,
110     AF_ISDN       = 26,
111     AF_E164       = AF_ISDN,
112     pseudo_AF_KEY = 27,
113 
114     AF_NATM            = 29,
115     AF_ATM             = 30,
116     pseudo_AF_HDRCMPLT = 31,
117     AF_NETGRAPH        = 32,
118     AF_SLOW            = 33,
119     AF_SCLUSTER        = 34,
120     AF_ARP             = 35,
121     AF_BLUETOOTH       = 36,
122     AF_IEEE80211       = 37,
123     AF_NETLINK         = 38,
124 
125     AF_INET_SDP = 40,
126 
127     AF_INET6_SDP = 42,
128     AF_HYPERV    = 43,
129     AF_DIVERT    = 44,
130     AF_MAX       = 44,
131 }