f118640d86
lines, since the WORTHLESS, BROKEN new version of patch ignores them.
418 lines
15 KiB
Plaintext
418 lines
15 KiB
Plaintext
Fix many incorrect things in the Usocket interface for FreeBSD.
|
|
Also make provisions for using SOCKS.
|
|
|
|
--- m3/m3core/src/unix/freebsd-2/Usocket.i3.orig Sat Jan 7 14:22:22 1995
|
|
+++ m3/m3core/src/unix/freebsd-2/Usocket.i3 Thu Oct 24 16:04:43 1996
|
|
@@ -30,28 +30,30 @@
|
|
(*
|
|
* Option flags per-socket.
|
|
*)
|
|
- SO_DEBUG = 1; (* turn on debugging info recording *)
|
|
- SO_REUSEADDR = 2; (* allow local address reuse *)
|
|
- SO_TYPE = 3; (* get socket type *)
|
|
- SO_ERROR = 4; (* get error status and clear *)
|
|
- SO_DONTROUTE = 5; (* just use interface addresses *)
|
|
- SO_BROADCAST = 6; (* permit sending of broadcast msgs *)
|
|
- SO_SNDBUF = 7; (* send buffer size *)
|
|
- SO_RCVBUF = 8; (* receive buffer size *)
|
|
- SO_KEEPALIVE = 9; (* keep connections alive *)
|
|
- SO_OOBINLINE = 10; (* leave received OOB data in line *)
|
|
- SO_NO_CHECK = 11;
|
|
- SO_PRIORITY = 12;
|
|
- SO_LINGER = 13; (* linger on close if data present *)
|
|
+ SO_DEBUG = 16_0001; (* turn on debugging info recording *)
|
|
+ SO_ACCEPTCONN = 16_0002; (* socket has had listen() *)
|
|
+ SO_REUSEADDR = 16_0004; (* allow local address reuse *)
|
|
+ SO_KEEPALIVE = 16_0008; (* keep connections alive *)
|
|
+ SO_DONTROUTE = 16_0010; (* just use interface addresses *)
|
|
+ SO_BROADCAST = 16_0020; (* permit sending of broadcast msgs *)
|
|
+ SO_USELOOPBACK = 16_0040; (* bypass hardware when possible *)
|
|
+ SO_LINGER = 16_0080; (* linger on close if data present *)
|
|
+ SO_OOBINLINE = 16_0100; (* leave received OOB data in line *)
|
|
+ SO_REUSEPORT = 16_0200; (* allow local address & port reuse *)
|
|
+ SO_TIMESTAMP = 16_0400; (* timestamp received dgram traffic *)
|
|
|
|
(*
|
|
* Additional options, not kept in so_options.
|
|
*)
|
|
- (* these constants may not be implemented - be careful *)
|
|
- SO_SNDLOWAT = 16_1003; (* send low-water mark *)
|
|
- SO_RCVLOWAT = 16_1004; (* receive low-water mark *)
|
|
- SO_SNDTIMEO = 16_1005; (* send timeout *)
|
|
- SO_RCVTIMEO = 16_1006; (* receive timeout *)
|
|
+ SO_SNDBUF = 16_1001; (* send buffer size *)
|
|
+ SO_RCVBUF = 16_1002; (* receive buffer size *)
|
|
+ SO_SNDLOWAT = 16_1003; (* send low-water mark *)
|
|
+ SO_RCVLOWAT = 16_1004; (* receive low-water mark *)
|
|
+ SO_SNDTIMEO = 16_1005; (* send timeout *)
|
|
+ SO_RCVTIMEO = 16_1006; (* receive timeout *)
|
|
+ SO_ERROR = 16_1007; (* get error status and clear *)
|
|
+ SO_TYPE = 16_1008; (* get socket type *)
|
|
+ SO_PRIVSTATE = 16_1009; (* get/deny privileged state *)
|
|
|
|
(*
|
|
* Structure used for manipulating linger option.
|
|
@@ -67,38 +69,45 @@
|
|
* Level number for (get/set)sockopt() to apply to socket itself.
|
|
*)
|
|
CONST
|
|
- SOL_SOCKET = 1; (* options for socket level *)
|
|
+ SOL_SOCKET = 16_ffff; (* options for socket level *)
|
|
|
|
|
|
(*
|
|
* Address families.
|
|
*)
|
|
- AF_UNSPEC = 0; (* unspecified *)
|
|
- AF_UNIX = 1; (* local to host (pipes, portals) *)
|
|
- AF_INET = 2; (* internetwork: UDP, TCP, etc. *)
|
|
- AF_AX25 = 3;
|
|
- AF_IPX = 4;
|
|
-
|
|
- AF_MAX = 5;
|
|
-
|
|
-(*****
|
|
- AF_IMPLINK = 3; (* arpanet imp addresses *)
|
|
- AF_PUP = 4; (* pup protocols: e.g. BSP *)
|
|
- AF_CHAOS = 5; (* mit CHAOS protocols *)
|
|
- AF_NS = 6; (* XEROX NS protocols *)
|
|
- AF_NBS = 7; (* nbs protocols *)
|
|
- AF_ECMA = 8; (* european computer manufacturers *)
|
|
- AF_DATAKIT = 9; (* datakit protocols *)
|
|
- AF_CCITT = 10; (* CCITT protocols, X.25 etc *)
|
|
- AF_SNA = 11; (* IBM SNA *)
|
|
- AF_DECnet = 12; (* DECnet *)
|
|
- AF_DLI = 13; (* Direct data link interface *)
|
|
- AF_LAT = 14; (* LAT *)
|
|
- AF_HYLINK = 15; (* NSC Hyperchannel *)
|
|
- AF_APPLETALK = 16; (* Apple talk *)
|
|
- AF_BSC = 17; (* BISYNC 2780/3780 *)
|
|
- AF_DSS = 18; (* Distributed system services *)
|
|
-*******)
|
|
+ AF_UNSPEC = 0; (* unspecified *)
|
|
+ AF_LOCAL = 1; (* local to host (pipes, portals) *)
|
|
+ AF_UNIX = AF_LOCAL; (* backward compatibility *)
|
|
+ AF_INET = 2; (* internetwork: UDP, TCP, etc. *)
|
|
+ AF_IMPLINK = 3; (* arpanet imp addresses *)
|
|
+ AF_PUP = 4; (* pup protocols: e.g. BSP *)
|
|
+ AF_CHAOS = 5; (* mit CHAOS protocols *)
|
|
+ AF_NS = 6; (* XEROX NS protocols *)
|
|
+ AF_ISO = 7; (* ISO protocols *)
|
|
+ AF_OSI = AF_ISO;
|
|
+ AF_ECMA = 8; (* European computer manufacturers *)
|
|
+ AF_DATAKIT = 9; (* datakit protocols *)
|
|
+ AF_CCITT = 10; (* CCITT protocols, X.25 etc *)
|
|
+ AF_SNA = 11; (* IBM SNA *)
|
|
+ AF_DECnet = 12; (* DECnet *)
|
|
+ AF_DLI = 13; (* DEC Direct data link interface *)
|
|
+ AF_LAT = 14; (* LAT *)
|
|
+ AF_HYLINK = 15; (* NSC Hyperchannel *)
|
|
+ AF_APPLETALK = 16; (* Apple Talk *)
|
|
+ AF_ROUTE = 17; (* Internal Routing Protocol *)
|
|
+ AF_LINK = 18; (* Link layer interface *)
|
|
+ pseudo_AF_XTP = 19; (* eXpress Transfer Protocol (no AF) *)
|
|
+ AF_COIP = 20; (* connection-oriented IP, aka ST II *)
|
|
+ AF_CNT = 21; (* Computer Network Technology *)
|
|
+ pseudo_AF_RTIP = 22; (* Help Identify RTIP packets *)
|
|
+ AF_IPX = 23; (* Novell Internet Protocol *)
|
|
+ AF_SIP = 24; (* Simple Internet Protocol *)
|
|
+ pseudo_AF_PIP = 25; (* Help Identify PIP packets *)
|
|
+ AF_ISDN = 26; (* Integrated Services Digital Network*)
|
|
+ AF_E164 = AF_ISDN; (* CCITT E.164 recommendation *)
|
|
+ pseudo_AF_KEY = 27; (* Internal key-management function *)
|
|
+
|
|
+ AF_MAX = 28;
|
|
|
|
(*
|
|
* Structure used by kernel to store most
|
|
@@ -106,9 +115,9 @@
|
|
*)
|
|
TYPE
|
|
struct_sockaddr = RECORD
|
|
- sa_family: Ctypes.unsigned_short; (* address family *)
|
|
- sa_data: ARRAY [0..13] OF Ctypes.char;
|
|
- (* up to 14 bytes of direct address *)
|
|
+ sa_len: Ctypes.unsigned_char; (* total length *)
|
|
+ sa_family: Ctypes.unsigned_char; (* address family *)
|
|
+ sa_data: ARRAY [0..13] OF Ctypes.char; (* address; actually longer *)
|
|
END;
|
|
|
|
|
|
@@ -116,7 +125,6 @@
|
|
* Structure used by kernel to pass protocol
|
|
* information in raw sockets.
|
|
*)
|
|
- (* Can't find this one either .. be careful *)
|
|
struct_sockproto = RECORD
|
|
sp_family: Ctypes.unsigned_short; (* address family *)
|
|
sp_protocol: Ctypes.unsigned_short; (* protocol *)
|
|
@@ -126,75 +134,101 @@
|
|
* Protocol families, same as address families for now.
|
|
*)
|
|
CONST
|
|
+ PF_UNSPEC = AF_UNSPEC;
|
|
+ PF_LOCAL = AF_LOCAL;
|
|
+ PF_UNIX = PF_LOCAL; (* backward compatibility *)
|
|
+ PF_INET = AF_INET;
|
|
+ PF_IMPLINK = AF_IMPLINK;
|
|
+ PF_PUP = AF_PUP;
|
|
+ PF_CHAOS = AF_CHAOS;
|
|
+ PF_NS = AF_NS;
|
|
+ PF_ISO = AF_ISO;
|
|
+ PF_OSI = AF_ISO;
|
|
+ PF_ECMA = AF_ECMA;
|
|
+ PF_DATAKIT = AF_DATAKIT;
|
|
+ PF_CCITT = AF_CCITT;
|
|
+ PF_SNA = AF_SNA;
|
|
+ PF_DECnet = AF_DECnet;
|
|
+ PF_DLI = AF_DLI;
|
|
+ PF_LAT = AF_LAT;
|
|
+ PF_HYLINK = AF_HYLINK;
|
|
+ PF_APPLETALK = AF_APPLETALK;
|
|
+ PF_ROUTE = AF_ROUTE;
|
|
+ PF_LINK = AF_LINK;
|
|
+ PF_XTP = pseudo_AF_XTP; (* really just proto family, no AF *)
|
|
+ PF_COIP = AF_COIP;
|
|
+ PF_CNT = AF_CNT;
|
|
+ PF_SIP = AF_SIP;
|
|
+ PF_IPX = AF_IPX; (* same format as AF_NS *)
|
|
+ PF_RTIP = pseudo_AF_RTIP; (* same format as AF_INET *)
|
|
+ PF_PIP = pseudo_AF_PIP;
|
|
+ PF_ISDN = AF_ISDN;
|
|
+ PF_KEY = pseudo_AF_KEY;
|
|
|
|
- PF_UNSPEC = AF_UNSPEC;
|
|
- PF_UNIX = AF_UNIX;
|
|
- PF_INET = AF_INET;
|
|
- PF_AX25 = AF_AX25;
|
|
- PF_IPX = AF_IPX;
|
|
-
|
|
- (* NO supported on Linux:
|
|
- PF_IMPLINK = AF_IMPLINK;
|
|
- PF_PUP = AF_PUP;
|
|
- PF_CHAOS = AF_CHAOS;
|
|
- PF_NS = AF_NS;
|
|
- PF_NBS = AF_NBS;
|
|
- PF_ECMA = AF_ECMA;
|
|
- PF_DATAKIT = AF_DATAKIT;
|
|
- PF_CCITT = AF_CCITT;
|
|
- PF_SNA = AF_SNA;
|
|
- PF_DECnet = AF_DECnet;
|
|
- PF_DLI = AF_DLI;
|
|
- PF_LAT = AF_LAT;
|
|
- PF_HYLINK = AF_HYLINK;
|
|
- PF_APPLETALK = AF_APPLETALK;
|
|
- PF_BSC = AF_BSC;
|
|
- PF_DSS = AF_DSS;
|
|
- ************)
|
|
-
|
|
- PF_MAX = AF_MAX;
|
|
+ PF_MAX = AF_MAX;
|
|
|
|
(*
|
|
* Maximum queue length specifiable by listen.
|
|
*)
|
|
- (* Not defined under Linux - be careful *)
|
|
- SOMAXCONN = 5;
|
|
+ SOMAXCONN = 128;
|
|
|
|
(*
|
|
* Message header for recvmsg and sendmsg calls.
|
|
*)
|
|
TYPE
|
|
- (* Again, I haven't checked this structure *)
|
|
struct_msghdr = RECORD
|
|
- msg_name: Utypes.caddr_t; (* optional address *)
|
|
- msg_namelen: Ctypes.int; (* size of address *)
|
|
- msg_iov: Uuio.struct_iovec_star; (* scatter/gather array *)
|
|
- msg_iovlen: Ctypes.int; (* # elements in msg_iov *)
|
|
- msg_accrights: Utypes.caddr_t; (* access rights sent/received *)
|
|
- msg_accrightslen: Ctypes.int;
|
|
+ msg_name: Utypes.caddr_t; (* optional address *)
|
|
+ msg_namelen: Ctypes.unsigned_int; (* size of address *)
|
|
+ msg_iov: Uuio.struct_iovec_star; (* scatter/gather array *)
|
|
+ msg_iovlen: Ctypes.unsigned_int; (* # elements in msg_iov *)
|
|
+ msg_control: Utypes.caddr_t; (* ancillary data, see below *)
|
|
+ msg_controllen: Ctypes.unsigned_int; (* ancillary data buffer len *)
|
|
+ msg_flags: Ctypes.int; (* flags on received message *)
|
|
END;
|
|
|
|
|
|
CONST
|
|
- MSG_OOB = 16_1; (* process out-of-band data *)
|
|
- MSG_PEEK = 16_2; (* peek at incoming message *)
|
|
-(* The following aren't defined in /usr/include/linux/socket.h *)
|
|
-(**
|
|
- MSG_DONTROUTE = 16_4; (* send without using routing tables *)
|
|
+ MSG_OOB = 16_1; (* process out-of-band data *)
|
|
+ MSG_PEEK = 16_2; (* peek at incoming message *)
|
|
+ MSG_DONTROUTE = 16_4; (* send without using routing tables *)
|
|
+ MSG_EOR = 16_8; (* data completes record *)
|
|
+ MSG_TRUNC = 16_10; (* data discarded before delivery *)
|
|
+ MSG_CTRUNC = 16_20; (* control data lost before delivery *)
|
|
+ MSG_WAITALL = 16_40; (* wait for full request or error *)
|
|
+ MSG_DONTWAIT = 16_80; (* this message should be nonblocking *)
|
|
+ MSG_EOF = 16_100; (* data completes connection *)
|
|
+ MSG_COMPAT = 16_8000; (* used in sendit() *)
|
|
+
|
|
+(*
|
|
+ * Header for ancillary data objects in msg_control buffer.
|
|
+ * Used for additional information with/about a datagram
|
|
+ * not expressible by flags. The format is a sequence
|
|
+ * of message elements headed by cmsghdr structures.
|
|
+ *)
|
|
+TYPE
|
|
+ struct_cmsghdr = RECORD
|
|
+ cmsg_len: Ctypes.unsigned_int; (* data byte count, including hdr *)
|
|
+ cmsg_level: Ctypes.int; (* originating protocol *)
|
|
+ cmsg_type: Ctypes.int; (* protocol-specific type *)
|
|
+ (* followed by u_char cmsg_data[]; *)
|
|
+ END;
|
|
|
|
- MSG_MAXIOVLEN = 16;
|
|
-***)
|
|
+(* "Socket"-level control message types: *)
|
|
+CONST
|
|
+ SCM_RIGHTS = 16_01; (* access rights (array of int) *)
|
|
+ SCM_TIMESTAMP = 16_02; (* timestamp (struct timeval) *)
|
|
|
|
(*
|
|
* Definitions for UNIX IPC domain.
|
|
*)
|
|
TYPE
|
|
struct_sockaddr_un = RECORD
|
|
- sun_family: Ctypes.unsigned_short; (* AF_UNIX *)
|
|
- sun_path: ARRAY [0..107] OF Ctypes.char; (* path name (gag) *)
|
|
+ sun_len: Ctypes.unsigned_char; (* sockaddr len including null *)
|
|
+ sun_family: Ctypes.unsigned_char; (* AF_UNIX *)
|
|
+ sun_path: ARRAY [0..103] OF Ctypes.char; (* path name (gag) *)
|
|
END;
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_accept"*>
|
|
PROCEDURE accept(
|
|
s: Ctypes.int;
|
|
addr: UNTRACED REF struct_sockaddr;
|
|
@@ -202,7 +236,7 @@
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_bind"*>
|
|
PROCEDURE bind(
|
|
s: Ctypes.int;
|
|
name: UNTRACED REF struct_sockaddr;
|
|
@@ -210,7 +244,7 @@
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_connect"*>
|
|
PROCEDURE connect(
|
|
s: Ctypes.int;
|
|
name: UNTRACED REF struct_sockaddr;
|
|
@@ -218,7 +252,7 @@
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_getpeername"*>
|
|
PROCEDURE getpeername(
|
|
s: Ctypes.int;
|
|
name: UNTRACED REF struct_sockaddr;
|
|
@@ -226,7 +260,7 @@
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_getsockname"*>
|
|
PROCEDURE getsockname(
|
|
s: Ctypes.int;
|
|
name: UNTRACED REF struct_sockaddr;
|
|
@@ -237,52 +271,70 @@
|
|
<*EXTERNAL*>
|
|
PROCEDURE getsockopt(
|
|
s, level, optname: Ctypes.int;
|
|
- optval: Ctypes.char_star;
|
|
+ optval: Ctypes.void_star;
|
|
optlen: Ctypes.int_star)
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_listen"*>
|
|
PROCEDURE listen(s, backlog: Ctypes.int): Ctypes.int RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
-PROCEDURE recv(s: Ctypes.int; buf: Ctypes.char_star; len, flags: Ctypes.int): Ctypes.int RAISES {};
|
|
+<*EXTERNAL "m3_recv"*>
|
|
+PROCEDURE recv(
|
|
+ s: Ctypes.int;
|
|
+ buf: Ctypes.void_star;
|
|
+ len: Utypes.size_t;
|
|
+ flags: Ctypes.int)
|
|
+ : Ctypes.int
|
|
+ RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_recvfrom"*>
|
|
PROCEDURE recvfrom(
|
|
s: Ctypes.int;
|
|
- buf: Ctypes.char_star;
|
|
- len, flags: Ctypes.int;
|
|
+ buf: Ctypes.void_star;
|
|
+ len: Utypes.size_t;
|
|
+ flags: Ctypes.int;
|
|
from: UNTRACED REF struct_sockaddr;
|
|
fromlen: Ctypes.int_star)
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
-PROCEDURE send(s: Ctypes.int; msg: Ctypes.char_star; len, flags: Ctypes.int): Ctypes.int RAISES {};
|
|
+(* FIXME - recvmsg *)
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_send"*>
|
|
+PROCEDURE send(
|
|
+ s: Ctypes.int;
|
|
+ msg: Ctypes.const_void_star;
|
|
+ len: Utypes.size_t;
|
|
+ flags: Ctypes.int)
|
|
+ : Ctypes.int
|
|
+ RAISES {};
|
|
+
|
|
+<*EXTERNAL "m3_sendto"*>
|
|
PROCEDURE sendto(
|
|
s: Ctypes.int;
|
|
- msg: Ctypes.char_star;
|
|
- len, flags: Ctypes.int;
|
|
+ msg: Ctypes.const_void_star;
|
|
+ len: Utypes.size_t;
|
|
+ flags: Ctypes.int;
|
|
to: UNTRACED REF struct_sockaddr;
|
|
tolen: Ctypes.int)
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
+(* FIXME - sendmsg *)
|
|
+
|
|
<*EXTERNAL*>
|
|
PROCEDURE setsockopt(
|
|
s, level, optname: Ctypes.int;
|
|
- optval: Ctypes.char_star;
|
|
+ optval: Ctypes.const_void_star;
|
|
optlen: Ctypes.int)
|
|
: Ctypes.int
|
|
RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_shutdown"*>
|
|
PROCEDURE shutdown(s, how: Ctypes.int): Ctypes.int RAISES {};
|
|
|
|
-<*EXTERNAL*>
|
|
+<*EXTERNAL "m3_socket" *>
|
|
PROCEDURE socket(af, type, protocol: Ctypes.int): Ctypes.int RAISES {};
|
|
|
|
<*EXTERNAL*>
|