PageRenderTime 49ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/platform/shared/ruby/ext/socket_192/mkconstants.rb

http://github.com/rhomobile/rhodes
Ruby | 696 lines | 655 code | 27 blank | 14 comment | 16 complexity | 2aeef24d2e630b19995d14aaabeefbb5 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, MIT, Apache-2.0, LGPL-2.1, GPL-2.0, MPL-2.0-no-copyleft-exception
  1. require 'optparse'
  2. require 'erb'
  3. opt = OptionParser.new
  4. opt.def_option('-h', 'help') {
  5. puts opt
  6. exit 0
  7. }
  8. opt_o = nil
  9. opt.def_option('-o FILE', 'specify output file') {|filename|
  10. opt_o = filename
  11. }
  12. opt_H = nil
  13. opt.def_option('-H FILE', 'specify output header file') {|filename|
  14. opt_H = filename
  15. }
  16. C_ESC = {
  17. "\\" => "\\\\",
  18. '"' => '\"',
  19. "\n" => '\n',
  20. }
  21. 0x00.upto(0x1f) {|ch| C_ESC[[ch].pack("C")] ||= "\\%03o" % ch }
  22. 0x7f.upto(0xff) {|ch| C_ESC[[ch].pack("C")] = "\\%03o" % ch }
  23. C_ESC_PAT = Regexp.union(*C_ESC.keys)
  24. def c_str(str)
  25. '"' + str.gsub(C_ESC_PAT) {|s| C_ESC[s]} + '"'
  26. end
  27. opt.parse!
  28. h = {}
  29. DATA.each_line {|s|
  30. name, default_value = s.scan(/\S+/)
  31. next unless name && name[0] != ?#
  32. if h.has_key? name
  33. warn "#{$.}: warning: duplicate name: #{name}"
  34. next
  35. end
  36. h[name] = default_value
  37. }
  38. DEFS = h.to_a
  39. def each_const
  40. DEFS.each {|name, default_value|
  41. if name =~ /\AINADDR_/
  42. make_value = "UINT2NUM"
  43. else
  44. make_value = "INT2NUM"
  45. end
  46. guard = nil
  47. if /\A(AF_INET6|PF_INET6|IPV6_.*)\z/ =~ name
  48. # IPv6 is not supported although AF_INET6 is defined on bcc32/mingw
  49. guard = "defined(INET6)"
  50. end
  51. yield guard, make_value, name, default_value
  52. }
  53. end
  54. def each_name(pat)
  55. DEFS.each {|name, default_value|
  56. next if pat !~ name
  57. yield name
  58. }
  59. end
  60. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_decls")
  61. % each_const {|guard, make_value, name, default_value|
  62. #if !defined(<%=name%>)
  63. # if defined(HAVE_CONST_<%=name.upcase%>)
  64. # define <%=name%> <%=name%>
  65. %if default_value
  66. # else
  67. # define <%=name%> <%=default_value%>
  68. %end
  69. # endif
  70. #endif
  71. % }
  72. EOS
  73. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_defs_in_guard(make_value, name, default_value)")
  74. #if defined(<%=name%>)
  75. /* <%=name%>: */
  76. rb_define_const(rb_cSocket, <%=c_str name%>, <%=make_value%>(<%=name%>));
  77. /* <%=name%>: */
  78. rb_define_const(rb_mSockConst, <%=c_str name%>, <%=make_value%>(<%=name%>));
  79. #endif
  80. EOS
  81. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_const_defs")
  82. % each_const {|guard, make_value, name, default_value|
  83. % if guard
  84. #if <%=guard%>
  85. <%= gen_const_defs_in_guard(make_value, name, default_value).chomp %>
  86. #endif
  87. % else
  88. <%= gen_const_defs_in_guard(make_value, name, default_value).chomp %>
  89. % end
  90. % }
  91. EOS
  92. def reverse_each_name(pat)
  93. DEFS.reverse_each {|name, default_value|
  94. next if pat !~ name
  95. yield name
  96. }
  97. end
  98. def each_names_with_len(pat, prefix_optional=nil)
  99. h = {}
  100. DEFS.each {|name, default_value|
  101. next if pat !~ name
  102. (h[name.length] ||= []) << [name, name]
  103. }
  104. if prefix_optional
  105. if Regexp === prefix_optional
  106. prefix_pat = prefix_optional
  107. else
  108. prefix_pat = /\A#{Regexp.escape prefix_optional}/
  109. end
  110. DEFS.each {|const, default_value|
  111. next if pat !~ const
  112. next if prefix_pat !~ const
  113. name = $'
  114. (h[name.length] ||= []) << [name, const]
  115. }
  116. end
  117. hh = {}
  118. h.each {|len, pairs|
  119. pairs.each {|name, const|
  120. raise "name crash: #{name}" if hh[name]
  121. hh[name] = true
  122. }
  123. }
  124. h.keys.sort.each {|len|
  125. yield h[len], len
  126. }
  127. end
  128. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_decl(funcname, pat, prefix_optional, guard=nil)")
  129. %if guard
  130. #ifdef <%=guard%>
  131. int <%=funcname%>(const char *str, long len, int *valp);
  132. #endif
  133. %else
  134. int <%=funcname%>(const char *str, long len, int *valp);
  135. %end
  136. EOS
  137. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard=nil)")
  138. int
  139. <%=funcname%>(const char *str, long len, int *valp)
  140. {
  141. switch (len) {
  142. % each_names_with_len(pat, prefix_optional) {|pairs, len|
  143. case <%=len%>:
  144. % pairs.each {|name, const|
  145. #ifdef <%=const%>
  146. if (memcmp(str, <%=c_str name%>, <%=len%>) == 0) { *valp = <%=const%>; return 0; }
  147. #endif
  148. % }
  149. return -1;
  150. % }
  151. default:
  152. return -1;
  153. }
  154. }
  155. EOS
  156. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func(funcname, pat, prefix_optional, guard=nil)")
  157. %if guard
  158. #ifdef <%=guard%>
  159. <%=gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard)%>
  160. #endif
  161. %else
  162. <%=gen_name_to_int_func_in_guard(funcname, pat, prefix_optional, guard)%>
  163. %end
  164. EOS
  165. NAME_TO_INT_DEFS = []
  166. def def_name_to_int(funcname, pat, prefix_optional, guard=nil)
  167. decl = gen_name_to_int_decl(funcname, pat, prefix_optional, guard)
  168. func = gen_name_to_int_func(funcname, pat, prefix_optional, guard)
  169. NAME_TO_INT_DEFS << [decl, func]
  170. end
  171. def reverse_each_name_with_prefix_optional(pat, prefix_pat)
  172. reverse_each_name(pat) {|n|
  173. yield n, n
  174. }
  175. if prefix_pat
  176. reverse_each_name(pat) {|n|
  177. next if prefix_pat !~ n
  178. yield n, $'
  179. }
  180. end
  181. end
  182. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat, prefix_pat)")
  183. <%=hash_var%> = st_init_numtable();
  184. % reverse_each_name_with_prefix_optional(pat, prefix_pat) {|n,s|
  185. #ifdef <%=n%>
  186. st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)rb_intern2(<%=c_str s%>, <%=s.length%>));
  187. #endif
  188. % }
  189. EOS
  190. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_func(func_name, hash_var)")
  191. ID
  192. <%=func_name%>(int val)
  193. {
  194. st_data_t name;
  195. if (st_lookup(<%=hash_var%>, (st_data_t)val, &name))
  196. return (ID)name;
  197. return 0;
  198. }
  199. EOS
  200. ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_decl(func_name, hash_var)")
  201. ID <%=func_name%>(int val);
  202. EOS
  203. INTERN_DEFS = []
  204. def def_intern(func_name, pat, prefix_optional=nil)
  205. prefix_pat = nil
  206. if prefix_optional
  207. if Regexp === prefix_optional
  208. prefix_pat = prefix_optional
  209. else
  210. prefix_pat = /\A#{Regexp.escape prefix_optional}/
  211. end
  212. end
  213. hash_var = "#{func_name}_hash"
  214. vardef = "static st_table *#{hash_var};"
  215. gen_hash = gen_int_to_name_hash(hash_var, pat, prefix_pat)
  216. decl = gen_int_to_name_decl(func_name, hash_var)
  217. func = gen_int_to_name_func(func_name, hash_var)
  218. INTERN_DEFS << [vardef, gen_hash, decl, func]
  219. end
  220. def_name_to_int("rsock_family_to_int", /\A(AF_|PF_)/, "AF_")
  221. def_name_to_int("rsock_socktype_to_int", /\ASOCK_/, "SOCK_")
  222. def_name_to_int("rsock_ipproto_to_int", /\AIPPROTO_/, "IPPROTO_")
  223. def_name_to_int("rsock_unknown_level_to_int", /\ASOL_SOCKET\z/, "SOL_")
  224. def_name_to_int("rsock_ip_level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/)
  225. def_name_to_int("rsock_so_optname_to_int", /\ASO_/, "SO_")
  226. def_name_to_int("rsock_ip_optname_to_int", /\AIP_/, "IP_")
  227. def_name_to_int("rsock_ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6")
  228. def_name_to_int("rsock_tcp_optname_to_int", /\ATCP_/, "TCP_")
  229. def_name_to_int("rsock_udp_optname_to_int", /\AUDP_/, "UDP_")
  230. def_name_to_int("rsock_shutdown_how_to_int", /\ASHUT_/, "SHUT_")
  231. def_name_to_int("rsock_scm_optname_to_int", /\ASCM_/, "SCM_")
  232. def_intern('rsock_intern_family', /\AAF_/)
  233. def_intern('rsock_intern_family_noprefix', /\AAF_/, "AF_")
  234. def_intern('rsock_intern_protocol_family', /\APF_/)
  235. def_intern('rsock_intern_socktype', /\ASOCK_/)
  236. def_intern('rsock_intern_ipproto', /\AIPPROTO_/)
  237. def_intern('rsock_intern_iplevel', /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/)
  238. def_intern('rsock_intern_so_optname', /\ASO_/, "SO_")
  239. def_intern('rsock_intern_ip_optname', /\AIP_/, "IP_")
  240. def_intern('rsock_intern_ipv6_optname', /\AIPV6_/, "IPV6_")
  241. def_intern('rsock_intern_tcp_optname', /\ATCP_/, "TCP_")
  242. def_intern('rsock_intern_udp_optname', /\AUDP_/, "UDP_")
  243. def_intern('rsock_intern_scm_optname', /\ASCM_/, "SCM_")
  244. def_intern('rsock_intern_local_optname', /\ALOCAL_/, "LOCAL_")
  245. result = ERB.new(<<'EOS', nil, '%').result(binding)
  246. /* autogenerated file */
  247. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| vardef }.join("\n") %>
  248. /*
  249. * Document-module: ::Socket::Constants
  250. *
  251. * Socket::Constants provides socket related constants.
  252. * Following lists possible constants.
  253. * If underlying platform doesn't define a constant,
  254. * the corresponding Ruby constant is not defined.
  255. *
  256. */
  257. static void
  258. init_constants(void)
  259. {
  260. rb_mSockConst = rb_define_module_under(rb_cSocket, "Constants");
  261. <%= gen_const_defs %>
  262. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| gen_hash }.join("\n") %>
  263. }
  264. <%= NAME_TO_INT_DEFS.map {|decl, func| func }.join("\n") %>
  265. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| func }.join("\n") %>
  266. EOS
  267. header_result = ERB.new(<<'EOS', nil, '%').result(binding)
  268. /* autogenerated file */
  269. <%= gen_const_decls %>
  270. <%= NAME_TO_INT_DEFS.map {|decl, func| decl }.join("\n") %>
  271. <%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| decl }.join("\n") %>
  272. EOS
  273. if opt_H
  274. File.open(opt_H, 'w') {|f|
  275. f << header_result
  276. }
  277. else
  278. result = header_result + result
  279. end
  280. if opt_o
  281. File.open(opt_o, 'w') {|f|
  282. f << result
  283. }
  284. else
  285. $stdout << result
  286. end
  287. __END__
  288. SOCK_STREAM
  289. SOCK_DGRAM
  290. SOCK_RAW
  291. SOCK_RDM
  292. SOCK_SEQPACKET
  293. SOCK_PACKET
  294. AF_UNSPEC
  295. PF_UNSPEC
  296. AF_INET
  297. PF_INET
  298. AF_INET6
  299. PF_INET6
  300. AF_UNIX
  301. PF_UNIX
  302. AF_AX25
  303. PF_AX25
  304. AF_IPX
  305. PF_IPX
  306. AF_APPLETALK
  307. PF_APPLETALK
  308. AF_LOCAL
  309. PF_LOCAL
  310. AF_IMPLINK
  311. PF_IMPLINK
  312. AF_PUP
  313. PF_PUP
  314. AF_CHAOS
  315. PF_CHAOS
  316. AF_NS
  317. PF_NS
  318. AF_ISO
  319. PF_ISO
  320. AF_OSI
  321. PF_OSI
  322. AF_ECMA
  323. PF_ECMA
  324. AF_DATAKIT
  325. PF_DATAKIT
  326. AF_CCITT
  327. PF_CCITT
  328. AF_SNA
  329. PF_SNA
  330. AF_DEC
  331. PF_DEC
  332. AF_DLI
  333. PF_DLI
  334. AF_LAT
  335. PF_LAT
  336. AF_HYLINK
  337. PF_HYLINK
  338. AF_ROUTE
  339. PF_ROUTE
  340. AF_LINK
  341. PF_LINK
  342. AF_COIP
  343. PF_COIP
  344. AF_CNT
  345. PF_CNT
  346. AF_SIP
  347. PF_SIP
  348. AF_NDRV
  349. PF_NDRV
  350. AF_ISDN
  351. PF_ISDN
  352. AF_NATM
  353. PF_NATM
  354. AF_SYSTEM
  355. PF_SYSTEM
  356. AF_NETBIOS
  357. PF_NETBIOS
  358. AF_PPP
  359. PF_PPP
  360. AF_ATM
  361. PF_ATM
  362. AF_NETGRAPH
  363. PF_NETGRAPH
  364. AF_MAX
  365. PF_MAX
  366. AF_PACKET
  367. PF_PACKET
  368. AF_E164
  369. PF_XTP
  370. PF_RTIP
  371. PF_PIP
  372. PF_KEY
  373. MSG_OOB
  374. MSG_PEEK
  375. MSG_DONTROUTE
  376. MSG_EOR
  377. MSG_TRUNC
  378. MSG_CTRUNC
  379. MSG_WAITALL
  380. MSG_DONTWAIT
  381. MSG_EOF
  382. MSG_FLUSH
  383. MSG_HOLD
  384. MSG_SEND
  385. MSG_HAVEMORE
  386. MSG_RCVMORE
  387. MSG_COMPAT
  388. MSG_PROXY
  389. MSG_FIN
  390. MSG_SYN
  391. MSG_CONFIRM
  392. MSG_RST
  393. MSG_ERRQUEUE
  394. MSG_NOSIGNAL
  395. MSG_MORE
  396. SOL_SOCKET
  397. SOL_IP
  398. SOL_IPX
  399. SOL_AX25
  400. SOL_ATALK
  401. SOL_TCP
  402. SOL_UDP
  403. IPPROTO_IP 0
  404. IPPROTO_ICMP 1
  405. IPPROTO_IGMP
  406. IPPROTO_GGP
  407. IPPROTO_TCP 6
  408. IPPROTO_EGP
  409. IPPROTO_PUP
  410. IPPROTO_UDP 17
  411. IPPROTO_IDP
  412. IPPROTO_HELLO
  413. IPPROTO_ND
  414. IPPROTO_TP
  415. IPPROTO_XTP
  416. IPPROTO_EON
  417. IPPROTO_BIP
  418. IPPROTO_AH
  419. IPPROTO_DSTOPTS
  420. IPPROTO_ESP
  421. IPPROTO_FRAGMENT
  422. IPPROTO_HOPOPTS
  423. IPPROTO_ICMPV6
  424. IPPROTO_IPV6
  425. IPPROTO_NONE
  426. IPPROTO_ROUTING
  427. IPPROTO_RAW 255
  428. IPPROTO_MAX
  429. # Some port configuration
  430. IPPORT_RESERVED 1024
  431. IPPORT_USERRESERVED 5000
  432. # Some reserved IP v.4 addresses
  433. INADDR_ANY 0x00000000
  434. INADDR_BROADCAST 0xffffffff
  435. INADDR_LOOPBACK 0x7F000001
  436. INADDR_UNSPEC_GROUP 0xe0000000
  437. INADDR_ALLHOSTS_GROUP 0xe0000001
  438. INADDR_MAX_LOCAL_GROUP 0xe00000ff
  439. INADDR_NONE 0xffffffff
  440. # IP [gs]etsockopt options
  441. IP_OPTIONS
  442. IP_HDRINCL
  443. IP_TOS
  444. IP_TTL
  445. IP_RECVOPTS
  446. IP_RECVRETOPTS
  447. IP_RECVDSTADDR
  448. IP_RETOPTS
  449. IP_MINTTL
  450. IP_DONTFRAG
  451. IP_SENDSRCADDR
  452. IP_ONESBCAST
  453. IP_RECVTTL
  454. IP_RECVIF
  455. IP_RECVSLLA
  456. IP_PORTRANGE
  457. IP_MULTICAST_IF
  458. IP_MULTICAST_TTL
  459. IP_MULTICAST_LOOP
  460. IP_ADD_MEMBERSHIP
  461. IP_DROP_MEMBERSHIP
  462. IP_DEFAULT_MULTICAST_TTL
  463. IP_DEFAULT_MULTICAST_LOOP
  464. IP_MAX_MEMBERSHIPS
  465. IP_ROUTER_ALERT
  466. IP_PKTINFO
  467. IP_PKTOPTIONS
  468. IP_MTU_DISCOVER
  469. IP_RECVERR
  470. IP_RECVTOS
  471. IP_MTU
  472. IP_FREEBIND
  473. IP_IPSEC_POLICY
  474. IP_XFRM_POLICY
  475. IP_PASSSEC
  476. IP_PMTUDISC_DONT
  477. IP_PMTUDISC_WANT
  478. IP_PMTUDISC_DO
  479. IP_UNBLOCK_SOURCE
  480. IP_BLOCK_SOURCE
  481. IP_ADD_SOURCE_MEMBERSHIP
  482. IP_DROP_SOURCE_MEMBERSHIP
  483. IP_MSFILTER
  484. MCAST_JOIN_GROUP
  485. MCAST_BLOCK_SOURCE
  486. MCAST_UNBLOCK_SOURCE
  487. MCAST_LEAVE_GROUP
  488. MCAST_JOIN_SOURCE_GROUP
  489. MCAST_LEAVE_SOURCE_GROUP
  490. MCAST_MSFILTER
  491. MCAST_EXCLUDE
  492. MCAST_INCLUDE
  493. SO_DEBUG
  494. SO_REUSEADDR
  495. SO_REUSEPORT
  496. SO_TYPE
  497. SO_ERROR
  498. SO_DONTROUTE
  499. SO_BROADCAST
  500. SO_SNDBUF
  501. SO_RCVBUF
  502. SO_KEEPALIVE
  503. SO_OOBINLINE
  504. SO_NO_CHECK
  505. SO_PRIORITY
  506. SO_LINGER
  507. SO_PASSCRED
  508. SO_PEERCRED
  509. SO_RCVLOWAT
  510. SO_SNDLOWAT
  511. SO_RCVTIMEO
  512. SO_SNDTIMEO
  513. SO_ACCEPTCONN
  514. SO_USELOOPBACK
  515. SO_ACCEPTFILTER
  516. SO_DONTTRUNC
  517. SO_WANTMORE
  518. SO_WANTOOBFLAG
  519. SO_NREAD
  520. SO_NKE
  521. SO_NOSIGPIPE
  522. SO_SECURITY_AUTHENTICATION
  523. SO_SECURITY_ENCRYPTION_TRANSPORT
  524. SO_SECURITY_ENCRYPTION_NETWORK
  525. SO_BINDTODEVICE
  526. SO_ATTACH_FILTER
  527. SO_DETACH_FILTER
  528. SO_PEERNAME
  529. SO_TIMESTAMP
  530. SO_TIMESTAMPNS
  531. SO_BINTIME
  532. SO_RECVUCRED
  533. SO_MAC_EXEMPT
  534. SO_ALLZONES
  535. SOPRI_INTERACTIVE
  536. SOPRI_NORMAL
  537. SOPRI_BACKGROUND
  538. IPX_TYPE
  539. TCP_NODELAY
  540. TCP_MAXSEG
  541. TCP_CORK
  542. TCP_DEFER_ACCEPT
  543. TCP_INFO
  544. TCP_KEEPCNT
  545. TCP_KEEPIDLE
  546. TCP_KEEPINTVL
  547. TCP_LINGER2
  548. TCP_MD5SIG
  549. TCP_NOOPT
  550. TCP_NOPUSH
  551. TCP_QUICKACK
  552. TCP_SYNCNT
  553. TCP_WINDOW_CLAMP
  554. UDP_CORK
  555. EAI_ADDRFAMILY
  556. EAI_AGAIN
  557. EAI_BADFLAGS
  558. EAI_FAIL
  559. EAI_FAMILY
  560. EAI_MEMORY
  561. EAI_NODATA
  562. EAI_NONAME
  563. EAI_OVERFLOW
  564. EAI_SERVICE
  565. EAI_SOCKTYPE
  566. EAI_SYSTEM
  567. EAI_BADHINTS
  568. EAI_PROTOCOL
  569. EAI_MAX
  570. AI_PASSIVE
  571. AI_CANONNAME
  572. AI_NUMERICHOST
  573. AI_NUMERICSERV
  574. AI_MASK
  575. AI_ALL
  576. AI_V4MAPPED_CFG
  577. AI_ADDRCONFIG
  578. AI_V4MAPPED
  579. AI_DEFAULT
  580. NI_MAXHOST
  581. NI_MAXSERV
  582. NI_NOFQDN
  583. NI_NUMERICHOST
  584. NI_NAMEREQD
  585. NI_NUMERICSERV
  586. NI_DGRAM
  587. SHUT_RD 0
  588. SHUT_WR 1
  589. SHUT_RDWR 2
  590. IPV6_JOIN_GROUP
  591. IPV6_LEAVE_GROUP
  592. IPV6_MULTICAST_HOPS
  593. IPV6_MULTICAST_IF
  594. IPV6_MULTICAST_LOOP
  595. IPV6_UNICAST_HOPS
  596. IPV6_V6ONLY
  597. IPV6_CHECKSUM
  598. IPV6_DONTFRAG
  599. IPV6_DSTOPTS
  600. IPV6_HOPLIMIT
  601. IPV6_HOPOPTS
  602. IPV6_NEXTHOP
  603. IPV6_PATHMTU
  604. IPV6_PKTINFO
  605. IPV6_RECVDSTOPTS
  606. IPV6_RECVHOPLIMIT
  607. IPV6_RECVHOPOPTS
  608. IPV6_RECVPKTINFO
  609. IPV6_RECVRTHDR
  610. IPV6_RECVTCLASS
  611. IPV6_RTHDR
  612. IPV6_RTHDRDSTOPTS
  613. IPV6_RTHDR_TYPE_0
  614. IPV6_RECVPATHMTU
  615. IPV6_TCLASS
  616. IPV6_USE_MIN_MTU
  617. INET_ADDRSTRLEN
  618. INET6_ADDRSTRLEN
  619. IFNAMSIZ
  620. SOMAXCONN
  621. SCM_RIGHTS
  622. SCM_TIMESTAMP
  623. SCM_TIMESTAMPNS
  624. SCM_BINTIME
  625. SCM_CREDENTIALS
  626. SCM_CREDS
  627. SCM_UCRED
  628. LOCAL_PEERCRED
  629. LOCAL_CREDS
  630. LOCAL_CONNWAIT