diff options
author | Steffen Kieß <s-kiess@web.de> | 2015-08-24 20:42:54 +0300 |
---|---|---|
committer | Steffen Kieß <s-kiess@web.de> | 2015-08-24 20:42:54 +0300 |
commit | d14254989b16f832f12f10300806bc85af899fe9 (patch) | |
tree | c65a48db7ff41f4e962e88a8bea4cd1475a9a7c7 /support | |
parent | a8cb543870c1177185e212e27e50ccdee5f4d60b (diff) |
Add socket-related functions and data structures to Mono.Posix
This commit adds those socket-related functions which do not require the
sockaddr_* structures or the msghdr structure.
Diffstat (limited to 'support')
-rw-r--r-- | support/Makefile.am | 5 | ||||
-rw-r--r-- | support/map.c | 1574 | ||||
-rw-r--r-- | support/map.h | 343 | ||||
-rw-r--r-- | support/mph.h | 13 | ||||
-rw-r--r-- | support/sys-socket.c | 139 |
5 files changed, 2070 insertions, 4 deletions
diff --git a/support/Makefile.am b/support/Makefile.am index c91511cf0e2..79154fc99bb 100644 --- a/support/Makefile.am +++ b/support/Makefile.am @@ -39,6 +39,7 @@ MPH_UNIX_SOURCE = \ serial.c \ sys-mman.c \ sys-sendfile.c \ + sys-socket.c \ sys-stat.c \ sys-statvfs.c \ sys-time.c \ @@ -135,12 +136,14 @@ refresh: --impl-macro=_GNU_SOURCE --impl-macro=_XOPEN_SOURCE \ --impl-header="<sys/types.h>" \ --impl-header="<sys/stat.h>" \ + --autoconf-header="<netinet/in.h>" \ --autoconf-header="<sys/time.h>" \ --autoconf-header="<sys/poll.h>" \ --autoconf-header="<sys/wait.h>" \ --autoconf-header="<sys/statvfs.h>" \ --autoconf-header="<sys/xattr.h>" \ --autoconf-header="<sys/mman.h>" \ + --autoconf-header="<sys/socket.h>" \ --autoconf-header="<sys/uio.h>" \ --autoconf-header="<unistd.h>" \ --impl-header="<fcntl.h>" \ @@ -158,7 +161,7 @@ refresh: --rename-member=st_mtime=st_mtime_ \ --rename-namespace=Mono.Unix.Native=Mono.Posix \ --library=MonoPosixHelper \ - $(mcs_topdir)/class/lib/net_4_5/Mono.Posix.dll map + $(mcs_topdir)/class/lib/net_4_x/Mono.Posix.dll map # Useful if mono is compiled with --enable-shared=no patch-libtool: diff --git a/support/map.c b/support/map.c index 737c2177275..ee61ae661d9 100644 --- a/support/map.c +++ b/support/map.c @@ -1,5 +1,5 @@ /* - * This file was automatically generated by create-native-map from /cvs/mono/mcs/class/lib/net_4_5/Mono.Posix.dll. + * This file was automatically generated by create-native-map from /home/kiesssn/prog/mono/mono/mcs/class/lib/net_4_x/Mono.Posix.dll. * * DO NOT MODIFY. */ @@ -27,6 +27,9 @@ */ #include <sys/types.h> #include <sys/stat.h> +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif /* ndef HAVE_NETINET_IN_H */ #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #endif /* ndef HAVE_SYS_TIME_H */ @@ -45,6 +48,9 @@ #ifdef HAVE_SYS_MMAN_H #include <sys/mman.h> #endif /* ndef HAVE_SYS_MMAN_H */ +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif /* ndef HAVE_SYS_SOCKET_H */ #ifdef HAVE_SYS_UIO_H #include <sys/uio.h> #endif /* ndef HAVE_SYS_UIO_H */ @@ -3115,6 +3121,40 @@ Mono_Posix_ToIovec (struct iovec *from, struct Mono_Posix_Iovec *to) #endif /* ndef HAVE_STRUCT_IOVEC */ +#ifdef HAVE_STRUCT_LINGER +int +Mono_Posix_FromLinger (struct Mono_Posix_Linger *from, struct linger *to) +{ + _cnm_return_val_if_overflow (int, from->l_onoff, -1); + _cnm_return_val_if_overflow (int, from->l_linger, -1); + + memset (to, 0, sizeof(*to)); + + to->l_onoff = from->l_onoff; + to->l_linger = from->l_linger; + + return 0; +} +#endif /* ndef HAVE_STRUCT_LINGER */ + + +#ifdef HAVE_STRUCT_LINGER +int +Mono_Posix_ToLinger (struct linger *from, struct Mono_Posix_Linger *to) +{ + _cnm_return_val_if_overflow (int, from->l_onoff, -1); + _cnm_return_val_if_overflow (int, from->l_linger, -1); + + memset (to, 0, sizeof(*to)); + + to->l_onoff = from->l_onoff; + to->l_linger = from->l_linger; + + return 0; +} +#endif /* ndef HAVE_STRUCT_LINGER */ + + int Mono_Posix_FromLockType (short x, short *r) { *r = 0; @@ -3217,6 +3257,212 @@ int Mono_Posix_ToLockfCommand (int x, int *r) errno = EINVAL; return -1; } +int Mono_Posix_FromMessageFlags (int x, int *r) +{ + *r = 0; + if ((x & Mono_Posix_MessageFlags_MSG_CMSG_CLOEXEC) == Mono_Posix_MessageFlags_MSG_CMSG_CLOEXEC) +#ifdef MSG_CMSG_CLOEXEC + *r |= MSG_CMSG_CLOEXEC; +#else /* def MSG_CMSG_CLOEXEC */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_CMSG_CLOEXEC */ + if ((x & Mono_Posix_MessageFlags_MSG_CONFIRM) == Mono_Posix_MessageFlags_MSG_CONFIRM) +#ifdef MSG_CONFIRM + *r |= MSG_CONFIRM; +#else /* def MSG_CONFIRM */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_CONFIRM */ + if ((x & Mono_Posix_MessageFlags_MSG_CTRUNC) == Mono_Posix_MessageFlags_MSG_CTRUNC) +#ifdef MSG_CTRUNC + *r |= MSG_CTRUNC; +#else /* def MSG_CTRUNC */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_CTRUNC */ + if ((x & Mono_Posix_MessageFlags_MSG_DONTROUTE) == Mono_Posix_MessageFlags_MSG_DONTROUTE) +#ifdef MSG_DONTROUTE + *r |= MSG_DONTROUTE; +#else /* def MSG_DONTROUTE */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_DONTROUTE */ + if ((x & Mono_Posix_MessageFlags_MSG_DONTWAIT) == Mono_Posix_MessageFlags_MSG_DONTWAIT) +#ifdef MSG_DONTWAIT + *r |= MSG_DONTWAIT; +#else /* def MSG_DONTWAIT */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_DONTWAIT */ + if ((x & Mono_Posix_MessageFlags_MSG_EOR) == Mono_Posix_MessageFlags_MSG_EOR) +#ifdef MSG_EOR + *r |= MSG_EOR; +#else /* def MSG_EOR */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_EOR */ + if ((x & Mono_Posix_MessageFlags_MSG_ERRQUEUE) == Mono_Posix_MessageFlags_MSG_ERRQUEUE) +#ifdef MSG_ERRQUEUE + *r |= MSG_ERRQUEUE; +#else /* def MSG_ERRQUEUE */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_ERRQUEUE */ + if ((x & Mono_Posix_MessageFlags_MSG_FASTOPEN) == Mono_Posix_MessageFlags_MSG_FASTOPEN) +#ifdef MSG_FASTOPEN + *r |= MSG_FASTOPEN; +#else /* def MSG_FASTOPEN */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_FASTOPEN */ + if ((x & Mono_Posix_MessageFlags_MSG_FIN) == Mono_Posix_MessageFlags_MSG_FIN) +#ifdef MSG_FIN + *r |= MSG_FIN; +#else /* def MSG_FIN */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_FIN */ + if ((x & Mono_Posix_MessageFlags_MSG_MORE) == Mono_Posix_MessageFlags_MSG_MORE) +#ifdef MSG_MORE + *r |= MSG_MORE; +#else /* def MSG_MORE */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_MORE */ + if ((x & Mono_Posix_MessageFlags_MSG_NOSIGNAL) == Mono_Posix_MessageFlags_MSG_NOSIGNAL) +#ifdef MSG_NOSIGNAL + *r |= MSG_NOSIGNAL; +#else /* def MSG_NOSIGNAL */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_NOSIGNAL */ + if ((x & Mono_Posix_MessageFlags_MSG_OOB) == Mono_Posix_MessageFlags_MSG_OOB) +#ifdef MSG_OOB + *r |= MSG_OOB; +#else /* def MSG_OOB */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_OOB */ + if ((x & Mono_Posix_MessageFlags_MSG_PEEK) == Mono_Posix_MessageFlags_MSG_PEEK) +#ifdef MSG_PEEK + *r |= MSG_PEEK; +#else /* def MSG_PEEK */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_PEEK */ + if ((x & Mono_Posix_MessageFlags_MSG_PROXY) == Mono_Posix_MessageFlags_MSG_PROXY) +#ifdef MSG_PROXY + *r |= MSG_PROXY; +#else /* def MSG_PROXY */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_PROXY */ + if ((x & Mono_Posix_MessageFlags_MSG_RST) == Mono_Posix_MessageFlags_MSG_RST) +#ifdef MSG_RST + *r |= MSG_RST; +#else /* def MSG_RST */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_RST */ + if ((x & Mono_Posix_MessageFlags_MSG_SYN) == Mono_Posix_MessageFlags_MSG_SYN) +#ifdef MSG_SYN + *r |= MSG_SYN; +#else /* def MSG_SYN */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_SYN */ + if ((x & Mono_Posix_MessageFlags_MSG_TRUNC) == Mono_Posix_MessageFlags_MSG_TRUNC) +#ifdef MSG_TRUNC + *r |= MSG_TRUNC; +#else /* def MSG_TRUNC */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_TRUNC */ + if ((x & Mono_Posix_MessageFlags_MSG_WAITALL) == Mono_Posix_MessageFlags_MSG_WAITALL) +#ifdef MSG_WAITALL + *r |= MSG_WAITALL; +#else /* def MSG_WAITALL */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_WAITALL */ + if ((x & Mono_Posix_MessageFlags_MSG_WAITFORONE) == Mono_Posix_MessageFlags_MSG_WAITFORONE) +#ifdef MSG_WAITFORONE + *r |= MSG_WAITFORONE; +#else /* def MSG_WAITFORONE */ + {errno = EINVAL; return -1;} +#endif /* ndef MSG_WAITFORONE */ + if (x == 0) + return 0; + return 0; +} + +int Mono_Posix_ToMessageFlags (int x, int *r) +{ + *r = 0; + if (x == 0) + return 0; +#ifdef MSG_CMSG_CLOEXEC + if ((x & MSG_CMSG_CLOEXEC) == MSG_CMSG_CLOEXEC) + *r |= Mono_Posix_MessageFlags_MSG_CMSG_CLOEXEC; +#endif /* ndef MSG_CMSG_CLOEXEC */ +#ifdef MSG_CONFIRM + if ((x & MSG_CONFIRM) == MSG_CONFIRM) + *r |= Mono_Posix_MessageFlags_MSG_CONFIRM; +#endif /* ndef MSG_CONFIRM */ +#ifdef MSG_CTRUNC + if ((x & MSG_CTRUNC) == MSG_CTRUNC) + *r |= Mono_Posix_MessageFlags_MSG_CTRUNC; +#endif /* ndef MSG_CTRUNC */ +#ifdef MSG_DONTROUTE + if ((x & MSG_DONTROUTE) == MSG_DONTROUTE) + *r |= Mono_Posix_MessageFlags_MSG_DONTROUTE; +#endif /* ndef MSG_DONTROUTE */ +#ifdef MSG_DONTWAIT + if ((x & MSG_DONTWAIT) == MSG_DONTWAIT) + *r |= Mono_Posix_MessageFlags_MSG_DONTWAIT; +#endif /* ndef MSG_DONTWAIT */ +#ifdef MSG_EOR + if ((x & MSG_EOR) == MSG_EOR) + *r |= Mono_Posix_MessageFlags_MSG_EOR; +#endif /* ndef MSG_EOR */ +#ifdef MSG_ERRQUEUE + if ((x & MSG_ERRQUEUE) == MSG_ERRQUEUE) + *r |= Mono_Posix_MessageFlags_MSG_ERRQUEUE; +#endif /* ndef MSG_ERRQUEUE */ +#ifdef MSG_FASTOPEN + if ((x & MSG_FASTOPEN) == MSG_FASTOPEN) + *r |= Mono_Posix_MessageFlags_MSG_FASTOPEN; +#endif /* ndef MSG_FASTOPEN */ +#ifdef MSG_FIN + if ((x & MSG_FIN) == MSG_FIN) + *r |= Mono_Posix_MessageFlags_MSG_FIN; +#endif /* ndef MSG_FIN */ +#ifdef MSG_MORE + if ((x & MSG_MORE) == MSG_MORE) + *r |= Mono_Posix_MessageFlags_MSG_MORE; +#endif /* ndef MSG_MORE */ +#ifdef MSG_NOSIGNAL + if ((x & MSG_NOSIGNAL) == MSG_NOSIGNAL) + *r |= Mono_Posix_MessageFlags_MSG_NOSIGNAL; +#endif /* ndef MSG_NOSIGNAL */ +#ifdef MSG_OOB + if ((x & MSG_OOB) == MSG_OOB) + *r |= Mono_Posix_MessageFlags_MSG_OOB; +#endif /* ndef MSG_OOB */ +#ifdef MSG_PEEK + if ((x & MSG_PEEK) == MSG_PEEK) + *r |= Mono_Posix_MessageFlags_MSG_PEEK; +#endif /* ndef MSG_PEEK */ +#ifdef MSG_PROXY + if ((x & MSG_PROXY) == MSG_PROXY) + *r |= Mono_Posix_MessageFlags_MSG_PROXY; +#endif /* ndef MSG_PROXY */ +#ifdef MSG_RST + if ((x & MSG_RST) == MSG_RST) + *r |= Mono_Posix_MessageFlags_MSG_RST; +#endif /* ndef MSG_RST */ +#ifdef MSG_SYN + if ((x & MSG_SYN) == MSG_SYN) + *r |= Mono_Posix_MessageFlags_MSG_SYN; +#endif /* ndef MSG_SYN */ +#ifdef MSG_TRUNC + if ((x & MSG_TRUNC) == MSG_TRUNC) + *r |= Mono_Posix_MessageFlags_MSG_TRUNC; +#endif /* ndef MSG_TRUNC */ +#ifdef MSG_WAITALL + if ((x & MSG_WAITALL) == MSG_WAITALL) + *r |= Mono_Posix_MessageFlags_MSG_WAITALL; +#endif /* ndef MSG_WAITALL */ +#ifdef MSG_WAITFORONE + if ((x & MSG_WAITFORONE) == MSG_WAITFORONE) + *r |= Mono_Posix_MessageFlags_MSG_WAITFORONE; +#endif /* ndef MSG_WAITFORONE */ + return 0; +} + int Mono_Posix_FromMlockallFlags (int x, int *r) { *r = 0; @@ -4491,6 +4737,52 @@ int Mono_Posix_ToSeekFlags (short x, short *r) errno = EINVAL; return -1; } +int Mono_Posix_FromShutdownOption (int x, int *r) +{ + *r = 0; + if (x == Mono_Posix_ShutdownOption_SHUT_RD) +#ifdef SHUT_RD + {*r = SHUT_RD; return 0;} +#else /* def SHUT_RD */ + {errno = EINVAL; return -1;} +#endif /* ndef SHUT_RD */ + if (x == Mono_Posix_ShutdownOption_SHUT_RDWR) +#ifdef SHUT_RDWR + {*r = SHUT_RDWR; return 0;} +#else /* def SHUT_RDWR */ + {errno = EINVAL; return -1;} +#endif /* ndef SHUT_RDWR */ + if (x == Mono_Posix_ShutdownOption_SHUT_WR) +#ifdef SHUT_WR + {*r = SHUT_WR; return 0;} +#else /* def SHUT_WR */ + {errno = EINVAL; return -1;} +#endif /* ndef SHUT_WR */ + if (x == 0) + return 0; + errno = EINVAL; return -1; +} + +int Mono_Posix_ToShutdownOption (int x, int *r) +{ + *r = 0; + if (x == 0) + return 0; +#ifdef SHUT_RD + if (x == SHUT_RD) + {*r = Mono_Posix_ShutdownOption_SHUT_RD; return 0;} +#endif /* ndef SHUT_RD */ +#ifdef SHUT_RDWR + if (x == SHUT_RDWR) + {*r = Mono_Posix_ShutdownOption_SHUT_RDWR; return 0;} +#endif /* ndef SHUT_RDWR */ +#ifdef SHUT_WR + if (x == SHUT_WR) + {*r = Mono_Posix_ShutdownOption_SHUT_WR; return 0;} +#endif /* ndef SHUT_WR */ + errno = EINVAL; return -1; +} + int Mono_Posix_FromSignum (int x, int *r) { *r = 0; @@ -7373,6 +7665,1286 @@ Mono_Posix_ToTimezone (struct timezone *from, struct Mono_Posix_Timezone *to) #endif /* ndef HAVE_STRUCT_TIMEZONE */ +int Mono_Posix_FromUnixAddressFamily (int x, int *r) +{ + *r = 0; + if (x == Mono_Posix_UnixAddressFamily_AF_ALG) +#ifdef AF_ALG + {*r = AF_ALG; return 0;} +#else /* def AF_ALG */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_ALG */ + if (x == Mono_Posix_UnixAddressFamily_AF_APPLETALK) +#ifdef AF_APPLETALK + {*r = AF_APPLETALK; return 0;} +#else /* def AF_APPLETALK */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_APPLETALK */ + if (x == Mono_Posix_UnixAddressFamily_AF_ASH) +#ifdef AF_ASH + {*r = AF_ASH; return 0;} +#else /* def AF_ASH */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_ASH */ + if (x == Mono_Posix_UnixAddressFamily_AF_ATMPVC) +#ifdef AF_ATMPVC + {*r = AF_ATMPVC; return 0;} +#else /* def AF_ATMPVC */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_ATMPVC */ + if (x == Mono_Posix_UnixAddressFamily_AF_ATMSVC) +#ifdef AF_ATMSVC + {*r = AF_ATMSVC; return 0;} +#else /* def AF_ATMSVC */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_ATMSVC */ + if (x == Mono_Posix_UnixAddressFamily_AF_AX25) +#ifdef AF_AX25 + {*r = AF_AX25; return 0;} +#else /* def AF_AX25 */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_AX25 */ + if (x == Mono_Posix_UnixAddressFamily_AF_BLUETOOTH) +#ifdef AF_BLUETOOTH + {*r = AF_BLUETOOTH; return 0;} +#else /* def AF_BLUETOOTH */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_BLUETOOTH */ + if (x == Mono_Posix_UnixAddressFamily_AF_BRIDGE) +#ifdef AF_BRIDGE + {*r = AF_BRIDGE; return 0;} +#else /* def AF_BRIDGE */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_BRIDGE */ + if (x == Mono_Posix_UnixAddressFamily_AF_CAIF) +#ifdef AF_CAIF + {*r = AF_CAIF; return 0;} +#else /* def AF_CAIF */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_CAIF */ + if (x == Mono_Posix_UnixAddressFamily_AF_CAN) +#ifdef AF_CAN + {*r = AF_CAN; return 0;} +#else /* def AF_CAN */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_CAN */ + if (x == Mono_Posix_UnixAddressFamily_AF_DECnet) +#ifdef AF_DECnet + {*r = AF_DECnet; return 0;} +#else /* def AF_DECnet */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_DECnet */ + if (x == Mono_Posix_UnixAddressFamily_AF_ECONET) +#ifdef AF_ECONET + {*r = AF_ECONET; return 0;} +#else /* def AF_ECONET */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_ECONET */ + if (x == Mono_Posix_UnixAddressFamily_AF_IEEE802154) +#ifdef AF_IEEE802154 + {*r = AF_IEEE802154; return 0;} +#else /* def AF_IEEE802154 */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_IEEE802154 */ + if (x == Mono_Posix_UnixAddressFamily_AF_INET) +#ifdef AF_INET + {*r = AF_INET; return 0;} +#else /* def AF_INET */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_INET */ + if (x == Mono_Posix_UnixAddressFamily_AF_INET6) +#ifdef AF_INET6 + {*r = AF_INET6; return 0;} +#else /* def AF_INET6 */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_INET6 */ + if (x == Mono_Posix_UnixAddressFamily_AF_IPX) +#ifdef AF_IPX + {*r = AF_IPX; return 0;} +#else /* def AF_IPX */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_IPX */ + if (x == Mono_Posix_UnixAddressFamily_AF_IRDA) +#ifdef AF_IRDA + {*r = AF_IRDA; return 0;} +#else /* def AF_IRDA */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_IRDA */ + if (x == Mono_Posix_UnixAddressFamily_AF_ISDN) +#ifdef AF_ISDN + {*r = AF_ISDN; return 0;} +#else /* def AF_ISDN */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_ISDN */ + if (x == Mono_Posix_UnixAddressFamily_AF_IUCV) +#ifdef AF_IUCV + {*r = AF_IUCV; return 0;} +#else /* def AF_IUCV */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_IUCV */ + if (x == Mono_Posix_UnixAddressFamily_AF_KEY) +#ifdef AF_KEY + {*r = AF_KEY; return 0;} +#else /* def AF_KEY */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_KEY */ + if (x == Mono_Posix_UnixAddressFamily_AF_LLC) +#ifdef AF_LLC + {*r = AF_LLC; return 0;} +#else /* def AF_LLC */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_LLC */ + if (x == Mono_Posix_UnixAddressFamily_AF_NETBEUI) +#ifdef AF_NETBEUI + {*r = AF_NETBEUI; return 0;} +#else /* def AF_NETBEUI */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_NETBEUI */ + if (x == Mono_Posix_UnixAddressFamily_AF_NETLINK) +#ifdef AF_NETLINK + {*r = AF_NETLINK; return 0;} +#else /* def AF_NETLINK */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_NETLINK */ + if (x == Mono_Posix_UnixAddressFamily_AF_NETROM) +#ifdef AF_NETROM + {*r = AF_NETROM; return 0;} +#else /* def AF_NETROM */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_NETROM */ + if (x == Mono_Posix_UnixAddressFamily_AF_NFC) +#ifdef AF_NFC + {*r = AF_NFC; return 0;} +#else /* def AF_NFC */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_NFC */ + if (x == Mono_Posix_UnixAddressFamily_AF_PACKET) +#ifdef AF_PACKET + {*r = AF_PACKET; return 0;} +#else /* def AF_PACKET */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_PACKET */ + if (x == Mono_Posix_UnixAddressFamily_AF_PHONET) +#ifdef AF_PHONET + {*r = AF_PHONET; return 0;} +#else /* def AF_PHONET */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_PHONET */ + if (x == Mono_Posix_UnixAddressFamily_AF_PPPOX) +#ifdef AF_PPPOX + {*r = AF_PPPOX; return 0;} +#else /* def AF_PPPOX */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_PPPOX */ + if (x == Mono_Posix_UnixAddressFamily_AF_RDS) +#ifdef AF_RDS + {*r = AF_RDS; return 0;} +#else /* def AF_RDS */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_RDS */ + if (x == Mono_Posix_UnixAddressFamily_AF_ROSE) +#ifdef AF_ROSE + {*r = AF_ROSE; return 0;} +#else /* def AF_ROSE */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_ROSE */ + if (x == Mono_Posix_UnixAddressFamily_AF_RXRPC) +#ifdef AF_RXRPC + {*r = AF_RXRPC; return 0;} +#else /* def AF_RXRPC */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_RXRPC */ + if (x == Mono_Posix_UnixAddressFamily_AF_SECURITY) +#ifdef AF_SECURITY + {*r = AF_SECURITY; return 0;} +#else /* def AF_SECURITY */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_SECURITY */ + if (x == Mono_Posix_UnixAddressFamily_AF_SNA) +#ifdef AF_SNA + {*r = AF_SNA; return 0;} +#else /* def AF_SNA */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_SNA */ + if (x == Mono_Posix_UnixAddressFamily_AF_TIPC) +#ifdef AF_TIPC + {*r = AF_TIPC; return 0;} +#else /* def AF_TIPC */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_TIPC */ + if (x == Mono_Posix_UnixAddressFamily_AF_UNIX) +#ifdef AF_UNIX + {*r = AF_UNIX; return 0;} +#else /* def AF_UNIX */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_UNIX */ + if (x == Mono_Posix_UnixAddressFamily_AF_UNSPEC) +#ifdef AF_UNSPEC + {*r = AF_UNSPEC; return 0;} +#else /* def AF_UNSPEC */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_UNSPEC */ + if (x == Mono_Posix_UnixAddressFamily_AF_VSOCK) +#ifdef AF_VSOCK + {*r = AF_VSOCK; return 0;} +#else /* def AF_VSOCK */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_VSOCK */ + if (x == Mono_Posix_UnixAddressFamily_AF_WANPIPE) +#ifdef AF_WANPIPE + {*r = AF_WANPIPE; return 0;} +#else /* def AF_WANPIPE */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_WANPIPE */ + if (x == Mono_Posix_UnixAddressFamily_AF_X25) +#ifdef AF_X25 + {*r = AF_X25; return 0;} +#else /* def AF_X25 */ + {errno = EINVAL; return -1;} +#endif /* ndef AF_X25 */ + if (x == 0) + return 0; + errno = EINVAL; return -1; +} + +int Mono_Posix_ToUnixAddressFamily (int x, int *r) +{ + *r = 0; + if (x == 0) + return 0; +#ifdef AF_ALG + if (x == AF_ALG) + {*r = Mono_Posix_UnixAddressFamily_AF_ALG; return 0;} +#endif /* ndef AF_ALG */ +#ifdef AF_APPLETALK + if (x == AF_APPLETALK) + {*r = Mono_Posix_UnixAddressFamily_AF_APPLETALK; return 0;} +#endif /* ndef AF_APPLETALK */ +#ifdef AF_ASH + if (x == AF_ASH) + {*r = Mono_Posix_UnixAddressFamily_AF_ASH; return 0;} +#endif /* ndef AF_ASH */ +#ifdef AF_ATMPVC + if (x == AF_ATMPVC) + {*r = Mono_Posix_UnixAddressFamily_AF_ATMPVC; return 0;} +#endif /* ndef AF_ATMPVC */ +#ifdef AF_ATMSVC + if (x == AF_ATMSVC) + {*r = Mono_Posix_UnixAddressFamily_AF_ATMSVC; return 0;} +#endif /* ndef AF_ATMSVC */ +#ifdef AF_AX25 + if (x == AF_AX25) + {*r = Mono_Posix_UnixAddressFamily_AF_AX25; return 0;} +#endif /* ndef AF_AX25 */ +#ifdef AF_BLUETOOTH + if (x == AF_BLUETOOTH) + {*r = Mono_Posix_UnixAddressFamily_AF_BLUETOOTH; return 0;} +#endif /* ndef AF_BLUETOOTH */ +#ifdef AF_BRIDGE + if (x == AF_BRIDGE) + {*r = Mono_Posix_UnixAddressFamily_AF_BRIDGE; return 0;} +#endif /* ndef AF_BRIDGE */ +#ifdef AF_CAIF + if (x == AF_CAIF) + {*r = Mono_Posix_UnixAddressFamily_AF_CAIF; return 0;} +#endif /* ndef AF_CAIF */ +#ifdef AF_CAN + if (x == AF_CAN) + {*r = Mono_Posix_UnixAddressFamily_AF_CAN; return 0;} +#endif /* ndef AF_CAN */ +#ifdef AF_DECnet + if (x == AF_DECnet) + {*r = Mono_Posix_UnixAddressFamily_AF_DECnet; return 0;} +#endif /* ndef AF_DECnet */ +#ifdef AF_ECONET + if (x == AF_ECONET) + {*r = Mono_Posix_UnixAddressFamily_AF_ECONET; return 0;} +#endif /* ndef AF_ECONET */ +#ifdef AF_IEEE802154 + if (x == AF_IEEE802154) + {*r = Mono_Posix_UnixAddressFamily_AF_IEEE802154; return 0;} +#endif /* ndef AF_IEEE802154 */ +#ifdef AF_INET + if (x == AF_INET) + {*r = Mono_Posix_UnixAddressFamily_AF_INET; return 0;} +#endif /* ndef AF_INET */ +#ifdef AF_INET6 + if (x == AF_INET6) + {*r = Mono_Posix_UnixAddressFamily_AF_INET6; return 0;} +#endif /* ndef AF_INET6 */ +#ifdef AF_IPX + if (x == AF_IPX) + {*r = Mono_Posix_UnixAddressFamily_AF_IPX; return 0;} +#endif /* ndef AF_IPX */ +#ifdef AF_IRDA + if (x == AF_IRDA) + {*r = Mono_Posix_UnixAddressFamily_AF_IRDA; return 0;} +#endif /* ndef AF_IRDA */ +#ifdef AF_ISDN + if (x == AF_ISDN) + {*r = Mono_Posix_UnixAddressFamily_AF_ISDN; return 0;} +#endif /* ndef AF_ISDN */ +#ifdef AF_IUCV + if (x == AF_IUCV) + {*r = Mono_Posix_UnixAddressFamily_AF_IUCV; return 0;} +#endif /* ndef AF_IUCV */ +#ifdef AF_KEY + if (x == AF_KEY) + {*r = Mono_Posix_UnixAddressFamily_AF_KEY; return 0;} +#endif /* ndef AF_KEY */ +#ifdef AF_LLC + if (x == AF_LLC) + {*r = Mono_Posix_UnixAddressFamily_AF_LLC; return 0;} +#endif /* ndef AF_LLC */ +#ifdef AF_NETBEUI + if (x == AF_NETBEUI) + {*r = Mono_Posix_UnixAddressFamily_AF_NETBEUI; return 0;} +#endif /* ndef AF_NETBEUI */ +#ifdef AF_NETLINK + if (x == AF_NETLINK) + {*r = Mono_Posix_UnixAddressFamily_AF_NETLINK; return 0;} +#endif /* ndef AF_NETLINK */ +#ifdef AF_NETROM + if (x == AF_NETROM) + {*r = Mono_Posix_UnixAddressFamily_AF_NETROM; return 0;} +#endif /* ndef AF_NETROM */ +#ifdef AF_NFC + if (x == AF_NFC) + {*r = Mono_Posix_UnixAddressFamily_AF_NFC; return 0;} +#endif /* ndef AF_NFC */ +#ifdef AF_PACKET + if (x == AF_PACKET) + {*r = Mono_Posix_UnixAddressFamily_AF_PACKET; return 0;} +#endif /* ndef AF_PACKET */ +#ifdef AF_PHONET + if (x == AF_PHONET) + {*r = Mono_Posix_UnixAddressFamily_AF_PHONET; return 0;} +#endif /* ndef AF_PHONET */ +#ifdef AF_PPPOX + if (x == AF_PPPOX) + {*r = Mono_Posix_UnixAddressFamily_AF_PPPOX; return 0;} +#endif /* ndef AF_PPPOX */ +#ifdef AF_RDS + if (x == AF_RDS) + {*r = Mono_Posix_UnixAddressFamily_AF_RDS; return 0;} +#endif /* ndef AF_RDS */ +#ifdef AF_ROSE + if (x == AF_ROSE) + {*r = Mono_Posix_UnixAddressFamily_AF_ROSE; return 0;} +#endif /* ndef AF_ROSE */ +#ifdef AF_RXRPC + if (x == AF_RXRPC) + {*r = Mono_Posix_UnixAddressFamily_AF_RXRPC; return 0;} +#endif /* ndef AF_RXRPC */ +#ifdef AF_SECURITY + if (x == AF_SECURITY) + {*r = Mono_Posix_UnixAddressFamily_AF_SECURITY; return 0;} +#endif /* ndef AF_SECURITY */ +#ifdef AF_SNA + if (x == AF_SNA) + {*r = Mono_Posix_UnixAddressFamily_AF_SNA; return 0;} +#endif /* ndef AF_SNA */ +#ifdef AF_TIPC + if (x == AF_TIPC) + {*r = Mono_Posix_UnixAddressFamily_AF_TIPC; return 0;} +#endif /* ndef AF_TIPC */ +#ifdef AF_UNIX + if (x == AF_UNIX) + {*r = Mono_Posix_UnixAddressFamily_AF_UNIX; return 0;} +#endif /* ndef AF_UNIX */ +#ifdef AF_UNSPEC + if (x == AF_UNSPEC) + {*r = Mono_Posix_UnixAddressFamily_AF_UNSPEC; return 0;} +#endif /* ndef AF_UNSPEC */ +#ifdef AF_VSOCK + if (x == AF_VSOCK) + {*r = Mono_Posix_UnixAddressFamily_AF_VSOCK; return 0;} +#endif /* ndef AF_VSOCK */ +#ifdef AF_WANPIPE + if (x == AF_WANPIPE) + {*r = Mono_Posix_UnixAddressFamily_AF_WANPIPE; return 0;} +#endif /* ndef AF_WANPIPE */ +#ifdef AF_X25 + if (x == AF_X25) + {*r = Mono_Posix_UnixAddressFamily_AF_X25; return 0;} +#endif /* ndef AF_X25 */ + errno = EINVAL; return -1; +} + +int Mono_Posix_FromUnixSocketFlags (int x, int *r) +{ + *r = 0; + if ((x & Mono_Posix_UnixSocketFlags_SOCK_CLOEXEC) == Mono_Posix_UnixSocketFlags_SOCK_CLOEXEC) +#ifdef SOCK_CLOEXEC + *r |= SOCK_CLOEXEC; +#else /* def SOCK_CLOEXEC */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_CLOEXEC */ + if ((x & Mono_Posix_UnixSocketFlags_SOCK_NONBLOCK) == Mono_Posix_UnixSocketFlags_SOCK_NONBLOCK) +#ifdef SOCK_NONBLOCK + *r |= SOCK_NONBLOCK; +#else /* def SOCK_NONBLOCK */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_NONBLOCK */ + if (x == 0) + return 0; + return 0; +} + +int Mono_Posix_ToUnixSocketFlags (int x, int *r) +{ + *r = 0; + if (x == 0) + return 0; +#ifdef SOCK_CLOEXEC + if ((x & SOCK_CLOEXEC) == SOCK_CLOEXEC) + *r |= Mono_Posix_UnixSocketFlags_SOCK_CLOEXEC; +#endif /* ndef SOCK_CLOEXEC */ +#ifdef SOCK_NONBLOCK + if ((x & SOCK_NONBLOCK) == SOCK_NONBLOCK) + *r |= Mono_Posix_UnixSocketFlags_SOCK_NONBLOCK; +#endif /* ndef SOCK_NONBLOCK */ + return 0; +} + +int Mono_Posix_FromUnixSocketOptionName (int x, int *r) +{ + *r = 0; + if (x == Mono_Posix_UnixSocketOptionName_SO_ACCEPTCONN) +#ifdef SO_ACCEPTCONN + {*r = SO_ACCEPTCONN; return 0;} +#else /* def SO_ACCEPTCONN */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_ACCEPTCONN */ + if (x == Mono_Posix_UnixSocketOptionName_SO_ATTACH_FILTER) +#ifdef SO_ATTACH_FILTER + {*r = SO_ATTACH_FILTER; return 0;} +#else /* def SO_ATTACH_FILTER */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_ATTACH_FILTER */ + if (x == Mono_Posix_UnixSocketOptionName_SO_BINDTODEVICE) +#ifdef SO_BINDTODEVICE + {*r = SO_BINDTODEVICE; return 0;} +#else /* def SO_BINDTODEVICE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_BINDTODEVICE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_BROADCAST) +#ifdef SO_BROADCAST + {*r = SO_BROADCAST; return 0;} +#else /* def SO_BROADCAST */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_BROADCAST */ + if (x == Mono_Posix_UnixSocketOptionName_SO_BSDCOMPAT) +#ifdef SO_BSDCOMPAT + {*r = SO_BSDCOMPAT; return 0;} +#else /* def SO_BSDCOMPAT */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_BSDCOMPAT */ + if (x == Mono_Posix_UnixSocketOptionName_SO_BUSY_POLL) +#ifdef SO_BUSY_POLL + {*r = SO_BUSY_POLL; return 0;} +#else /* def SO_BUSY_POLL */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_BUSY_POLL */ + if (x == Mono_Posix_UnixSocketOptionName_SO_DEBUG) +#ifdef SO_DEBUG + {*r = SO_DEBUG; return 0;} +#else /* def SO_DEBUG */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_DEBUG */ + if (x == Mono_Posix_UnixSocketOptionName_SO_DETACH_FILTER) +#ifdef SO_DETACH_FILTER + {*r = SO_DETACH_FILTER; return 0;} +#else /* def SO_DETACH_FILTER */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_DETACH_FILTER */ + if (x == Mono_Posix_UnixSocketOptionName_SO_DOMAIN) +#ifdef SO_DOMAIN + {*r = SO_DOMAIN; return 0;} +#else /* def SO_DOMAIN */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_DOMAIN */ + if (x == Mono_Posix_UnixSocketOptionName_SO_DONTROUTE) +#ifdef SO_DONTROUTE + {*r = SO_DONTROUTE; return 0;} +#else /* def SO_DONTROUTE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_DONTROUTE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_ERROR) +#ifdef SO_ERROR + {*r = SO_ERROR; return 0;} +#else /* def SO_ERROR */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_ERROR */ + if (x == Mono_Posix_UnixSocketOptionName_SO_KEEPALIVE) +#ifdef SO_KEEPALIVE + {*r = SO_KEEPALIVE; return 0;} +#else /* def SO_KEEPALIVE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_KEEPALIVE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_LINGER) +#ifdef SO_LINGER + {*r = SO_LINGER; return 0;} +#else /* def SO_LINGER */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_LINGER */ + if (x == Mono_Posix_UnixSocketOptionName_SO_LOCK_FILTER) +#ifdef SO_LOCK_FILTER + {*r = SO_LOCK_FILTER; return 0;} +#else /* def SO_LOCK_FILTER */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_LOCK_FILTER */ + if (x == Mono_Posix_UnixSocketOptionName_SO_MARK) +#ifdef SO_MARK + {*r = SO_MARK; return 0;} +#else /* def SO_MARK */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_MARK */ + if (x == Mono_Posix_UnixSocketOptionName_SO_MAX_PACING_RATE) +#ifdef SO_MAX_PACING_RATE + {*r = SO_MAX_PACING_RATE; return 0;} +#else /* def SO_MAX_PACING_RATE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_MAX_PACING_RATE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_NOFCS) +#ifdef SO_NOFCS + {*r = SO_NOFCS; return 0;} +#else /* def SO_NOFCS */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_NOFCS */ + if (x == Mono_Posix_UnixSocketOptionName_SO_NO_CHECK) +#ifdef SO_NO_CHECK + {*r = SO_NO_CHECK; return 0;} +#else /* def SO_NO_CHECK */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_NO_CHECK */ + if (x == Mono_Posix_UnixSocketOptionName_SO_OOBINLINE) +#ifdef SO_OOBINLINE + {*r = SO_OOBINLINE; return 0;} +#else /* def SO_OOBINLINE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_OOBINLINE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PASSCRED) +#ifdef SO_PASSCRED + {*r = SO_PASSCRED; return 0;} +#else /* def SO_PASSCRED */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PASSCRED */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PASSSEC) +#ifdef SO_PASSSEC + {*r = SO_PASSSEC; return 0;} +#else /* def SO_PASSSEC */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PASSSEC */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PEEK_OFF) +#ifdef SO_PEEK_OFF + {*r = SO_PEEK_OFF; return 0;} +#else /* def SO_PEEK_OFF */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PEEK_OFF */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PEERCRED) +#ifdef SO_PEERCRED + {*r = SO_PEERCRED; return 0;} +#else /* def SO_PEERCRED */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PEERCRED */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PEERNAME) +#ifdef SO_PEERNAME + {*r = SO_PEERNAME; return 0;} +#else /* def SO_PEERNAME */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PEERNAME */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PEERSEC) +#ifdef SO_PEERSEC + {*r = SO_PEERSEC; return 0;} +#else /* def SO_PEERSEC */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PEERSEC */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PRIORITY) +#ifdef SO_PRIORITY + {*r = SO_PRIORITY; return 0;} +#else /* def SO_PRIORITY */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PRIORITY */ + if (x == Mono_Posix_UnixSocketOptionName_SO_PROTOCOL) +#ifdef SO_PROTOCOL + {*r = SO_PROTOCOL; return 0;} +#else /* def SO_PROTOCOL */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_PROTOCOL */ + if (x == Mono_Posix_UnixSocketOptionName_SO_RCVBUF) +#ifdef SO_RCVBUF + {*r = SO_RCVBUF; return 0;} +#else /* def SO_RCVBUF */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_RCVBUF */ + if (x == Mono_Posix_UnixSocketOptionName_SO_RCVBUFFORCE) +#ifdef SO_RCVBUFFORCE + {*r = SO_RCVBUFFORCE; return 0;} +#else /* def SO_RCVBUFFORCE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_RCVBUFFORCE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_RCVLOWAT) +#ifdef SO_RCVLOWAT + {*r = SO_RCVLOWAT; return 0;} +#else /* def SO_RCVLOWAT */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_RCVLOWAT */ + if (x == Mono_Posix_UnixSocketOptionName_SO_RCVTIMEO) +#ifdef SO_RCVTIMEO + {*r = SO_RCVTIMEO; return 0;} +#else /* def SO_RCVTIMEO */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_RCVTIMEO */ + if (x == Mono_Posix_UnixSocketOptionName_SO_REUSEADDR) +#ifdef SO_REUSEADDR + {*r = SO_REUSEADDR; return 0;} +#else /* def SO_REUSEADDR */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_REUSEADDR */ + if (x == Mono_Posix_UnixSocketOptionName_SO_REUSEPORT) +#ifdef SO_REUSEPORT + {*r = SO_REUSEPORT; return 0;} +#else /* def SO_REUSEPORT */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_REUSEPORT */ + if (x == Mono_Posix_UnixSocketOptionName_SO_RXQ_OVFL) +#ifdef SO_RXQ_OVFL + {*r = SO_RXQ_OVFL; return 0;} +#else /* def SO_RXQ_OVFL */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_RXQ_OVFL */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SECURITY_AUTHENTICATION) +#ifdef SO_SECURITY_AUTHENTICATION + {*r = SO_SECURITY_AUTHENTICATION; return 0;} +#else /* def SO_SECURITY_AUTHENTICATION */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SECURITY_AUTHENTICATION */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_NETWORK) +#ifdef SO_SECURITY_ENCRYPTION_NETWORK + {*r = SO_SECURITY_ENCRYPTION_NETWORK; return 0;} +#else /* def SO_SECURITY_ENCRYPTION_NETWORK */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SECURITY_ENCRYPTION_NETWORK */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_TRANSPORT) +#ifdef SO_SECURITY_ENCRYPTION_TRANSPORT + {*r = SO_SECURITY_ENCRYPTION_TRANSPORT; return 0;} +#else /* def SO_SECURITY_ENCRYPTION_TRANSPORT */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SECURITY_ENCRYPTION_TRANSPORT */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SELECT_ERR_QUEUE) +#ifdef SO_SELECT_ERR_QUEUE + {*r = SO_SELECT_ERR_QUEUE; return 0;} +#else /* def SO_SELECT_ERR_QUEUE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SELECT_ERR_QUEUE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SNDBUF) +#ifdef SO_SNDBUF + {*r = SO_SNDBUF; return 0;} +#else /* def SO_SNDBUF */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SNDBUF */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SNDBUFFORCE) +#ifdef SO_SNDBUFFORCE + {*r = SO_SNDBUFFORCE; return 0;} +#else /* def SO_SNDBUFFORCE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SNDBUFFORCE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SNDLOWAT) +#ifdef SO_SNDLOWAT + {*r = SO_SNDLOWAT; return 0;} +#else /* def SO_SNDLOWAT */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SNDLOWAT */ + if (x == Mono_Posix_UnixSocketOptionName_SO_SNDTIMEO) +#ifdef SO_SNDTIMEO + {*r = SO_SNDTIMEO; return 0;} +#else /* def SO_SNDTIMEO */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_SNDTIMEO */ + if (x == Mono_Posix_UnixSocketOptionName_SO_TIMESTAMP) +#ifdef SO_TIMESTAMP + {*r = SO_TIMESTAMP; return 0;} +#else /* def SO_TIMESTAMP */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_TIMESTAMP */ + if (x == Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPING) +#ifdef SO_TIMESTAMPING + {*r = SO_TIMESTAMPING; return 0;} +#else /* def SO_TIMESTAMPING */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_TIMESTAMPING */ + if (x == Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPNS) +#ifdef SO_TIMESTAMPNS + {*r = SO_TIMESTAMPNS; return 0;} +#else /* def SO_TIMESTAMPNS */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_TIMESTAMPNS */ + if (x == Mono_Posix_UnixSocketOptionName_SO_TYPE) +#ifdef SO_TYPE + {*r = SO_TYPE; return 0;} +#else /* def SO_TYPE */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_TYPE */ + if (x == Mono_Posix_UnixSocketOptionName_SO_WIFI_STATUS) +#ifdef SO_WIFI_STATUS + {*r = SO_WIFI_STATUS; return 0;} +#else /* def SO_WIFI_STATUS */ + {errno = EINVAL; return -1;} +#endif /* ndef SO_WIFI_STATUS */ + if (x == 0) + return 0; + errno = EINVAL; return -1; +} + +int Mono_Posix_ToUnixSocketOptionName (int x, int *r) +{ + *r = 0; + if (x == 0) + return 0; +#ifdef SO_ACCEPTCONN + if (x == SO_ACCEPTCONN) + {*r = Mono_Posix_UnixSocketOptionName_SO_ACCEPTCONN; return 0;} +#endif /* ndef SO_ACCEPTCONN */ +#ifdef SO_ATTACH_FILTER + if (x == SO_ATTACH_FILTER) + {*r = Mono_Posix_UnixSocketOptionName_SO_ATTACH_FILTER; return 0;} +#endif /* ndef SO_ATTACH_FILTER */ +#ifdef SO_BINDTODEVICE + if (x == SO_BINDTODEVICE) + {*r = Mono_Posix_UnixSocketOptionName_SO_BINDTODEVICE; return 0;} +#endif /* ndef SO_BINDTODEVICE */ +#ifdef SO_BROADCAST + if (x == SO_BROADCAST) + {*r = Mono_Posix_UnixSocketOptionName_SO_BROADCAST; return 0;} +#endif /* ndef SO_BROADCAST */ +#ifdef SO_BSDCOMPAT + if (x == SO_BSDCOMPAT) + {*r = Mono_Posix_UnixSocketOptionName_SO_BSDCOMPAT; return 0;} +#endif /* ndef SO_BSDCOMPAT */ +#ifdef SO_BUSY_POLL + if (x == SO_BUSY_POLL) + {*r = Mono_Posix_UnixSocketOptionName_SO_BUSY_POLL; return 0;} +#endif /* ndef SO_BUSY_POLL */ +#ifdef SO_DEBUG + if (x == SO_DEBUG) + {*r = Mono_Posix_UnixSocketOptionName_SO_DEBUG; return 0;} +#endif /* ndef SO_DEBUG */ +#ifdef SO_DETACH_FILTER + if (x == SO_DETACH_FILTER) + {*r = Mono_Posix_UnixSocketOptionName_SO_DETACH_FILTER; return 0;} +#endif /* ndef SO_DETACH_FILTER */ +#ifdef SO_DOMAIN + if (x == SO_DOMAIN) + {*r = Mono_Posix_UnixSocketOptionName_SO_DOMAIN; return 0;} +#endif /* ndef SO_DOMAIN */ +#ifdef SO_DONTROUTE + if (x == SO_DONTROUTE) + {*r = Mono_Posix_UnixSocketOptionName_SO_DONTROUTE; return 0;} +#endif /* ndef SO_DONTROUTE */ +#ifdef SO_ERROR + if (x == SO_ERROR) + {*r = Mono_Posix_UnixSocketOptionName_SO_ERROR; return 0;} +#endif /* ndef SO_ERROR */ +#ifdef SO_KEEPALIVE + if (x == SO_KEEPALIVE) + {*r = Mono_Posix_UnixSocketOptionName_SO_KEEPALIVE; return 0;} +#endif /* ndef SO_KEEPALIVE */ +#ifdef SO_LINGER + if (x == SO_LINGER) + {*r = Mono_Posix_UnixSocketOptionName_SO_LINGER; return 0;} +#endif /* ndef SO_LINGER */ +#ifdef SO_LOCK_FILTER + if (x == SO_LOCK_FILTER) + {*r = Mono_Posix_UnixSocketOptionName_SO_LOCK_FILTER; return 0;} +#endif /* ndef SO_LOCK_FILTER */ +#ifdef SO_MARK + if (x == SO_MARK) + {*r = Mono_Posix_UnixSocketOptionName_SO_MARK; return 0;} +#endif /* ndef SO_MARK */ +#ifdef SO_MAX_PACING_RATE + if (x == SO_MAX_PACING_RATE) + {*r = Mono_Posix_UnixSocketOptionName_SO_MAX_PACING_RATE; return 0;} +#endif /* ndef SO_MAX_PACING_RATE */ +#ifdef SO_NOFCS + if (x == SO_NOFCS) + {*r = Mono_Posix_UnixSocketOptionName_SO_NOFCS; return 0;} +#endif /* ndef SO_NOFCS */ +#ifdef SO_NO_CHECK + if (x == SO_NO_CHECK) + {*r = Mono_Posix_UnixSocketOptionName_SO_NO_CHECK; return 0;} +#endif /* ndef SO_NO_CHECK */ +#ifdef SO_OOBINLINE + if (x == SO_OOBINLINE) + {*r = Mono_Posix_UnixSocketOptionName_SO_OOBINLINE; return 0;} +#endif /* ndef SO_OOBINLINE */ +#ifdef SO_PASSCRED + if (x == SO_PASSCRED) + {*r = Mono_Posix_UnixSocketOptionName_SO_PASSCRED; return 0;} +#endif /* ndef SO_PASSCRED */ +#ifdef SO_PASSSEC + if (x == SO_PASSSEC) + {*r = Mono_Posix_UnixSocketOptionName_SO_PASSSEC; return 0;} +#endif /* ndef SO_PASSSEC */ +#ifdef SO_PEEK_OFF + if (x == SO_PEEK_OFF) + {*r = Mono_Posix_UnixSocketOptionName_SO_PEEK_OFF; return 0;} +#endif /* ndef SO_PEEK_OFF */ +#ifdef SO_PEERCRED + if (x == SO_PEERCRED) + {*r = Mono_Posix_UnixSocketOptionName_SO_PEERCRED; return 0;} +#endif /* ndef SO_PEERCRED */ +#ifdef SO_PEERNAME + if (x == SO_PEERNAME) + {*r = Mono_Posix_UnixSocketOptionName_SO_PEERNAME; return 0;} +#endif /* ndef SO_PEERNAME */ +#ifdef SO_PEERSEC + if (x == SO_PEERSEC) + {*r = Mono_Posix_UnixSocketOptionName_SO_PEERSEC; return 0;} +#endif /* ndef SO_PEERSEC */ +#ifdef SO_PRIORITY + if (x == SO_PRIORITY) + {*r = Mono_Posix_UnixSocketOptionName_SO_PRIORITY; return 0;} +#endif /* ndef SO_PRIORITY */ +#ifdef SO_PROTOCOL + if (x == SO_PROTOCOL) + {*r = Mono_Posix_UnixSocketOptionName_SO_PROTOCOL; return 0;} +#endif /* ndef SO_PROTOCOL */ +#ifdef SO_RCVBUF + if (x == SO_RCVBUF) + {*r = Mono_Posix_UnixSocketOptionName_SO_RCVBUF; return 0;} +#endif /* ndef SO_RCVBUF */ +#ifdef SO_RCVBUFFORCE + if (x == SO_RCVBUFFORCE) + {*r = Mono_Posix_UnixSocketOptionName_SO_RCVBUFFORCE; return 0;} +#endif /* ndef SO_RCVBUFFORCE */ +#ifdef SO_RCVLOWAT + if (x == SO_RCVLOWAT) + {*r = Mono_Posix_UnixSocketOptionName_SO_RCVLOWAT; return 0;} +#endif /* ndef SO_RCVLOWAT */ +#ifdef SO_RCVTIMEO + if (x == SO_RCVTIMEO) + {*r = Mono_Posix_UnixSocketOptionName_SO_RCVTIMEO; return 0;} +#endif /* ndef SO_RCVTIMEO */ +#ifdef SO_REUSEADDR + if (x == SO_REUSEADDR) + {*r = Mono_Posix_UnixSocketOptionName_SO_REUSEADDR; return 0;} +#endif /* ndef SO_REUSEADDR */ +#ifdef SO_REUSEPORT + if (x == SO_REUSEPORT) + {*r = Mono_Posix_UnixSocketOptionName_SO_REUSEPORT; return 0;} +#endif /* ndef SO_REUSEPORT */ +#ifdef SO_RXQ_OVFL + if (x == SO_RXQ_OVFL) + {*r = Mono_Posix_UnixSocketOptionName_SO_RXQ_OVFL; return 0;} +#endif /* ndef SO_RXQ_OVFL */ +#ifdef SO_SECURITY_AUTHENTICATION + if (x == SO_SECURITY_AUTHENTICATION) + {*r = Mono_Posix_UnixSocketOptionName_SO_SECURITY_AUTHENTICATION; return 0;} +#endif /* ndef SO_SECURITY_AUTHENTICATION */ +#ifdef SO_SECURITY_ENCRYPTION_NETWORK + if (x == SO_SECURITY_ENCRYPTION_NETWORK) + {*r = Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_NETWORK; return 0;} +#endif /* ndef SO_SECURITY_ENCRYPTION_NETWORK */ +#ifdef SO_SECURITY_ENCRYPTION_TRANSPORT + if (x == SO_SECURITY_ENCRYPTION_TRANSPORT) + {*r = Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_TRANSPORT; return 0;} +#endif /* ndef SO_SECURITY_ENCRYPTION_TRANSPORT */ +#ifdef SO_SELECT_ERR_QUEUE + if (x == SO_SELECT_ERR_QUEUE) + {*r = Mono_Posix_UnixSocketOptionName_SO_SELECT_ERR_QUEUE; return 0;} +#endif /* ndef SO_SELECT_ERR_QUEUE */ +#ifdef SO_SNDBUF + if (x == SO_SNDBUF) + {*r = Mono_Posix_UnixSocketOptionName_SO_SNDBUF; return 0;} +#endif /* ndef SO_SNDBUF */ +#ifdef SO_SNDBUFFORCE + if (x == SO_SNDBUFFORCE) + {*r = Mono_Posix_UnixSocketOptionName_SO_SNDBUFFORCE; return 0;} +#endif /* ndef SO_SNDBUFFORCE */ +#ifdef SO_SNDLOWAT + if (x == SO_SNDLOWAT) + {*r = Mono_Posix_UnixSocketOptionName_SO_SNDLOWAT; return 0;} +#endif /* ndef SO_SNDLOWAT */ +#ifdef SO_SNDTIMEO + if (x == SO_SNDTIMEO) + {*r = Mono_Posix_UnixSocketOptionName_SO_SNDTIMEO; return 0;} +#endif /* ndef SO_SNDTIMEO */ +#ifdef SO_TIMESTAMP + if (x == SO_TIMESTAMP) + {*r = Mono_Posix_UnixSocketOptionName_SO_TIMESTAMP; return 0;} +#endif /* ndef SO_TIMESTAMP */ +#ifdef SO_TIMESTAMPING + if (x == SO_TIMESTAMPING) + {*r = Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPING; return 0;} +#endif /* ndef SO_TIMESTAMPING */ +#ifdef SO_TIMESTAMPNS + if (x == SO_TIMESTAMPNS) + {*r = Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPNS; return 0;} +#endif /* ndef SO_TIMESTAMPNS */ +#ifdef SO_TYPE + if (x == SO_TYPE) + {*r = Mono_Posix_UnixSocketOptionName_SO_TYPE; return 0;} +#endif /* ndef SO_TYPE */ +#ifdef SO_WIFI_STATUS + if (x == SO_WIFI_STATUS) + {*r = Mono_Posix_UnixSocketOptionName_SO_WIFI_STATUS; return 0;} +#endif /* ndef SO_WIFI_STATUS */ + errno = EINVAL; return -1; +} + +int Mono_Posix_FromUnixSocketProtocol (int x, int *r) +{ + *r = 0; + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_AH) +#ifdef IPPROTO_AH + {*r = IPPROTO_AH; return 0;} +#else /* def IPPROTO_AH */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_AH */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_BEETPH) +#ifdef IPPROTO_BEETPH + {*r = IPPROTO_BEETPH; return 0;} +#else /* def IPPROTO_BEETPH */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_BEETPH */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_COMP) +#ifdef IPPROTO_COMP + {*r = IPPROTO_COMP; return 0;} +#else /* def IPPROTO_COMP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_COMP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_DCCP) +#ifdef IPPROTO_DCCP + {*r = IPPROTO_DCCP; return 0;} +#else /* def IPPROTO_DCCP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_DCCP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_EGP) +#ifdef IPPROTO_EGP + {*r = IPPROTO_EGP; return 0;} +#else /* def IPPROTO_EGP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_EGP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_ENCAP) +#ifdef IPPROTO_ENCAP + {*r = IPPROTO_ENCAP; return 0;} +#else /* def IPPROTO_ENCAP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_ENCAP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_ESP) +#ifdef IPPROTO_ESP + {*r = IPPROTO_ESP; return 0;} +#else /* def IPPROTO_ESP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_ESP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_GRE) +#ifdef IPPROTO_GRE + {*r = IPPROTO_GRE; return 0;} +#else /* def IPPROTO_GRE */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_GRE */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_ICMP) +#ifdef IPPROTO_ICMP + {*r = IPPROTO_ICMP; return 0;} +#else /* def IPPROTO_ICMP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_ICMP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_IDP) +#ifdef IPPROTO_IDP + {*r = IPPROTO_IDP; return 0;} +#else /* def IPPROTO_IDP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_IDP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_IGMP) +#ifdef IPPROTO_IGMP + {*r = IPPROTO_IGMP; return 0;} +#else /* def IPPROTO_IGMP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_IGMP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_IP) +#ifdef IPPROTO_IP + {*r = IPPROTO_IP; return 0;} +#else /* def IPPROTO_IP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_IP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_IPIP) +#ifdef IPPROTO_IPIP + {*r = IPPROTO_IPIP; return 0;} +#else /* def IPPROTO_IPIP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_IPIP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_IPV6) +#ifdef IPPROTO_IPV6 + {*r = IPPROTO_IPV6; return 0;} +#else /* def IPPROTO_IPV6 */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_IPV6 */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_MTP) +#ifdef IPPROTO_MTP + {*r = IPPROTO_MTP; return 0;} +#else /* def IPPROTO_MTP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_MTP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_PIM) +#ifdef IPPROTO_PIM + {*r = IPPROTO_PIM; return 0;} +#else /* def IPPROTO_PIM */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_PIM */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_PUP) +#ifdef IPPROTO_PUP + {*r = IPPROTO_PUP; return 0;} +#else /* def IPPROTO_PUP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_PUP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_RAW) +#ifdef IPPROTO_RAW + {*r = IPPROTO_RAW; return 0;} +#else /* def IPPROTO_RAW */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_RAW */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_RSVP) +#ifdef IPPROTO_RSVP + {*r = IPPROTO_RSVP; return 0;} +#else /* def IPPROTO_RSVP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_RSVP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_SCTP) +#ifdef IPPROTO_SCTP + {*r = IPPROTO_SCTP; return 0;} +#else /* def IPPROTO_SCTP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_SCTP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_TCP) +#ifdef IPPROTO_TCP + {*r = IPPROTO_TCP; return 0;} +#else /* def IPPROTO_TCP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_TCP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_TP) +#ifdef IPPROTO_TP + {*r = IPPROTO_TP; return 0;} +#else /* def IPPROTO_TP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_TP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_UDP) +#ifdef IPPROTO_UDP + {*r = IPPROTO_UDP; return 0;} +#else /* def IPPROTO_UDP */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_UDP */ + if (x == Mono_Posix_UnixSocketProtocol_IPPROTO_UDPLITE) +#ifdef IPPROTO_UDPLITE + {*r = IPPROTO_UDPLITE; return 0;} +#else /* def IPPROTO_UDPLITE */ + {errno = EINVAL; return -1;} +#endif /* ndef IPPROTO_UDPLITE */ + if (x == Mono_Posix_UnixSocketProtocol_SOL_SOCKET) +#ifdef SOL_SOCKET + {*r = SOL_SOCKET; return 0;} +#else /* def SOL_SOCKET */ + {errno = EINVAL; return -1;} +#endif /* ndef SOL_SOCKET */ + if (x == 0) + return 0; + errno = EINVAL; return -1; +} + +int Mono_Posix_ToUnixSocketProtocol (int x, int *r) +{ + *r = 0; + if (x == 0) + return 0; +#ifdef IPPROTO_AH + if (x == IPPROTO_AH) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_AH; return 0;} +#endif /* ndef IPPROTO_AH */ +#ifdef IPPROTO_BEETPH + if (x == IPPROTO_BEETPH) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_BEETPH; return 0;} +#endif /* ndef IPPROTO_BEETPH */ +#ifdef IPPROTO_COMP + if (x == IPPROTO_COMP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_COMP; return 0;} +#endif /* ndef IPPROTO_COMP */ +#ifdef IPPROTO_DCCP + if (x == IPPROTO_DCCP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_DCCP; return 0;} +#endif /* ndef IPPROTO_DCCP */ +#ifdef IPPROTO_EGP + if (x == IPPROTO_EGP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_EGP; return 0;} +#endif /* ndef IPPROTO_EGP */ +#ifdef IPPROTO_ENCAP + if (x == IPPROTO_ENCAP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_ENCAP; return 0;} +#endif /* ndef IPPROTO_ENCAP */ +#ifdef IPPROTO_ESP + if (x == IPPROTO_ESP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_ESP; return 0;} +#endif /* ndef IPPROTO_ESP */ +#ifdef IPPROTO_GRE + if (x == IPPROTO_GRE) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_GRE; return 0;} +#endif /* ndef IPPROTO_GRE */ +#ifdef IPPROTO_ICMP + if (x == IPPROTO_ICMP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_ICMP; return 0;} +#endif /* ndef IPPROTO_ICMP */ +#ifdef IPPROTO_IDP + if (x == IPPROTO_IDP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_IDP; return 0;} +#endif /* ndef IPPROTO_IDP */ +#ifdef IPPROTO_IGMP + if (x == IPPROTO_IGMP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_IGMP; return 0;} +#endif /* ndef IPPROTO_IGMP */ +#ifdef IPPROTO_IP + if (x == IPPROTO_IP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_IP; return 0;} +#endif /* ndef IPPROTO_IP */ +#ifdef IPPROTO_IPIP + if (x == IPPROTO_IPIP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_IPIP; return 0;} +#endif /* ndef IPPROTO_IPIP */ +#ifdef IPPROTO_IPV6 + if (x == IPPROTO_IPV6) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_IPV6; return 0;} +#endif /* ndef IPPROTO_IPV6 */ +#ifdef IPPROTO_MTP + if (x == IPPROTO_MTP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_MTP; return 0;} +#endif /* ndef IPPROTO_MTP */ +#ifdef IPPROTO_PIM + if (x == IPPROTO_PIM) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_PIM; return 0;} +#endif /* ndef IPPROTO_PIM */ +#ifdef IPPROTO_PUP + if (x == IPPROTO_PUP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_PUP; return 0;} +#endif /* ndef IPPROTO_PUP */ +#ifdef IPPROTO_RAW + if (x == IPPROTO_RAW) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_RAW; return 0;} +#endif /* ndef IPPROTO_RAW */ +#ifdef IPPROTO_RSVP + if (x == IPPROTO_RSVP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_RSVP; return 0;} +#endif /* ndef IPPROTO_RSVP */ +#ifdef IPPROTO_SCTP + if (x == IPPROTO_SCTP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_SCTP; return 0;} +#endif /* ndef IPPROTO_SCTP */ +#ifdef IPPROTO_TCP + if (x == IPPROTO_TCP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_TCP; return 0;} +#endif /* ndef IPPROTO_TCP */ +#ifdef IPPROTO_TP + if (x == IPPROTO_TP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_TP; return 0;} +#endif /* ndef IPPROTO_TP */ +#ifdef IPPROTO_UDP + if (x == IPPROTO_UDP) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_UDP; return 0;} +#endif /* ndef IPPROTO_UDP */ +#ifdef IPPROTO_UDPLITE + if (x == IPPROTO_UDPLITE) + {*r = Mono_Posix_UnixSocketProtocol_IPPROTO_UDPLITE; return 0;} +#endif /* ndef IPPROTO_UDPLITE */ +#ifdef SOL_SOCKET + if (x == SOL_SOCKET) + {*r = Mono_Posix_UnixSocketProtocol_SOL_SOCKET; return 0;} +#endif /* ndef SOL_SOCKET */ + errno = EINVAL; return -1; +} + +int Mono_Posix_FromUnixSocketType (int x, int *r) +{ + *r = 0; + if (x == Mono_Posix_UnixSocketType_SOCK_DCCP) +#ifdef SOCK_DCCP + {*r = SOCK_DCCP; return 0;} +#else /* def SOCK_DCCP */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_DCCP */ + if (x == Mono_Posix_UnixSocketType_SOCK_DGRAM) +#ifdef SOCK_DGRAM + {*r = SOCK_DGRAM; return 0;} +#else /* def SOCK_DGRAM */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_DGRAM */ + if (x == Mono_Posix_UnixSocketType_SOCK_PACKET) +#ifdef SOCK_PACKET + {*r = SOCK_PACKET; return 0;} +#else /* def SOCK_PACKET */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_PACKET */ + if (x == Mono_Posix_UnixSocketType_SOCK_RAW) +#ifdef SOCK_RAW + {*r = SOCK_RAW; return 0;} +#else /* def SOCK_RAW */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_RAW */ + if (x == Mono_Posix_UnixSocketType_SOCK_RDM) +#ifdef SOCK_RDM + {*r = SOCK_RDM; return 0;} +#else /* def SOCK_RDM */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_RDM */ + if (x == Mono_Posix_UnixSocketType_SOCK_SEQPACKET) +#ifdef SOCK_SEQPACKET + {*r = SOCK_SEQPACKET; return 0;} +#else /* def SOCK_SEQPACKET */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_SEQPACKET */ + if (x == Mono_Posix_UnixSocketType_SOCK_STREAM) +#ifdef SOCK_STREAM + {*r = SOCK_STREAM; return 0;} +#else /* def SOCK_STREAM */ + {errno = EINVAL; return -1;} +#endif /* ndef SOCK_STREAM */ + if (x == 0) + return 0; + errno = EINVAL; return -1; +} + +int Mono_Posix_ToUnixSocketType (int x, int *r) +{ + *r = 0; + if (x == 0) + return 0; +#ifdef SOCK_DCCP + if (x == SOCK_DCCP) + {*r = Mono_Posix_UnixSocketType_SOCK_DCCP; return 0;} +#endif /* ndef SOCK_DCCP */ +#ifdef SOCK_DGRAM + if (x == SOCK_DGRAM) + {*r = Mono_Posix_UnixSocketType_SOCK_DGRAM; return 0;} +#endif /* ndef SOCK_DGRAM */ +#ifdef SOCK_PACKET + if (x == SOCK_PACKET) + {*r = Mono_Posix_UnixSocketType_SOCK_PACKET; return 0;} +#endif /* ndef SOCK_PACKET */ +#ifdef SOCK_RAW + if (x == SOCK_RAW) + {*r = Mono_Posix_UnixSocketType_SOCK_RAW; return 0;} +#endif /* ndef SOCK_RAW */ +#ifdef SOCK_RDM + if (x == SOCK_RDM) + {*r = Mono_Posix_UnixSocketType_SOCK_RDM; return 0;} +#endif /* ndef SOCK_RDM */ +#ifdef SOCK_SEQPACKET + if (x == SOCK_SEQPACKET) + {*r = Mono_Posix_UnixSocketType_SOCK_SEQPACKET; return 0;} +#endif /* ndef SOCK_SEQPACKET */ +#ifdef SOCK_STREAM + if (x == SOCK_STREAM) + {*r = Mono_Posix_UnixSocketType_SOCK_STREAM; return 0;} +#endif /* ndef SOCK_STREAM */ + errno = EINVAL; return -1; +} + #ifdef HAVE_STRUCT_UTIMBUF int Mono_Posix_FromUtimbuf (struct Mono_Posix_Utimbuf *from, struct utimbuf *to) diff --git a/support/map.h b/support/map.h index 9c170eac0dc..34cdb68ab4d 100644 --- a/support/map.h +++ b/support/map.h @@ -621,6 +621,49 @@ enum Mono_Posix_LockfCommand { int Mono_Posix_FromLockfCommand (int x, int *r); int Mono_Posix_ToLockfCommand (int x, int *r); +enum Mono_Posix_MessageFlags { + Mono_Posix_MessageFlags_MSG_CMSG_CLOEXEC = 0x40000000, + #define Mono_Posix_MessageFlags_MSG_CMSG_CLOEXEC Mono_Posix_MessageFlags_MSG_CMSG_CLOEXEC + Mono_Posix_MessageFlags_MSG_CONFIRM = 0x00000800, + #define Mono_Posix_MessageFlags_MSG_CONFIRM Mono_Posix_MessageFlags_MSG_CONFIRM + Mono_Posix_MessageFlags_MSG_CTRUNC = 0x00000008, + #define Mono_Posix_MessageFlags_MSG_CTRUNC Mono_Posix_MessageFlags_MSG_CTRUNC + Mono_Posix_MessageFlags_MSG_DONTROUTE = 0x00000004, + #define Mono_Posix_MessageFlags_MSG_DONTROUTE Mono_Posix_MessageFlags_MSG_DONTROUTE + Mono_Posix_MessageFlags_MSG_DONTWAIT = 0x00000040, + #define Mono_Posix_MessageFlags_MSG_DONTWAIT Mono_Posix_MessageFlags_MSG_DONTWAIT + Mono_Posix_MessageFlags_MSG_EOR = 0x00000080, + #define Mono_Posix_MessageFlags_MSG_EOR Mono_Posix_MessageFlags_MSG_EOR + Mono_Posix_MessageFlags_MSG_ERRQUEUE = 0x00002000, + #define Mono_Posix_MessageFlags_MSG_ERRQUEUE Mono_Posix_MessageFlags_MSG_ERRQUEUE + Mono_Posix_MessageFlags_MSG_FASTOPEN = 0x20000000, + #define Mono_Posix_MessageFlags_MSG_FASTOPEN Mono_Posix_MessageFlags_MSG_FASTOPEN + Mono_Posix_MessageFlags_MSG_FIN = 0x00000200, + #define Mono_Posix_MessageFlags_MSG_FIN Mono_Posix_MessageFlags_MSG_FIN + Mono_Posix_MessageFlags_MSG_MORE = 0x00008000, + #define Mono_Posix_MessageFlags_MSG_MORE Mono_Posix_MessageFlags_MSG_MORE + Mono_Posix_MessageFlags_MSG_NOSIGNAL = 0x00004000, + #define Mono_Posix_MessageFlags_MSG_NOSIGNAL Mono_Posix_MessageFlags_MSG_NOSIGNAL + Mono_Posix_MessageFlags_MSG_OOB = 0x00000001, + #define Mono_Posix_MessageFlags_MSG_OOB Mono_Posix_MessageFlags_MSG_OOB + Mono_Posix_MessageFlags_MSG_PEEK = 0x00000002, + #define Mono_Posix_MessageFlags_MSG_PEEK Mono_Posix_MessageFlags_MSG_PEEK + Mono_Posix_MessageFlags_MSG_PROXY = 0x00000010, + #define Mono_Posix_MessageFlags_MSG_PROXY Mono_Posix_MessageFlags_MSG_PROXY + Mono_Posix_MessageFlags_MSG_RST = 0x00001000, + #define Mono_Posix_MessageFlags_MSG_RST Mono_Posix_MessageFlags_MSG_RST + Mono_Posix_MessageFlags_MSG_SYN = 0x00000400, + #define Mono_Posix_MessageFlags_MSG_SYN Mono_Posix_MessageFlags_MSG_SYN + Mono_Posix_MessageFlags_MSG_TRUNC = 0x00000020, + #define Mono_Posix_MessageFlags_MSG_TRUNC Mono_Posix_MessageFlags_MSG_TRUNC + Mono_Posix_MessageFlags_MSG_WAITALL = 0x00000100, + #define Mono_Posix_MessageFlags_MSG_WAITALL Mono_Posix_MessageFlags_MSG_WAITALL + Mono_Posix_MessageFlags_MSG_WAITFORONE = 0x00010000, + #define Mono_Posix_MessageFlags_MSG_WAITFORONE Mono_Posix_MessageFlags_MSG_WAITFORONE +}; +int Mono_Posix_FromMessageFlags (int x, int *r); +int Mono_Posix_ToMessageFlags (int x, int *r); + enum Mono_Posix_MlockallFlags { Mono_Posix_MlockallFlags_MCL_CURRENT = 0x00000001, #define Mono_Posix_MlockallFlags_MCL_CURRENT Mono_Posix_MlockallFlags_MCL_CURRENT @@ -889,6 +932,17 @@ enum Mono_Posix_SeekFlags { int Mono_Posix_FromSeekFlags (short x, short *r); int Mono_Posix_ToSeekFlags (short x, short *r); +enum Mono_Posix_ShutdownOption { + Mono_Posix_ShutdownOption_SHUT_RD = 0x00000001, + #define Mono_Posix_ShutdownOption_SHUT_RD Mono_Posix_ShutdownOption_SHUT_RD + Mono_Posix_ShutdownOption_SHUT_RDWR = 0x00000003, + #define Mono_Posix_ShutdownOption_SHUT_RDWR Mono_Posix_ShutdownOption_SHUT_RDWR + Mono_Posix_ShutdownOption_SHUT_WR = 0x00000002, + #define Mono_Posix_ShutdownOption_SHUT_WR Mono_Posix_ShutdownOption_SHUT_WR +}; +int Mono_Posix_FromShutdownOption (int x, int *r); +int Mono_Posix_ToShutdownOption (int x, int *r); + enum Mono_Posix_Signum { Mono_Posix_Signum_SIGABRT = 0x00000006, #define Mono_Posix_Signum_SIGABRT Mono_Posix_Signum_SIGABRT @@ -1454,6 +1508,271 @@ enum Mono_Posix_SyslogOptions { int Mono_Posix_FromSyslogOptions (int x, int *r); int Mono_Posix_ToSyslogOptions (int x, int *r); +enum Mono_Posix_UnixAddressFamily { + Mono_Posix_UnixAddressFamily_AF_ALG = 0x00000026, + #define Mono_Posix_UnixAddressFamily_AF_ALG Mono_Posix_UnixAddressFamily_AF_ALG + Mono_Posix_UnixAddressFamily_AF_APPLETALK = 0x00000005, + #define Mono_Posix_UnixAddressFamily_AF_APPLETALK Mono_Posix_UnixAddressFamily_AF_APPLETALK + Mono_Posix_UnixAddressFamily_AF_ASH = 0x00000012, + #define Mono_Posix_UnixAddressFamily_AF_ASH Mono_Posix_UnixAddressFamily_AF_ASH + Mono_Posix_UnixAddressFamily_AF_ATMPVC = 0x00000008, + #define Mono_Posix_UnixAddressFamily_AF_ATMPVC Mono_Posix_UnixAddressFamily_AF_ATMPVC + Mono_Posix_UnixAddressFamily_AF_ATMSVC = 0x00000014, + #define Mono_Posix_UnixAddressFamily_AF_ATMSVC Mono_Posix_UnixAddressFamily_AF_ATMSVC + Mono_Posix_UnixAddressFamily_AF_AX25 = 0x00000003, + #define Mono_Posix_UnixAddressFamily_AF_AX25 Mono_Posix_UnixAddressFamily_AF_AX25 + Mono_Posix_UnixAddressFamily_AF_BLUETOOTH = 0x0000001f, + #define Mono_Posix_UnixAddressFamily_AF_BLUETOOTH Mono_Posix_UnixAddressFamily_AF_BLUETOOTH + Mono_Posix_UnixAddressFamily_AF_BRIDGE = 0x00000007, + #define Mono_Posix_UnixAddressFamily_AF_BRIDGE Mono_Posix_UnixAddressFamily_AF_BRIDGE + Mono_Posix_UnixAddressFamily_AF_CAIF = 0x00000025, + #define Mono_Posix_UnixAddressFamily_AF_CAIF Mono_Posix_UnixAddressFamily_AF_CAIF + Mono_Posix_UnixAddressFamily_AF_CAN = 0x0000001d, + #define Mono_Posix_UnixAddressFamily_AF_CAN Mono_Posix_UnixAddressFamily_AF_CAN + Mono_Posix_UnixAddressFamily_AF_DECnet = 0x0000000c, + #define Mono_Posix_UnixAddressFamily_AF_DECnet Mono_Posix_UnixAddressFamily_AF_DECnet + Mono_Posix_UnixAddressFamily_AF_ECONET = 0x00000013, + #define Mono_Posix_UnixAddressFamily_AF_ECONET Mono_Posix_UnixAddressFamily_AF_ECONET + Mono_Posix_UnixAddressFamily_AF_IEEE802154 = 0x00000024, + #define Mono_Posix_UnixAddressFamily_AF_IEEE802154 Mono_Posix_UnixAddressFamily_AF_IEEE802154 + Mono_Posix_UnixAddressFamily_AF_INET = 0x00000002, + #define Mono_Posix_UnixAddressFamily_AF_INET Mono_Posix_UnixAddressFamily_AF_INET + Mono_Posix_UnixAddressFamily_AF_INET6 = 0x0000000a, + #define Mono_Posix_UnixAddressFamily_AF_INET6 Mono_Posix_UnixAddressFamily_AF_INET6 + Mono_Posix_UnixAddressFamily_AF_IPX = 0x00000004, + #define Mono_Posix_UnixAddressFamily_AF_IPX Mono_Posix_UnixAddressFamily_AF_IPX + Mono_Posix_UnixAddressFamily_AF_IRDA = 0x00000017, + #define Mono_Posix_UnixAddressFamily_AF_IRDA Mono_Posix_UnixAddressFamily_AF_IRDA + Mono_Posix_UnixAddressFamily_AF_ISDN = 0x00000022, + #define Mono_Posix_UnixAddressFamily_AF_ISDN Mono_Posix_UnixAddressFamily_AF_ISDN + Mono_Posix_UnixAddressFamily_AF_IUCV = 0x00000020, + #define Mono_Posix_UnixAddressFamily_AF_IUCV Mono_Posix_UnixAddressFamily_AF_IUCV + Mono_Posix_UnixAddressFamily_AF_KEY = 0x0000000f, + #define Mono_Posix_UnixAddressFamily_AF_KEY Mono_Posix_UnixAddressFamily_AF_KEY + Mono_Posix_UnixAddressFamily_AF_LLC = 0x0000001a, + #define Mono_Posix_UnixAddressFamily_AF_LLC Mono_Posix_UnixAddressFamily_AF_LLC + Mono_Posix_UnixAddressFamily_AF_NETBEUI = 0x0000000d, + #define Mono_Posix_UnixAddressFamily_AF_NETBEUI Mono_Posix_UnixAddressFamily_AF_NETBEUI + Mono_Posix_UnixAddressFamily_AF_NETLINK = 0x00000010, + #define Mono_Posix_UnixAddressFamily_AF_NETLINK Mono_Posix_UnixAddressFamily_AF_NETLINK + Mono_Posix_UnixAddressFamily_AF_NETROM = 0x00000006, + #define Mono_Posix_UnixAddressFamily_AF_NETROM Mono_Posix_UnixAddressFamily_AF_NETROM + Mono_Posix_UnixAddressFamily_AF_NFC = 0x00000027, + #define Mono_Posix_UnixAddressFamily_AF_NFC Mono_Posix_UnixAddressFamily_AF_NFC + Mono_Posix_UnixAddressFamily_AF_PACKET = 0x00000011, + #define Mono_Posix_UnixAddressFamily_AF_PACKET Mono_Posix_UnixAddressFamily_AF_PACKET + Mono_Posix_UnixAddressFamily_AF_PHONET = 0x00000023, + #define Mono_Posix_UnixAddressFamily_AF_PHONET Mono_Posix_UnixAddressFamily_AF_PHONET + Mono_Posix_UnixAddressFamily_AF_PPPOX = 0x00000018, + #define Mono_Posix_UnixAddressFamily_AF_PPPOX Mono_Posix_UnixAddressFamily_AF_PPPOX + Mono_Posix_UnixAddressFamily_AF_RDS = 0x00000015, + #define Mono_Posix_UnixAddressFamily_AF_RDS Mono_Posix_UnixAddressFamily_AF_RDS + Mono_Posix_UnixAddressFamily_AF_ROSE = 0x0000000b, + #define Mono_Posix_UnixAddressFamily_AF_ROSE Mono_Posix_UnixAddressFamily_AF_ROSE + Mono_Posix_UnixAddressFamily_AF_RXRPC = 0x00000021, + #define Mono_Posix_UnixAddressFamily_AF_RXRPC Mono_Posix_UnixAddressFamily_AF_RXRPC + Mono_Posix_UnixAddressFamily_AF_SECURITY = 0x0000000e, + #define Mono_Posix_UnixAddressFamily_AF_SECURITY Mono_Posix_UnixAddressFamily_AF_SECURITY + Mono_Posix_UnixAddressFamily_AF_SNA = 0x00000016, + #define Mono_Posix_UnixAddressFamily_AF_SNA Mono_Posix_UnixAddressFamily_AF_SNA + Mono_Posix_UnixAddressFamily_AF_TIPC = 0x0000001e, + #define Mono_Posix_UnixAddressFamily_AF_TIPC Mono_Posix_UnixAddressFamily_AF_TIPC + Mono_Posix_UnixAddressFamily_AF_UNIX = 0x00000001, + #define Mono_Posix_UnixAddressFamily_AF_UNIX Mono_Posix_UnixAddressFamily_AF_UNIX + Mono_Posix_UnixAddressFamily_AF_UNSPEC = 0x00000000, + #define Mono_Posix_UnixAddressFamily_AF_UNSPEC Mono_Posix_UnixAddressFamily_AF_UNSPEC + Mono_Posix_UnixAddressFamily_AF_VSOCK = 0x00000028, + #define Mono_Posix_UnixAddressFamily_AF_VSOCK Mono_Posix_UnixAddressFamily_AF_VSOCK + Mono_Posix_UnixAddressFamily_AF_WANPIPE = 0x00000019, + #define Mono_Posix_UnixAddressFamily_AF_WANPIPE Mono_Posix_UnixAddressFamily_AF_WANPIPE + Mono_Posix_UnixAddressFamily_AF_X25 = 0x00000009, + #define Mono_Posix_UnixAddressFamily_AF_X25 Mono_Posix_UnixAddressFamily_AF_X25 +}; +int Mono_Posix_FromUnixAddressFamily (int x, int *r); +int Mono_Posix_ToUnixAddressFamily (int x, int *r); + +enum Mono_Posix_UnixSocketFlags { + Mono_Posix_UnixSocketFlags_SOCK_CLOEXEC = 0x00080000, + #define Mono_Posix_UnixSocketFlags_SOCK_CLOEXEC Mono_Posix_UnixSocketFlags_SOCK_CLOEXEC + Mono_Posix_UnixSocketFlags_SOCK_NONBLOCK = 0x00000800, + #define Mono_Posix_UnixSocketFlags_SOCK_NONBLOCK Mono_Posix_UnixSocketFlags_SOCK_NONBLOCK +}; +int Mono_Posix_FromUnixSocketFlags (int x, int *r); +int Mono_Posix_ToUnixSocketFlags (int x, int *r); + +enum Mono_Posix_UnixSocketOptionName { + Mono_Posix_UnixSocketOptionName_SO_ACCEPTCONN = 0x0000001e, + #define Mono_Posix_UnixSocketOptionName_SO_ACCEPTCONN Mono_Posix_UnixSocketOptionName_SO_ACCEPTCONN + Mono_Posix_UnixSocketOptionName_SO_ATTACH_FILTER = 0x0000001a, + #define Mono_Posix_UnixSocketOptionName_SO_ATTACH_FILTER Mono_Posix_UnixSocketOptionName_SO_ATTACH_FILTER + Mono_Posix_UnixSocketOptionName_SO_BINDTODEVICE = 0x00000019, + #define Mono_Posix_UnixSocketOptionName_SO_BINDTODEVICE Mono_Posix_UnixSocketOptionName_SO_BINDTODEVICE + Mono_Posix_UnixSocketOptionName_SO_BROADCAST = 0x00000006, + #define Mono_Posix_UnixSocketOptionName_SO_BROADCAST Mono_Posix_UnixSocketOptionName_SO_BROADCAST + Mono_Posix_UnixSocketOptionName_SO_BSDCOMPAT = 0x0000000e, + #define Mono_Posix_UnixSocketOptionName_SO_BSDCOMPAT Mono_Posix_UnixSocketOptionName_SO_BSDCOMPAT + Mono_Posix_UnixSocketOptionName_SO_BUSY_POLL = 0x0000002e, + #define Mono_Posix_UnixSocketOptionName_SO_BUSY_POLL Mono_Posix_UnixSocketOptionName_SO_BUSY_POLL + Mono_Posix_UnixSocketOptionName_SO_DEBUG = 0x00000001, + #define Mono_Posix_UnixSocketOptionName_SO_DEBUG Mono_Posix_UnixSocketOptionName_SO_DEBUG + Mono_Posix_UnixSocketOptionName_SO_DETACH_FILTER = 0x0000001b, + #define Mono_Posix_UnixSocketOptionName_SO_DETACH_FILTER Mono_Posix_UnixSocketOptionName_SO_DETACH_FILTER + Mono_Posix_UnixSocketOptionName_SO_DOMAIN = 0x00000027, + #define Mono_Posix_UnixSocketOptionName_SO_DOMAIN Mono_Posix_UnixSocketOptionName_SO_DOMAIN + Mono_Posix_UnixSocketOptionName_SO_DONTROUTE = 0x00000005, + #define Mono_Posix_UnixSocketOptionName_SO_DONTROUTE Mono_Posix_UnixSocketOptionName_SO_DONTROUTE + Mono_Posix_UnixSocketOptionName_SO_ERROR = 0x00000004, + #define Mono_Posix_UnixSocketOptionName_SO_ERROR Mono_Posix_UnixSocketOptionName_SO_ERROR + Mono_Posix_UnixSocketOptionName_SO_KEEPALIVE = 0x00000009, + #define Mono_Posix_UnixSocketOptionName_SO_KEEPALIVE Mono_Posix_UnixSocketOptionName_SO_KEEPALIVE + Mono_Posix_UnixSocketOptionName_SO_LINGER = 0x0000000d, + #define Mono_Posix_UnixSocketOptionName_SO_LINGER Mono_Posix_UnixSocketOptionName_SO_LINGER + Mono_Posix_UnixSocketOptionName_SO_LOCK_FILTER = 0x0000002c, + #define Mono_Posix_UnixSocketOptionName_SO_LOCK_FILTER Mono_Posix_UnixSocketOptionName_SO_LOCK_FILTER + Mono_Posix_UnixSocketOptionName_SO_MARK = 0x00000024, + #define Mono_Posix_UnixSocketOptionName_SO_MARK Mono_Posix_UnixSocketOptionName_SO_MARK + Mono_Posix_UnixSocketOptionName_SO_MAX_PACING_RATE = 0x0000002f, + #define Mono_Posix_UnixSocketOptionName_SO_MAX_PACING_RATE Mono_Posix_UnixSocketOptionName_SO_MAX_PACING_RATE + Mono_Posix_UnixSocketOptionName_SO_NOFCS = 0x0000002b, + #define Mono_Posix_UnixSocketOptionName_SO_NOFCS Mono_Posix_UnixSocketOptionName_SO_NOFCS + Mono_Posix_UnixSocketOptionName_SO_NO_CHECK = 0x0000000b, + #define Mono_Posix_UnixSocketOptionName_SO_NO_CHECK Mono_Posix_UnixSocketOptionName_SO_NO_CHECK + Mono_Posix_UnixSocketOptionName_SO_OOBINLINE = 0x0000000a, + #define Mono_Posix_UnixSocketOptionName_SO_OOBINLINE Mono_Posix_UnixSocketOptionName_SO_OOBINLINE + Mono_Posix_UnixSocketOptionName_SO_PASSCRED = 0x00000010, + #define Mono_Posix_UnixSocketOptionName_SO_PASSCRED Mono_Posix_UnixSocketOptionName_SO_PASSCRED + Mono_Posix_UnixSocketOptionName_SO_PASSSEC = 0x00000022, + #define Mono_Posix_UnixSocketOptionName_SO_PASSSEC Mono_Posix_UnixSocketOptionName_SO_PASSSEC + Mono_Posix_UnixSocketOptionName_SO_PEEK_OFF = 0x0000002a, + #define Mono_Posix_UnixSocketOptionName_SO_PEEK_OFF Mono_Posix_UnixSocketOptionName_SO_PEEK_OFF + Mono_Posix_UnixSocketOptionName_SO_PEERCRED = 0x00000011, + #define Mono_Posix_UnixSocketOptionName_SO_PEERCRED Mono_Posix_UnixSocketOptionName_SO_PEERCRED + Mono_Posix_UnixSocketOptionName_SO_PEERNAME = 0x0000001c, + #define Mono_Posix_UnixSocketOptionName_SO_PEERNAME Mono_Posix_UnixSocketOptionName_SO_PEERNAME + Mono_Posix_UnixSocketOptionName_SO_PEERSEC = 0x0000001f, + #define Mono_Posix_UnixSocketOptionName_SO_PEERSEC Mono_Posix_UnixSocketOptionName_SO_PEERSEC + Mono_Posix_UnixSocketOptionName_SO_PRIORITY = 0x0000000c, + #define Mono_Posix_UnixSocketOptionName_SO_PRIORITY Mono_Posix_UnixSocketOptionName_SO_PRIORITY + Mono_Posix_UnixSocketOptionName_SO_PROTOCOL = 0x00000026, + #define Mono_Posix_UnixSocketOptionName_SO_PROTOCOL Mono_Posix_UnixSocketOptionName_SO_PROTOCOL + Mono_Posix_UnixSocketOptionName_SO_RCVBUF = 0x00000008, + #define Mono_Posix_UnixSocketOptionName_SO_RCVBUF Mono_Posix_UnixSocketOptionName_SO_RCVBUF + Mono_Posix_UnixSocketOptionName_SO_RCVBUFFORCE = 0x00000021, + #define Mono_Posix_UnixSocketOptionName_SO_RCVBUFFORCE Mono_Posix_UnixSocketOptionName_SO_RCVBUFFORCE + Mono_Posix_UnixSocketOptionName_SO_RCVLOWAT = 0x00000012, + #define Mono_Posix_UnixSocketOptionName_SO_RCVLOWAT Mono_Posix_UnixSocketOptionName_SO_RCVLOWAT + Mono_Posix_UnixSocketOptionName_SO_RCVTIMEO = 0x00000014, + #define Mono_Posix_UnixSocketOptionName_SO_RCVTIMEO Mono_Posix_UnixSocketOptionName_SO_RCVTIMEO + Mono_Posix_UnixSocketOptionName_SO_REUSEADDR = 0x00000002, + #define Mono_Posix_UnixSocketOptionName_SO_REUSEADDR Mono_Posix_UnixSocketOptionName_SO_REUSEADDR + Mono_Posix_UnixSocketOptionName_SO_REUSEPORT = 0x0000000f, + #define Mono_Posix_UnixSocketOptionName_SO_REUSEPORT Mono_Posix_UnixSocketOptionName_SO_REUSEPORT + Mono_Posix_UnixSocketOptionName_SO_RXQ_OVFL = 0x00000028, + #define Mono_Posix_UnixSocketOptionName_SO_RXQ_OVFL Mono_Posix_UnixSocketOptionName_SO_RXQ_OVFL + Mono_Posix_UnixSocketOptionName_SO_SECURITY_AUTHENTICATION = 0x00000016, + #define Mono_Posix_UnixSocketOptionName_SO_SECURITY_AUTHENTICATION Mono_Posix_UnixSocketOptionName_SO_SECURITY_AUTHENTICATION + Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_NETWORK = 0x00000018, + #define Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_NETWORK Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_NETWORK + Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_TRANSPORT = 0x00000017, + #define Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_TRANSPORT Mono_Posix_UnixSocketOptionName_SO_SECURITY_ENCRYPTION_TRANSPORT + Mono_Posix_UnixSocketOptionName_SO_SELECT_ERR_QUEUE = 0x0000002d, + #define Mono_Posix_UnixSocketOptionName_SO_SELECT_ERR_QUEUE Mono_Posix_UnixSocketOptionName_SO_SELECT_ERR_QUEUE + Mono_Posix_UnixSocketOptionName_SO_SNDBUF = 0x00000007, + #define Mono_Posix_UnixSocketOptionName_SO_SNDBUF Mono_Posix_UnixSocketOptionName_SO_SNDBUF + Mono_Posix_UnixSocketOptionName_SO_SNDBUFFORCE = 0x00000020, + #define Mono_Posix_UnixSocketOptionName_SO_SNDBUFFORCE Mono_Posix_UnixSocketOptionName_SO_SNDBUFFORCE + Mono_Posix_UnixSocketOptionName_SO_SNDLOWAT = 0x00000013, + #define Mono_Posix_UnixSocketOptionName_SO_SNDLOWAT Mono_Posix_UnixSocketOptionName_SO_SNDLOWAT + Mono_Posix_UnixSocketOptionName_SO_SNDTIMEO = 0x00000015, + #define Mono_Posix_UnixSocketOptionName_SO_SNDTIMEO Mono_Posix_UnixSocketOptionName_SO_SNDTIMEO + Mono_Posix_UnixSocketOptionName_SO_TIMESTAMP = 0x0000001d, + #define Mono_Posix_UnixSocketOptionName_SO_TIMESTAMP Mono_Posix_UnixSocketOptionName_SO_TIMESTAMP + Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPING = 0x00000025, + #define Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPING Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPING + Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPNS = 0x00000023, + #define Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPNS Mono_Posix_UnixSocketOptionName_SO_TIMESTAMPNS + Mono_Posix_UnixSocketOptionName_SO_TYPE = 0x00000003, + #define Mono_Posix_UnixSocketOptionName_SO_TYPE Mono_Posix_UnixSocketOptionName_SO_TYPE + Mono_Posix_UnixSocketOptionName_SO_WIFI_STATUS = 0x00000029, + #define Mono_Posix_UnixSocketOptionName_SO_WIFI_STATUS Mono_Posix_UnixSocketOptionName_SO_WIFI_STATUS +}; +int Mono_Posix_FromUnixSocketOptionName (int x, int *r); +int Mono_Posix_ToUnixSocketOptionName (int x, int *r); + +enum Mono_Posix_UnixSocketProtocol { + Mono_Posix_UnixSocketProtocol_IPPROTO_AH = 0x00000033, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_AH Mono_Posix_UnixSocketProtocol_IPPROTO_AH + Mono_Posix_UnixSocketProtocol_IPPROTO_BEETPH = 0x0000005e, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_BEETPH Mono_Posix_UnixSocketProtocol_IPPROTO_BEETPH + Mono_Posix_UnixSocketProtocol_IPPROTO_COMP = 0x0000006c, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_COMP Mono_Posix_UnixSocketProtocol_IPPROTO_COMP + Mono_Posix_UnixSocketProtocol_IPPROTO_DCCP = 0x00000021, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_DCCP Mono_Posix_UnixSocketProtocol_IPPROTO_DCCP + Mono_Posix_UnixSocketProtocol_IPPROTO_EGP = 0x00000008, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_EGP Mono_Posix_UnixSocketProtocol_IPPROTO_EGP + Mono_Posix_UnixSocketProtocol_IPPROTO_ENCAP = 0x00000062, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_ENCAP Mono_Posix_UnixSocketProtocol_IPPROTO_ENCAP + Mono_Posix_UnixSocketProtocol_IPPROTO_ESP = 0x00000032, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_ESP Mono_Posix_UnixSocketProtocol_IPPROTO_ESP + Mono_Posix_UnixSocketProtocol_IPPROTO_GRE = 0x0000002f, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_GRE Mono_Posix_UnixSocketProtocol_IPPROTO_GRE + Mono_Posix_UnixSocketProtocol_IPPROTO_ICMP = 0x00000001, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_ICMP Mono_Posix_UnixSocketProtocol_IPPROTO_ICMP + Mono_Posix_UnixSocketProtocol_IPPROTO_IDP = 0x00000016, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_IDP Mono_Posix_UnixSocketProtocol_IPPROTO_IDP + Mono_Posix_UnixSocketProtocol_IPPROTO_IGMP = 0x00000002, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_IGMP Mono_Posix_UnixSocketProtocol_IPPROTO_IGMP + Mono_Posix_UnixSocketProtocol_IPPROTO_IP = 0x00000400, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_IP Mono_Posix_UnixSocketProtocol_IPPROTO_IP + Mono_Posix_UnixSocketProtocol_IPPROTO_IPIP = 0x00000004, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_IPIP Mono_Posix_UnixSocketProtocol_IPPROTO_IPIP + Mono_Posix_UnixSocketProtocol_IPPROTO_IPV6 = 0x00000029, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_IPV6 Mono_Posix_UnixSocketProtocol_IPPROTO_IPV6 + Mono_Posix_UnixSocketProtocol_IPPROTO_MTP = 0x0000005c, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_MTP Mono_Posix_UnixSocketProtocol_IPPROTO_MTP + Mono_Posix_UnixSocketProtocol_IPPROTO_PIM = 0x00000067, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_PIM Mono_Posix_UnixSocketProtocol_IPPROTO_PIM + Mono_Posix_UnixSocketProtocol_IPPROTO_PUP = 0x0000000c, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_PUP Mono_Posix_UnixSocketProtocol_IPPROTO_PUP + Mono_Posix_UnixSocketProtocol_IPPROTO_RAW = 0x000000ff, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_RAW Mono_Posix_UnixSocketProtocol_IPPROTO_RAW + Mono_Posix_UnixSocketProtocol_IPPROTO_RSVP = 0x0000002e, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_RSVP Mono_Posix_UnixSocketProtocol_IPPROTO_RSVP + Mono_Posix_UnixSocketProtocol_IPPROTO_SCTP = 0x00000084, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_SCTP Mono_Posix_UnixSocketProtocol_IPPROTO_SCTP + Mono_Posix_UnixSocketProtocol_IPPROTO_TCP = 0x00000006, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_TCP Mono_Posix_UnixSocketProtocol_IPPROTO_TCP + Mono_Posix_UnixSocketProtocol_IPPROTO_TP = 0x0000001d, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_TP Mono_Posix_UnixSocketProtocol_IPPROTO_TP + Mono_Posix_UnixSocketProtocol_IPPROTO_UDP = 0x00000011, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_UDP Mono_Posix_UnixSocketProtocol_IPPROTO_UDP + Mono_Posix_UnixSocketProtocol_IPPROTO_UDPLITE = 0x00000088, + #define Mono_Posix_UnixSocketProtocol_IPPROTO_UDPLITE Mono_Posix_UnixSocketProtocol_IPPROTO_UDPLITE + Mono_Posix_UnixSocketProtocol_SOL_SOCKET = 0x00000800, + #define Mono_Posix_UnixSocketProtocol_SOL_SOCKET Mono_Posix_UnixSocketProtocol_SOL_SOCKET +}; +int Mono_Posix_FromUnixSocketProtocol (int x, int *r); +int Mono_Posix_ToUnixSocketProtocol (int x, int *r); + +enum Mono_Posix_UnixSocketType { + Mono_Posix_UnixSocketType_SOCK_DCCP = 0x00000006, + #define Mono_Posix_UnixSocketType_SOCK_DCCP Mono_Posix_UnixSocketType_SOCK_DCCP + Mono_Posix_UnixSocketType_SOCK_DGRAM = 0x00000002, + #define Mono_Posix_UnixSocketType_SOCK_DGRAM Mono_Posix_UnixSocketType_SOCK_DGRAM + Mono_Posix_UnixSocketType_SOCK_PACKET = 0x0000000a, + #define Mono_Posix_UnixSocketType_SOCK_PACKET Mono_Posix_UnixSocketType_SOCK_PACKET + Mono_Posix_UnixSocketType_SOCK_RAW = 0x00000003, + #define Mono_Posix_UnixSocketType_SOCK_RAW Mono_Posix_UnixSocketType_SOCK_RAW + Mono_Posix_UnixSocketType_SOCK_RDM = 0x00000004, + #define Mono_Posix_UnixSocketType_SOCK_RDM Mono_Posix_UnixSocketType_SOCK_RDM + Mono_Posix_UnixSocketType_SOCK_SEQPACKET = 0x00000005, + #define Mono_Posix_UnixSocketType_SOCK_SEQPACKET Mono_Posix_UnixSocketType_SOCK_SEQPACKET + Mono_Posix_UnixSocketType_SOCK_STREAM = 0x00000001, + #define Mono_Posix_UnixSocketType_SOCK_STREAM Mono_Posix_UnixSocketType_SOCK_STREAM +}; +int Mono_Posix_FromUnixSocketType (int x, int *r); +int Mono_Posix_ToUnixSocketType (int x, int *r); + enum Mono_Posix_WaitOptions { Mono_Posix_WaitOptions_WNOHANG = 0x00000001, #define Mono_Posix_WaitOptions_WNOHANG Mono_Posix_WaitOptions_WNOHANG @@ -1481,6 +1800,7 @@ int Mono_Posix_ToXattrFlags (int x, int *r); struct Mono_Posix_Flock; struct Mono_Posix_Iovec; +struct Mono_Posix_Linger; struct Mono_Posix_Pollfd; struct Mono_Posix_Stat; struct Mono_Posix_Statvfs; @@ -1501,6 +1821,7 @@ struct Mono_Unix_UnixSignal_SignalInfo; struct flock; struct iovec; +struct linger; struct pollfd; struct timespec; struct timeval; @@ -1542,6 +1863,17 @@ int Mono_Posix_ToIovec (struct iovec *from, struct Mono_Posix_Iovec* to); +struct Mono_Posix_Linger { + int l_onoff; + int l_linger; +}; + +int +Mono_Posix_FromLinger (struct Mono_Posix_Linger* from, struct linger *to); +int +Mono_Posix_ToLinger (struct linger *from, struct Mono_Posix_Linger* to); + + struct Mono_Posix_Pollfd { int fd; short events; @@ -1755,6 +2087,8 @@ int Mono_Posix_Syscall_endpwent (void); int Mono_Posix_Syscall_endusershell (void); int Mono_Posix_Syscall_fcntl (int fd, int cmd); int Mono_Posix_Syscall_fcntl_arg (int fd, int cmd, gint64 arg); +int Mono_Posix_Syscall_fcntl_arg_int (int fd, int cmd, int arg); +int Mono_Posix_Syscall_fcntl_arg_ptr (int fd, int cmd, void* ptr); int Mono_Posix_Syscall_fcntl_lock (int fd, int cmd, struct Mono_Posix_Flock* lock); int Mono_Posix_Syscall_fgetgrent (void* stream, struct Mono_Posix_Syscall__Group* grbuf); int Mono_Posix_Syscall_fgetpwent (void* stream, struct Mono_Posix_Syscall__Passwd* pwbuf); @@ -1790,6 +2124,9 @@ int Mono_Posix_Syscall_getpwnam (const char* name, struct Mono_Posix_Syscall__Pa int Mono_Posix_Syscall_getpwnam_r (const char* name, struct Mono_Posix_Syscall__Passwd* pwbuf, void** pwbufp); int Mono_Posix_Syscall_getpwuid (unsigned int uid, struct Mono_Posix_Syscall__Passwd* passwd); int Mono_Posix_Syscall_getpwuid_r (unsigned int uid, struct Mono_Posix_Syscall__Passwd* pwbuf, void** pwbufp); +int Mono_Posix_Syscall_getsockopt (int socket, int level, int option_name, void* option_value, gint64* option_len); +int Mono_Posix_Syscall_getsockopt_linger (int socket, int level, int option_name, struct Mono_Posix_Linger* option_value); +int Mono_Posix_Syscall_getsockopt_timeval (int socket, int level, int option_name, struct Mono_Posix_Timeval* option_value); int Mono_Posix_Syscall_gettimeofday (struct Mono_Posix_Timeval* tv, void* ignore); gint64 Mono_Posix_Syscall_getxattr (const char* path, const char* name, unsigned char* value, guint64 size); int Mono_Posix_Syscall_L_ctermid (void); @@ -1833,10 +2170,12 @@ int Mono_Posix_Syscall_readdir_r (void* dirp, struct Mono_Posix_Syscall__Dirent* gint64 Mono_Posix_Syscall_readlink (const char* path, unsigned char* buf, guint64 bufsiz); gint64 Mono_Posix_Syscall_readlinkat (int dirfd, const char* pathname, unsigned char* buf, guint64 bufsiz); gint64 Mono_Posix_Syscall_readv (int fd, struct Mono_Posix_Iovec* iov, int iovcnt); +gint64 Mono_Posix_Syscall_recv (int socket, void* buffer, guint64 length, int flags); int Mono_Posix_Syscall_remap_file_pages (void* start, guint64 size, int prot, gint64 pgoff, int flags); int Mono_Posix_Syscall_removexattr (const char* path, const char* name); int Mono_Posix_Syscall_rewinddir (void* dir); int Mono_Posix_Syscall_seekdir (void* dir, gint64 offset); +gint64 Mono_Posix_Syscall_send (int socket, void* message, guint64 length, int flags); gint64 Mono_Posix_Syscall_sendfile (int out_fd, int in_fd, gint64* offset, guint64 count); int Mono_Posix_Syscall_setdomainname (const char* name, guint64 len); int Mono_Posix_Syscall_setfsent (void); @@ -1845,9 +2184,13 @@ int Mono_Posix_Syscall_setgroups (guint64 size, unsigned int* list); int Mono_Posix_Syscall_sethostid (gint64 hostid); int Mono_Posix_Syscall_sethostname (const char* name, guint64 len); int Mono_Posix_Syscall_setpwent (void); +int Mono_Posix_Syscall_setsockopt (int socket, int level, int option_name, void* option_value, gint64 option_len); +int Mono_Posix_Syscall_setsockopt_linger (int socket, int level, int option_name, struct Mono_Posix_Linger* option_value); +int Mono_Posix_Syscall_setsockopt_timeval (int socket, int level, int option_name, struct Mono_Posix_Timeval* option_value); int Mono_Posix_Syscall_settimeofday (struct Mono_Posix_Timeval* tv, struct Mono_Posix_Timezone* tz); int Mono_Posix_Syscall_setusershell (void); int Mono_Posix_Syscall_setxattr (const char* path, const char* name, unsigned char* value, guint64 size, int flags); +int Mono_Posix_Syscall_socketpair (int domain, int type, int protocol, int* socket1, int* socket2); int Mono_Posix_Syscall_stat (const char* file_name, struct Mono_Posix_Stat* buf); int Mono_Posix_Syscall_statvfs (const char* path, struct Mono_Posix_Statvfs* buf); int Mono_Posix_Syscall_stime (gint64* t); diff --git a/support/mph.h b/support/mph.h index aedff01b7f3..cb5d94131da 100644 --- a/support/mph.h +++ b/support/mph.h @@ -149,6 +149,13 @@ typedef gint64 suseconds_t; return ret; \ }}G_STMT_END +#define mph_have_uint_overflow(var) ((var) < 0 || (var) > UINT_MAX) + +#define mph_return_val_if_uint_overflow(var, ret) \ + _mph_return_val_if_cb_(var, ret, mph_have_uint_overflow) + +#define mph_return_if_uint_overflow(var) mph_return_val_if_uint_overflow(var, -1) + #define mph_have_long_overflow(var) ((var) > LONG_MAX || (var) < LONG_MIN) #define mph_return_val_if_long_overflow(var, ret) \ @@ -156,14 +163,14 @@ typedef gint64 suseconds_t; #define mph_return_if_long_overflow(var) mph_return_val_if_long_overflow(var, -1) -#define mph_have_ulong_overflow(var) ((var) > ULONG_MAX) +#define mph_have_ulong_overflow(var) (var) < 0 || ((var) > ULONG_MAX) #define mph_return_val_if_ulong_overflow(var, ret) \ _mph_return_val_if_cb_(var, ret, mph_have_ulong_overflow) #define mph_return_if_ulong_overflow(var) mph_return_val_if_ulong_overflow(var, -1) -#define mph_have_size_t_overflow(var) ((var) > MPH_SIZE_T_MAX) +#define mph_have_size_t_overflow(var) ((var) < 0 || (var) > MPH_SIZE_T_MAX) #define mph_return_val_if_size_t_overflow(var, ret) \ _mph_return_val_if_cb_(var, ret, mph_have_size_t_overflow) @@ -185,6 +192,8 @@ typedef gint64 suseconds_t; #define mph_return_if_time_t_overflow(var) mph_return_if_long_overflow(var) +#define mph_return_if_socklen_t_overflow(var) mph_return_if_uint_overflow(var) + #define mph_return_if_val_in_list5(var,a,b,c,d,e) \ do { \ int v = (var); \ diff --git a/support/sys-socket.c b/support/sys-socket.c new file mode 100644 index 00000000000..e6da720f21c --- /dev/null +++ b/support/sys-socket.c @@ -0,0 +1,139 @@ +/* + * <sys/socket.h> wrapper functions. + * + * Authors: + * Steffen Kiess (s-kiess@web.de) + * + * Copyright (C) 2015 Steffen Kiess + */ + +#include <sys/socket.h> +#include <netinet/in.h> +#include <sys/un.h> + +#include <stddef.h> + +#include "map.h" +#include "mph.h" + +G_BEGIN_DECLS + +int +Mono_Posix_Syscall_socketpair (int domain, int type, int protocol, int* socket1, int* socket2) +{ + int filedes[2] = {-1, -1}; + int r; + + r = socketpair (domain, type, protocol, filedes); + + *socket1 = filedes[0]; + *socket2 = filedes[1]; + return r; +} + +int +Mono_Posix_Syscall_getsockopt (int socket, int level, int option_name, void* option_value, gint64* option_len) +{ + socklen_t len; + int r; + + mph_return_if_socklen_t_overflow (*option_len); + + len = *option_len; + + r = getsockopt (socket, level, option_name, option_value, &len); + + *option_len = len; + + return r; +} + +int +Mono_Posix_Syscall_getsockopt_timeval (int socket, int level, int option_name, struct Mono_Posix_Timeval* option_value) +{ + struct timeval tv; + int r; + socklen_t size; + + size = sizeof (struct timeval); + r = getsockopt (socket, level, option_name, &tv, &size); + + if (r != -1 && size == sizeof (struct timeval)) { + if (Mono_Posix_ToTimeval (&tv, option_value) != 0) + return -1; + } else { + memset (option_value, 0, sizeof (struct Mono_Posix_Timeval)); + if (r != -1) + errno = EINVAL; + } + + return r; +} + +int +Mono_Posix_Syscall_getsockopt_linger (int socket, int level, int option_name, struct Mono_Posix_Linger* option_value) +{ + struct linger ling; + int r; + socklen_t size; + + size = sizeof (struct linger); + r = getsockopt (socket, level, option_name, &ling, &size); + + if (r != -1 && size == sizeof (struct linger)) { + if (Mono_Posix_ToLinger (&ling, option_value) != 0) + return -1; + } else { + memset (option_value, 0, sizeof (struct Mono_Posix_Linger)); + if (r != -1) + errno = EINVAL; + } + + return r; +} + +int +Mono_Posix_Syscall_setsockopt (int socket, int level, int option_name, void* option_value, gint64 option_len) +{ + mph_return_if_socklen_t_overflow (option_len); + + return setsockopt (socket, level, option_name, option_value, option_len); +} + +int +Mono_Posix_Syscall_setsockopt_timeval (int socket, int level, int option_name, struct Mono_Posix_Timeval* option_value) +{ + struct timeval tv; + + if (Mono_Posix_FromTimeval (option_value, &tv) != 0) + return -1; + + return setsockopt (socket, level, option_name, &tv, sizeof (struct timeval)); +} + +int +Mono_Posix_Syscall_setsockopt_linger (int socket, int level, int option_name, struct Mono_Posix_Linger* option_value) +{ + struct linger ling; + + if (Mono_Posix_FromLinger (option_value, &ling) != 0) + return -1; + + return setsockopt (socket, level, option_name, &ling, sizeof (struct linger)); +} + +gint64 +Mono_Posix_Syscall_recv (int socket, void* message, guint64 length, int flags) +{ + mph_return_if_size_t_overflow (length); + + return recv (socket, message, length, flags); +} + +gint64 +Mono_Posix_Syscall_send (int socket, void* message, guint64 length, int flags) +{ + mph_return_if_size_t_overflow (length); + + return send (socket, message, length, flags); +} |