From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/ext/socket/mkconstants.rb | 804 +++++++++++++++++++++++++++++++++++++ 1 file changed, 804 insertions(+) create mode 100644 jni/ruby/ext/socket/mkconstants.rb (limited to 'jni/ruby/ext/socket/mkconstants.rb') diff --git a/jni/ruby/ext/socket/mkconstants.rb b/jni/ruby/ext/socket/mkconstants.rb new file mode 100644 index 0000000..59fcb17 --- /dev/null +++ b/jni/ruby/ext/socket/mkconstants.rb @@ -0,0 +1,804 @@ +require 'optparse' +require 'erb' + +opt = OptionParser.new + +opt.def_option('-h', 'help') { + puts opt + exit 0 +} + +opt_o = nil +opt.def_option('-o FILE', 'specify output file') {|filename| + opt_o = filename +} + +opt_H = nil +opt.def_option('-H FILE', 'specify output header file') {|filename| + opt_H = filename +} + +C_ESC = { + "\\" => "\\\\", + '"' => '\"', + "\n" => '\n', +} + +0x00.upto(0x1f) {|ch| C_ESC[[ch].pack("C")] ||= "\\%03o" % ch } +0x7f.upto(0xff) {|ch| C_ESC[[ch].pack("C")] = "\\%03o" % ch } +C_ESC_PAT = Regexp.union(*C_ESC.keys) + +def c_str(str) + '"' + str.gsub(C_ESC_PAT) {|s| C_ESC[s]} + '"' +end + +opt.parse! + + + +h = {} +COMMENTS = Hash.new { |h, name| h[name] = name } + +DATA.each_line {|s| + name, default_value, comment = s.chomp.split(/\s+/, 3) + next unless name && name[0] != ?# + + default_value = nil if default_value == 'nil' + + if h.has_key? name + warn "#{$.}: warning: duplicate name: #{name}" + next + end + h[name] = default_value + COMMENTS[name] = comment +} +DEFS = h.to_a + +def each_const + DEFS.each {|name, default_value| + guard = nil + if /\A(AF_INET6|PF_INET6|IPV6_.*)\z/ =~ name + # IPv6 is not supported although AF_INET6 is defined on mingw + guard = "defined(INET6)" + end + yield guard, name, default_value + } +end + +def each_name(pat) + DEFS.each {|name, default_value| + next if pat !~ name + yield name + } +end + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_decls") +% each_const {|guard, name, default_value| +#if !defined(<%=name%>) +# if defined(HAVE_CONST_<%=name.upcase%>) +# define <%=name%> <%=name%> +%if default_value +# else +# define <%=name%> <%=default_value%> +%end +# endif +#endif +% } +EOS + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_defs_in_guard(name, default_value)") +#if defined(<%=name%>) + /* <%= COMMENTS[name] %> */ + rb_define_const(rb_cSocket, <%=c_str name%>, INTEGER2NUM(<%=name%>)); + /* <%= COMMENTS[name] %> */ + rb_define_const(rb_mSockConst, <%=c_str name%>, INTEGER2NUM(<%=name%>)); +#endif +EOS + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_defs") +% each_const {|guard, name, default_value| +% if guard +#if <%=guard%> +<%= gen_const_defs_in_guard(name, default_value).chomp %> +#endif +% else +<%= gen_const_defs_in_guard(name, default_value).chomp %> +% end +% } +EOS + +def reverse_each_name(pat) + DEFS.reverse_each {|name, default_value| + next if pat !~ name + yield name + } +end + +def each_names_with_len(pat, prefix_optional=nil) + h = {} + DEFS.each {|name, default_value| + next if pat !~ name + (h[name.length] ||= []) << [name, name] + } + if prefix_optional + if Regexp === prefix_optional + prefix_pat = prefix_optional + else + prefix_pat = /\A#{Regexp.escape prefix_optional}/ + end + DEFS.each {|const, default_value| + next if pat !~ const + next if prefix_pat !~ const + name = $' + (h[name.length] ||= []) << [name, const] + } + end + hh = {} + h.each {|len, pairs| + pairs.each {|name, const| + raise "name crash: #{name}" if hh[name] + hh[name] = true + } + } + h.keys.sort.each {|len| + yield h[len], len + } +end + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_decl(funcname, pat, prefix_optional, guard=nil)") +%if guard +#ifdef <%=guard%> +int <%=funcname%>(const char *str, long len, int *valp); +#endif +%else +int <%=funcname%>(const char *str, long len, int *valp); +%end +EOS + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard=nil)") +int +<%=funcname%>(const char *str, long len, int *valp) +{ + switch (len) { +% each_names_with_len(pat, prefix_optional) {|pairs, len| + case <%=len%>: +% pairs.each {|name, const| +#ifdef <%=const%> + if (memcmp(str, <%=c_str name%>, <%=len%>) == 0) { *valp = <%=const%>; return 0; } +#endif +% } + return -1; + +% } + default: + return -1; + } +} +EOS + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func(funcname, pat, prefix_optional, guard=nil)") +%if guard +#ifdef <%=guard%> +<%=gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard)%> +#endif +%else +<%=gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard)%> +%end +EOS + +NAME_TO_INT_DEFS = [] +def def_name_to_int(funcname, pat, prefix_optional, guard=nil) + decl = gen_name_to_int_decl(funcname, pat, prefix_optional, guard) + func = gen_name_to_int_func(funcname, pat, prefix_optional, guard) + NAME_TO_INT_DEFS << [decl, func] +end + +def reverse_each_name_with_prefix_optional(pat, prefix_pat) + reverse_each_name(pat) {|n| + yield n, n + } + if prefix_pat + reverse_each_name(pat) {|n| + next if prefix_pat !~ n + yield n, $' + } + end +end + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat, prefix_pat)") + <%=hash_var%> = st_init_numtable(); +% reverse_each_name_with_prefix_optional(pat, prefix_pat) {|n,s| +#ifdef <%=n%> + st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)rb_intern2(<%=c_str s%>, <%=s.length%>)); +#endif +% } +EOS + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_func(func_name, hash_var)") +ID +<%=func_name%>(int val) +{ + st_data_t name; + if (st_lookup(<%=hash_var%>, (st_data_t)val, &name)) + return (ID)name; + return 0; +} +EOS + +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_decl(func_name, hash_var)") +ID <%=func_name%>(int val); +EOS + +INTERN_DEFS = [] +def def_intern(func_name, pat, prefix_optional=nil) + prefix_pat = nil + if prefix_optional + if Regexp === prefix_optional + prefix_pat = prefix_optional + else + prefix_pat = /\A#{Regexp.escape prefix_optional}/ + end + end + hash_var = "#{func_name}_hash" + vardef = "static st_table *#{hash_var};" + gen_hash = gen_int_to_name_hash(hash_var, pat, prefix_pat) + decl = gen_int_to_name_decl(func_name, hash_var) + func = gen_int_to_name_func(func_name, hash_var) + INTERN_DEFS << [vardef, gen_hash, decl, func] +end + +def_name_to_int("rsock_family_to_int", /\A(AF_|PF_)/, "AF_") +def_name_to_int("rsock_socktype_to_int", /\ASOCK_/, "SOCK_") +def_name_to_int("rsock_ipproto_to_int", /\AIPPROTO_/, "IPPROTO_") +def_name_to_int("rsock_unknown_level_to_int", /\ASOL_SOCKET\z/, "SOL_") +def_name_to_int("rsock_ip_level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) +def_name_to_int("rsock_so_optname_to_int", /\ASO_/, "SO_") +def_name_to_int("rsock_ip_optname_to_int", /\AIP_/, "IP_") +def_name_to_int("rsock_ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6") +def_name_to_int("rsock_tcp_optname_to_int", /\ATCP_/, "TCP_") +def_name_to_int("rsock_udp_optname_to_int", /\AUDP_/, "UDP_") +def_name_to_int("rsock_shutdown_how_to_int", /\ASHUT_/, "SHUT_") +def_name_to_int("rsock_scm_optname_to_int", /\ASCM_/, "SCM_") + +def_intern('rsock_intern_family', /\AAF_/) +def_intern('rsock_intern_family_noprefix', /\AAF_/, "AF_") +def_intern('rsock_intern_protocol_family', /\APF_/) +def_intern('rsock_intern_socktype', /\ASOCK_/) +def_intern('rsock_intern_ipproto', /\AIPPROTO_/) +def_intern('rsock_intern_iplevel', /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) +def_intern('rsock_intern_so_optname', /\ASO_/, "SO_") +def_intern('rsock_intern_ip_optname', /\AIP_/, "IP_") +def_intern('rsock_intern_ipv6_optname', /\AIPV6_/, "IPV6_") +def_intern('rsock_intern_tcp_optname', /\ATCP_/, "TCP_") +def_intern('rsock_intern_udp_optname', /\AUDP_/, "UDP_") +def_intern('rsock_intern_scm_optname', /\ASCM_/, "SCM_") +def_intern('rsock_intern_local_optname', /\ALOCAL_/, "LOCAL_") + +result = ERB.new(<<'EOS', nil, '%').result(binding) +/* autogenerated file */ + +<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| vardef }.join("\n") %> + +#ifdef HAVE_LONG_LONG +#define INTEGER2NUM(n) \ + (FIXNUM_MAX < (n) ? ULL2NUM(n) : \ + FIXNUM_MIN > (LONG_LONG)(n) ? LL2NUM(n) : \ + LONG2FIX(n)) +#else +#define INTEGER2NUM(n) \ + (FIXNUM_MAX < (n) ? ULONG2NUM(n) : \ + FIXNUM_MIN > (long)(n) ? LONG2NUM(n) : \ + LONG2FIX(n)) +#endif + +static void +init_constants(void) +{ + /* + * Document-module: Socket::Constants + * + * Socket::Constants provides socket-related constants. All possible + * socket constants are listed in the documentation but they may not all + * be present on your platform. + * + * If the underlying platform doesn't define a constant the corresponding + * Ruby constant is not defined. + * + */ + rb_mSockConst = rb_define_module_under(rb_cSocket, "Constants"); + +<%= gen_const_defs %> +<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| gen_hash }.join("\n") %> +} + +<%= NAME_TO_INT_DEFS.map {|decl, func| func }.join("\n") %> + +<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| func }.join("\n") %> + +EOS + +header_result = ERB.new(<<'EOS', nil, '%').result(binding) +/* autogenerated file */ +<%= gen_const_decls %> +<%= NAME_TO_INT_DEFS.map {|decl, func| decl }.join("\n") %> +<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| decl }.join("\n") %> +EOS + +if opt_H + File.open(opt_H, 'w') {|f| + f << header_result + } +else + result = header_result + result +end + +if opt_o + File.open(opt_o, 'w') {|f| + f << result + } +else + $stdout << result +end + +__END__ + +SOCK_STREAM nil A stream socket provides a sequenced, reliable two-way connection for a byte stream +SOCK_DGRAM nil A datagram socket provides connectionless, unreliable messaging +SOCK_RAW nil A raw socket provides low-level access for direct access or implementing network protocols +SOCK_RDM nil A reliable datagram socket provides reliable delivery of messages +SOCK_SEQPACKET nil A sequential packet socket provides sequenced, reliable two-way connection for datagrams +SOCK_PACKET nil Device-level packet access + +AF_UNSPEC nil Unspecified protocol, any supported address family +PF_UNSPEC nil Unspecified protocol, any supported address family +AF_INET nil IPv4 protocol +PF_INET nil IPv4 protocol +AF_INET6 nil IPv6 protocol +PF_INET6 nil IPv6 protocol +AF_UNIX nil UNIX sockets +PF_UNIX nil UNIX sockets +AF_AX25 nil AX.25 protocol +PF_AX25 nil AX.25 protocol +AF_IPX nil IPX protocol +PF_IPX nil IPX protocol +AF_APPLETALK nil AppleTalk protocol +PF_APPLETALK nil AppleTalk protocol +AF_LOCAL nil Host-internal protocols +PF_LOCAL nil Host-internal protocols +AF_IMPLINK nil ARPANET IMP protocol +PF_IMPLINK nil ARPANET IMP protocol +AF_PUP nil PARC Universal Packet protocol +PF_PUP nil PARC Universal Packet protocol +AF_CHAOS nil MIT CHAOS protocols +PF_CHAOS nil MIT CHAOS protocols +AF_NS nil XEROX NS protocols +PF_NS nil XEROX NS protocols +AF_ISO nil ISO Open Systems Interconnection protocols +PF_ISO nil ISO Open Systems Interconnection protocols +AF_OSI nil ISO Open Systems Interconnection protocols +PF_OSI nil ISO Open Systems Interconnection protocols +AF_ECMA nil European Computer Manufacturers protocols +PF_ECMA nil European Computer Manufacturers protocols +AF_DATAKIT nil Datakit protocol +PF_DATAKIT nil Datakit protocol +AF_CCITT nil CCITT (now ITU-T) protocols +PF_CCITT nil CCITT (now ITU-T) protocols +AF_SNA nil IBM SNA protocol +PF_SNA nil IBM SNA protocol +AF_DEC nil DECnet protocol +PF_DEC nil DECnet protocol +AF_DLI nil DEC Direct Data Link Interface protocol +PF_DLI nil DEC Direct Data Link Interface protocol +AF_LAT nil Local Area Transport protocol +PF_LAT nil Local Area Transport protocol +AF_HYLINK nil NSC Hyperchannel protocol +PF_HYLINK nil NSC Hyperchannel protocol +AF_ROUTE nil Internal routing protocol +PF_ROUTE nil Internal routing protocol +AF_LINK nil Link layer interface +PF_LINK nil Link layer interface +AF_COIP nil Connection-oriented IP +PF_COIP nil Connection-oriented IP +AF_CNT nil Computer Network Technology +PF_CNT nil Computer Network Technology +AF_SIP nil Simple Internet Protocol +PF_SIP nil Simple Internet Protocol +AF_NDRV nil Network driver raw access +PF_NDRV nil Network driver raw access +AF_ISDN nil Integrated Services Digital Network +PF_ISDN nil Integrated Services Digital Network +AF_NATM nil Native ATM access +PF_NATM nil Native ATM access +AF_SYSTEM +PF_SYSTEM +AF_NETBIOS nil NetBIOS +PF_NETBIOS nil NetBIOS +AF_PPP nil Point-to-Point Protocol +PF_PPP nil Point-to-Point Protocol +AF_ATM nil Asynchronous Transfer Mode +PF_ATM nil Asynchronous Transfer Mode +AF_NETGRAPH nil Netgraph sockets +PF_NETGRAPH nil Netgraph sockets +AF_MAX nil Maximum address family for this platform +PF_MAX nil Maximum address family for this platform +AF_PACKET nil Direct link-layer access +PF_PACKET nil Direct link-layer access + +AF_E164 nil CCITT (ITU-T) E.164 recommendation +PF_XTP nil eXpress Transfer Protocol +PF_RTIP +PF_PIP +PF_KEY + +MSG_OOB nil Process out-of-band data +MSG_PEEK nil Peek at incoming message +MSG_DONTROUTE nil Send without using the routing tables +MSG_EOR nil Data completes record +MSG_TRUNC nil Data discarded before delivery +MSG_CTRUNC nil Control data lost before delivery +MSG_WAITALL nil Wait for full request or error +MSG_DONTWAIT nil This message should be non-blocking +MSG_EOF nil Data completes connection +MSG_FLUSH nil Start of a hold sequence. Dumps to so_temp +MSG_HOLD nil Hold fragment in so_temp +MSG_SEND nil Send the packet in so_temp +MSG_HAVEMORE nil Data ready to be read +MSG_RCVMORE nil Data remains in the current packet +MSG_COMPAT nil End of record +MSG_PROXY nil Wait for full request +MSG_FIN +MSG_SYN +MSG_CONFIRM nil Confirm path validity +MSG_RST +MSG_ERRQUEUE nil Fetch message from error queue +MSG_NOSIGNAL nil Do not generate SIGPIPE +MSG_MORE nil Sender will send more +MSG_FASTOPEN nil Reduce step of the handshake process + +SOL_SOCKET nil Socket-level options +SOL_IP nil IP socket options +SOL_IPX nil IPX socket options +SOL_AX25 nil AX.25 socket options +SOL_ATALK nil AppleTalk socket options +SOL_TCP nil TCP socket options +SOL_UDP nil UDP socket options + +IPPROTO_IP 0 Dummy protocol for IP +IPPROTO_ICMP 1 Control message protocol +IPPROTO_IGMP nil Group Management Protocol +IPPROTO_GGP nil Gateway to Gateway Protocol +IPPROTO_TCP 6 TCP +IPPROTO_EGP nil Exterior Gateway Protocol +IPPROTO_PUP nil PARC Universal Packet protocol +IPPROTO_UDP 17 UDP +IPPROTO_IDP nil XNS IDP +IPPROTO_HELLO nil "hello" routing protocol +IPPROTO_ND nil Sun net disk protocol +IPPROTO_TP nil ISO transport protocol class 4 +IPPROTO_XTP nil Xpress Transport Protocol +IPPROTO_EON nil ISO cnlp +IPPROTO_BIP +IPPROTO_AH nil IP6 auth header +IPPROTO_DSTOPTS nil IP6 destination option +IPPROTO_ESP nil IP6 Encapsulated Security Payload +IPPROTO_FRAGMENT nil IP6 fragmentation header +IPPROTO_HOPOPTS nil IP6 hop-by-hop options +IPPROTO_ICMPV6 nil ICMP6 +IPPROTO_IPV6 nil IP6 header +IPPROTO_NONE nil IP6 no next header +IPPROTO_ROUTING nil IP6 routing header + +IPPROTO_RAW 255 Raw IP packet +IPPROTO_MAX nil Maximum IPPROTO constant + +# Some port configuration +IPPORT_RESERVED 1024 Default minimum address for bind or connect +IPPORT_USERRESERVED 5000 Default maximum address for bind or connect + +# Some reserved IP v.4 addresses +INADDR_ANY 0x00000000 A socket bound to INADDR_ANY receives packets from all interfaces and sends from the default IP address +INADDR_BROADCAST 0xffffffff The network broadcast address +INADDR_LOOPBACK 0x7F000001 The loopback address +INADDR_UNSPEC_GROUP 0xe0000000 The reserved multicast group +INADDR_ALLHOSTS_GROUP 0xe0000001 Multicast group for all systems on this subset +INADDR_MAX_LOCAL_GROUP 0xe00000ff The last local network multicast group +INADDR_NONE 0xffffffff A bitmask for matching no valid IP address + +# IP [gs]etsockopt options +IP_OPTIONS nil IP options to be included in packets +IP_HDRINCL nil Header is included with data +IP_TOS nil IP type-of-service +IP_TTL nil IP time-to-live +IP_RECVOPTS nil Receive all IP options with datagram +IP_RECVRETOPTS nil Receive all IP options for response +IP_RECVDSTADDR nil Receive IP destination address with datagram +IP_RETOPTS nil IP options to be included in datagrams +IP_MINTTL nil Minimum TTL allowed for received packets +IP_DONTFRAG nil Don't fragment packets +IP_SENDSRCADDR nil Source address for outgoing UDP datagrams +IP_ONESBCAST nil Force outgoing broadcast datagrams to have the undirected broadcast address +IP_RECVTTL nil Receive IP TTL with datagrams +IP_RECVIF nil Receive interface information with datagrams +IP_RECVSLLA nil Receive link-layer address with datagrams +IP_PORTRANGE nil Set the port range for sockets with unspecified port numbers +IP_MULTICAST_IF nil IP multicast interface +IP_MULTICAST_TTL nil IP multicast TTL +IP_MULTICAST_LOOP nil IP multicast loopback +IP_ADD_MEMBERSHIP nil Add a multicast group membership +IP_DROP_MEMBERSHIP nil Drop a multicast group membership +IP_DEFAULT_MULTICAST_TTL nil Default multicast TTL +IP_DEFAULT_MULTICAST_LOOP nil Default multicast loopback +IP_MAX_MEMBERSHIPS nil Maximum number multicast groups a socket can join +IP_ROUTER_ALERT nil Notify transit routers to more closely examine the contents of an IP packet +IP_PKTINFO nil Receive packet information with datagrams +IP_PKTOPTIONS nil Receive packet options with datagrams +IP_MTU_DISCOVER nil Path MTU discovery +IP_RECVERR nil Enable extended reliable error message passing +IP_RECVTOS nil Receive TOS with incoming packets +IP_MTU nil The Maximum Transmission Unit of the socket +IP_FREEBIND nil Allow binding to nonexistent IP addresses +IP_IPSEC_POLICY nil IPsec security policy +IP_XFRM_POLICY +IP_PASSSEC nil Retrieve security context with datagram +IP_TRANSPARENT nil Transparent proxy +IP_PMTUDISC_DONT nil Never send DF frames +IP_PMTUDISC_WANT nil Use per-route hints +IP_PMTUDISC_DO nil Always send DF frames +IP_UNBLOCK_SOURCE nil Unblock IPv4 multicast packets with a give source address +IP_BLOCK_SOURCE nil Block IPv4 multicast packets with a give source address +IP_ADD_SOURCE_MEMBERSHIP nil Add a multicast group membership +IP_DROP_SOURCE_MEMBERSHIP nil Drop a multicast group membership +IP_MSFILTER nil Multicast source filtering + +MCAST_JOIN_GROUP nil Join a multicast group +MCAST_BLOCK_SOURCE nil Block multicast packets from this source +MCAST_UNBLOCK_SOURCE nil Unblock multicast packets from this source +MCAST_LEAVE_GROUP nil Leave a multicast group +MCAST_JOIN_SOURCE_GROUP nil Join a multicast source group +MCAST_LEAVE_SOURCE_GROUP nil Leave a multicast source group +MCAST_MSFILTER nil Multicast source filtering +MCAST_EXCLUDE nil Exclusive multicast source filter +MCAST_INCLUDE nil Inclusive multicast source filter + +SO_DEBUG nil Debug info recording +SO_REUSEADDR nil Allow local address reuse +SO_REUSEPORT nil Allow local address and port reuse +SO_TYPE nil Get the socket type +SO_ERROR nil Get and clear the error status +SO_DONTROUTE nil Use interface addresses +SO_BROADCAST nil Permit sending of broadcast messages +SO_SNDBUF nil Send buffer size +SO_RCVBUF nil Receive buffer size +SO_SNDBUFFORCE nil Send buffer size without wmem_max limit (Linux 2.6.14) +SO_RCVBUFFORCE nil Receive buffer size without rmem_max limit (Linux 2.6.14) +SO_KEEPALIVE nil Keep connections alive +SO_OOBINLINE nil Leave received out-of-band data in-line +SO_NO_CHECK nil Disable checksums +SO_PRIORITY nil The protocol-defined priority for all packets on this socket +SO_LINGER nil Linger on close if data is present +SO_PASSCRED nil Receive SCM_CREDENTIALS messages +SO_PEERCRED nil The credentials of the foreign process connected to this socket +SO_RCVLOWAT nil Receive low-water mark +SO_SNDLOWAT nil Send low-water mark +SO_RCVTIMEO nil Receive timeout +SO_SNDTIMEO nil Send timeout +SO_ACCEPTCONN nil Socket has had listen() called on it +SO_USELOOPBACK nil Bypass hardware when possible +SO_ACCEPTFILTER nil There is an accept filter +SO_DONTTRUNC nil Retain unread data +SO_WANTMORE nil Give a hint when more data is ready +SO_WANTOOBFLAG nil OOB data is wanted in MSG_FLAG on receive +SO_NREAD nil Get first packet byte count +SO_NKE nil Install socket-level Network Kernel Extension +SO_NOSIGPIPE nil Don't SIGPIPE on EPIPE +SO_SECURITY_AUTHENTICATION +SO_SECURITY_ENCRYPTION_TRANSPORT +SO_SECURITY_ENCRYPTION_NETWORK +SO_BINDTODEVICE nil Only send packets from the given interface +SO_ATTACH_FILTER nil Attach an accept filter +SO_DETACH_FILTER nil Detach an accept filter +SO_GET_FILTER nil Obtain filter set by SO_ATTACH_FILTER (Linux 3.8) +SO_PEERNAME nil Name of the connecting user +SO_TIMESTAMP nil Receive timestamp with datagrams (timeval) +SO_TIMESTAMPNS nil Receive nanosecond timestamp with datagrams (timespec) +SO_BINTIME nil Receive timestamp with datagrams (bintime) +SO_RECVUCRED nil Receive user credentials with datagram +SO_MAC_EXEMPT nil Mandatory Access Control exemption for unlabeled peers +SO_ALLZONES nil Bypass zone boundaries +SO_PEERSEC nil Obtain the security credentials (Linux 2.6.2) +SO_PASSSEC nil Toggle security context passing (Linux 2.6.18) +SO_MARK nil Set the mark for mark-based routing (Linux 2.6.25) +SO_TIMESTAMPING nil Time stamping of incoming and outgoing packets (Linux 2.6.30) +SO_PROTOCOL nil Protocol given for socket() (Linux 2.6.32) +SO_DOMAIN nil Domain given for socket() (Linux 2.6.32) +SO_RXQ_OVFL nil Toggle cmsg for number of packets dropped (Linux 2.6.33) +SO_WIFI_STATUS nil Toggle cmsg for wifi status (Linux 3.3) +SO_PEEK_OFF nil Set the peek offset (Linux 3.4) +SO_NOFCS nil Set netns of a socket (Linux 3.4) +SO_LOCK_FILTER nil Lock the filter attached to a socket (Linux 3.9) +SO_SELECT_ERR_QUEUE nil Make select() detect socket error queue with errorfds (Linux 3.10) +SO_BUSY_POLL nil Set the threshold in microseconds for low latency polling (Linux 3.11) +SO_MAX_PACING_RATE nil Cap the rate computed by transport layer. [bytes per second] (Linux 3.13) +SO_BPF_EXTENSIONS nil Query supported BPF extensions (Linux 3.14) + +SOPRI_INTERACTIVE nil Interactive socket priority +SOPRI_NORMAL nil Normal socket priority +SOPRI_BACKGROUND nil Background socket priority + +IPX_TYPE + +TCP_NODELAY nil Don't delay sending to coalesce packets +TCP_MAXSEG nil Set maximum segment size +TCP_CORK nil Don't send partial frames (Linux 2.2, glibc 2.2) +TCP_DEFER_ACCEPT nil Don't notify a listening socket until data is ready (Linux 2.4, glibc 2.2) +TCP_INFO nil Retrieve information about this socket (Linux 2.4, glibc 2.2) +TCP_KEEPCNT nil Maximum number of keepalive probes allowed before dropping a connection (Linux 2.4, glibc 2.2) +TCP_KEEPIDLE nil Idle time before keepalive probes are sent (Linux 2.4, glibc 2.2) +TCP_KEEPINTVL nil Time between keepalive probes (Linux 2.4, glibc 2.2) +TCP_LINGER2 nil Lifetime of orphaned FIN_WAIT2 sockets (Linux 2.4, glibc 2.2) +TCP_MD5SIG nil Use MD5 digests (RFC2385, Linux 2.6.20, glibc 2.7) +TCP_NOOPT nil Don't use TCP options +TCP_NOPUSH nil Don't push the last block of write +TCP_QUICKACK nil Enable quickack mode (Linux 2.4.4, glibc 2.3) +TCP_SYNCNT nil Number of SYN retransmits before a connection is dropped (Linux 2.4, glibc 2.2) +TCP_WINDOW_CLAMP nil Clamp the size of the advertised window (Linux 2.4, glibc 2.2) +TCP_FASTOPEN nil Reduce step of the handshake process (Linux 3.7, glibc 2.18) +TCP_CONGESTION nil TCP congestion control algorithm (Linux 2.6.13, glibc 2.6) +TCP_COOKIE_TRANSACTIONS nil TCP Cookie Transactions (Linux 2.6.33, glibc 2.18) +TCP_QUEUE_SEQ nil Sequence of a queue for repair mode (Linux 3.5, glibc 2.18) +TCP_REPAIR nil Repair mode (Linux 3.5, glibc 2.18) +TCP_REPAIR_OPTIONS nil Options for repair mode (Linux 3.5, glibc 2.18) +TCP_REPAIR_QUEUE nil Queue for repair mode (Linux 3.5, glibc 2.18) +TCP_THIN_DUPACK nil Duplicated acknowledgments handling for thin-streams (Linux 2.6.34, glibc 2.18) +TCP_THIN_LINEAR_TIMEOUTS nil Linear timeouts for thin-streams (Linux 2.6.34, glibc 2.18) +TCP_TIMESTAMP nil TCP timestamp (Linux 3.9, glibc 2.18) +TCP_USER_TIMEOUT nil Max timeout before a TCP connection is aborted (Linux 2.6.37, glibc 2.18) + +UDP_CORK nil Don't send partial frames (Linux 2.5.44, glibc 2.11) + +EAI_ADDRFAMILY nil Address family for hostname not supported +EAI_AGAIN nil Temporary failure in name resolution +EAI_BADFLAGS nil Invalid flags +EAI_FAIL nil Non-recoverable failure in name resolution +EAI_FAMILY nil Address family not supported +EAI_MEMORY nil Memory allocation failure +EAI_NODATA nil No address associated with hostname +EAI_NONAME nil Hostname nor servname, or not known +EAI_OVERFLOW nil Argument buffer overflow +EAI_SERVICE nil Servname not supported for socket type +EAI_SOCKTYPE nil Socket type not supported +EAI_SYSTEM nil System error returned in errno +EAI_BADHINTS nil Invalid value for hints +EAI_PROTOCOL nil Resolved protocol is unknown +EAI_MAX nil Maximum error code from getaddrinfo + +AI_PASSIVE nil Get address to use with bind() +AI_CANONNAME nil Fill in the canonical name +AI_NUMERICHOST nil Prevent host name resolution +AI_NUMERICSERV nil Prevent service name resolution +AI_MASK nil Valid flag mask for getaddrinfo (not for application use) +AI_ALL nil Allow all addresses +AI_V4MAPPED_CFG nil Accept IPv4 mapped addresses if the kernel supports it +AI_ADDRCONFIG nil Accept only if any address is assigned +AI_V4MAPPED nil Accept IPv4-mapped IPv6 addresses +AI_DEFAULT nil Default flags for getaddrinfo + +NI_MAXHOST nil Maximum length of a hostname +NI_MAXSERV nil Maximum length of a service name +NI_NOFQDN nil An FQDN is not required for local hosts, return only the local part +NI_NUMERICHOST nil Return a numeric address +NI_NAMEREQD nil A name is required +NI_NUMERICSERV nil Return the service name as a digit string +NI_DGRAM nil The service specified is a datagram service (looks up UDP ports) + +SHUT_RD 0 Shut down the reading side of the socket +SHUT_WR 1 Shut down the writing side of the socket +SHUT_RDWR 2 Shut down the both sides of the socket + +IPV6_JOIN_GROUP nil Join a group membership +IPV6_LEAVE_GROUP nil Leave a group membership +IPV6_MULTICAST_HOPS nil IP6 multicast hops +IPV6_MULTICAST_IF nil IP6 multicast interface +IPV6_MULTICAST_LOOP nil IP6 multicast loopback +IPV6_UNICAST_HOPS nil IP6 unicast hops +IPV6_V6ONLY nil Only bind IPv6 with a wildcard bind +IPV6_CHECKSUM nil Checksum offset for raw sockets +IPV6_DONTFRAG nil Don't fragment packets +IPV6_DSTOPTS nil Destination option +IPV6_HOPLIMIT nil Hop limit +IPV6_HOPOPTS nil Hop-by-hop option +IPV6_NEXTHOP nil Next hop address +IPV6_PATHMTU nil Retrieve current path MTU +IPV6_PKTINFO nil Receive packet information with datagram +IPV6_RECVDSTOPTS nil Receive all IP6 options for response +IPV6_RECVHOPLIMIT nil Receive hop limit with datagram +IPV6_RECVHOPOPTS nil Receive hop-by-hop options +IPV6_RECVPKTINFO nil Receive destination IP address and incoming interface +IPV6_RECVRTHDR nil Receive routing header +IPV6_RECVTCLASS nil Receive traffic class +IPV6_RTHDR nil Allows removal of sticky routing headers +IPV6_RTHDRDSTOPTS nil Allows removal of sticky destination options header +IPV6_RTHDR_TYPE_0 nil Routing header type 0 +IPV6_RECVPATHMTU nil Receive current path MTU with datagram +IPV6_TCLASS nil Specify the traffic class +IPV6_USE_MIN_MTU nil Use the minimum MTU size + +INET_ADDRSTRLEN 16 Maximum length of an IPv4 address string +INET6_ADDRSTRLEN 46 Maximum length of an IPv6 address string +IFNAMSIZ nil Maximum interface name size +IF_NAMESIZE nil Maximum interface name size + +SOMAXCONN 5 Maximum connection requests that may be queued for a socket + +SCM_RIGHTS nil Access rights +SCM_TIMESTAMP nil Timestamp (timeval) +SCM_TIMESTAMPNS nil Timespec (timespec) +SCM_TIMESTAMPING nil Timestamp (timespec list) (Linux 2.6.30) +SCM_BINTIME nil Timestamp (bintime) +SCM_CREDENTIALS nil The sender's credentials +SCM_CREDS nil Process credentials +SCM_UCRED nil User credentials +SCM_WIFI_STATUS nil Wifi status (Linux 3.3) + +LOCAL_PEERCRED nil Retrieve peer credentials +LOCAL_CREDS nil Pass credentials to receiver +LOCAL_CONNWAIT nil Connect blocks until accepted + +IFF_802_1Q_VLAN nil 802.1Q VLAN device +IFF_ALLMULTI nil receive all multicast packets +IFF_ALTPHYS nil use alternate physical connection +IFF_AUTOMEDIA nil auto media select active +IFF_BONDING nil bonding master or slave +IFF_BRIDGE_PORT nil device used as bridge port +IFF_BROADCAST nil broadcast address valid +IFF_CANTCONFIG nil unconfigurable using ioctl(2) +IFF_DEBUG nil turn on debugging +IFF_DISABLE_NETPOLL nil disable netpoll at run-time +IFF_DONT_BRIDGE nil disallow bridging this ether dev +IFF_DORMANT nil driver signals dormant +IFF_DRV_OACTIVE nil tx hardware queue is full +IFF_DRV_RUNNING nil resources allocated +IFF_DYING nil interface is winding down +IFF_DYNAMIC nil dialup device with changing addresses +IFF_EBRIDGE nil ethernet bridging device +IFF_ECHO nil echo sent packets +IFF_ISATAP nil ISATAP interface (RFC4214) +IFF_LINK0 nil per link layer defined bit 0 +IFF_LINK1 nil per link layer defined bit 1 +IFF_LINK2 nil per link layer defined bit 2 +IFF_LIVE_ADDR_CHANGE nil hardware address change when it's running +IFF_LOOPBACK nil loopback net +IFF_LOWER_UP nil driver signals L1 up +IFF_MACVLAN_PORT nil device used as macvlan port +IFF_MASTER nil master of a load balancer +IFF_MASTER_8023AD nil bonding master, 802.3ad. +IFF_MASTER_ALB nil bonding master, balance-alb. +IFF_MASTER_ARPMON nil bonding master, ARP mon in use +IFF_MONITOR nil user-requested monitor mode +IFF_MULTICAST nil supports multicast +IFF_NOARP nil no address resolution protocol +IFF_NOTRAILERS nil avoid use of trailers +IFF_OACTIVE nil transmission in progress +IFF_OVS_DATAPATH nil device used as Open vSwitch datapath port +IFF_POINTOPOINT nil point-to-point link +IFF_PORTSEL nil can set media type +IFF_PPROMISC nil user-requested promisc mode +IFF_PROMISC nil receive all packets +IFF_RENAMING nil interface is being renamed +IFF_ROUTE nil routing entry installed +IFF_RUNNING nil resources allocated +IFF_SIMPLEX nil can't hear own transmissions +IFF_SLAVE nil slave of a load balancer +IFF_SLAVE_INACTIVE nil bonding slave not the curr. active +IFF_SLAVE_NEEDARP nil need ARPs for validation +IFF_SMART nil interface manages own routes +IFF_STATICARP nil static ARP +IFF_SUPP_NOFCS nil sending custom FCS +IFF_TEAM_PORT nil used as team port +IFF_TX_SKB_SHARING nil sharing skbs on transmit +IFF_UNICAST_FLT nil unicast filtering +IFF_UP nil interface is up +IFF_WAN_HDLC nil WAN HDLC device +IFF_XMIT_DST_RELEASE nil dev_hard_start_xmit() is allowed to release skb->dst +IFF_VOLATILE nil volatile flags +IFF_CANTCHANGE nil flags not changeable -- cgit v1.2.3