Ignore:
Timestamp:
May 19, 2003, 4:41:00 AM (22 years ago)
Author:
bird
Message:

#434: Initial tcpip header merges.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/emx/include/sys/socket.h

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.2
    r182 r183  
    11/* Modified for emx by hv and em 1994-1997
     2 * Modified for gcc/os2 by bird 2003
    23 *
    34 * Copyright (c) 1982,1985,1986,1988 Regents of the University of California.
     
    3940#define _SYS_SOCKET_H_
    4041
    41 #if !defined (_SYS_TYPES_H)
    42 #warning <sys/socket.h> requires <sys/types.h>
     42#include <machine/ansi.h>
     43#define _NO_NAMESPACE_POLLUTION
     44#include <machine/param.h>
     45#undef _NO_NAMESPACE_POLLUTION
     46
     47
     48/* toolkit stuff */
    4349#include <sys/types.h>
    44 #endif
    45 
    4650#include <sys/uio.h>
     51#include <sys/cdefs.h>
    4752
    4853#if defined (__cplusplus)
     
    8287#define SO_RCV_SHUTDOWN 0x0400          /* set if shut down called for rcv */
    8388#define SO_SND_SHUTDOWN 0x0800          /* set if shutdown called for send */
     89#ifndef TCPV40HDRS
     90#define SO_REUSEPORT    0x1000          /* allow local address & port reuse */
     91#define SO_TTCP         0x2000          /* allow t/tcp on socket */
     92#endif
    8493
    8594/*
     
    9099#define SO_SNDLOWAT     0x1003          /* send low-water mark */
    91100#define SO_RCVLOWAT     0x1004          /* receive low-water mark */
     101#ifndef TCPV40HDRS
    92102#define SO_SNDTIMEO     0x1005          /* send timeout */
    93103#define SO_RCVTIMEO     0x1006          /* receive timeout */
     104#endif
    94105#define SO_ERROR        0x1007          /* get error status and clear */
    95106#define SO_TYPE         0x1008          /* get socket type */
     
    119130#define AF_UNSPEC       0               /* unspecified */
    120131#define AF_UNIX         1               /* local to host (pipes, portals) */
     132#ifndef TCPV40HDRS
     133#define AF_LOCAL        AF_UNIX
     134#endif
     135#define AF_OS2          AF_UNIX
    121136#define AF_INET         2               /* internetwork: UDP, TCP, etc. */
    122137#define AF_IMPLINK      3               /* arpanet imp addresses */
     
    124139#define AF_CHAOS        5               /* mit CHAOS protocols */
    125140#define AF_NS           6               /* XEROX NS protocols */
     141#ifdef TCPV40HDRS
    126142#define AF_NBS          7               /* IBM: nbs protocols */
    127143                                        /* (hv: I think IBM is outdated here */
     144#endif
    128145#define AF_ISO          7               /* ISO protocols */
    129146#define AF_OSI          AF_ISO
     
    140157#define AF_NETBIOS      AF_NB
    141158
    142 #define AF_OS2          AF_UNIX
    143 
     159#ifdef TCPV40HDRS
    144160#define AF_MAX          18
     161#else
     162#define AF_LINK         18              /* Link layer interface */
     163#define pseudo_AF_XTP   19              /* eXpress Transfer Protocol (no AF) */
     164#define AF_COIP         20              /* connection-oriented IP, aka ST II */
     165#define AF_CNT          21              /* Computer Network Technology */
     166#define pseudo_AF_RTIP  22              /* Help Identify RTIP packets */
     167#define AF_IPX          23              /* Novell Internet Protocol */
     168#define AF_SIP          24              /* Simple Internet Protocol */
     169#define AF_INET6        24
     170#define pseudo_AF_PIP   25              /* Help Identify PIP packets */
     171#define AF_ROUTE        39              /* Internal Routing Protocol */
     172#define AF_FWIP         40              /* firewall support */
     173#define AF_IPSEC        41              /* IPSEC and encryption techniques */
     174#define AF_DES          42              /* DES */
     175#define AF_MD5          43
     176#define AF_CDMF         44
     177
     178#define AF_MAX          45
     179#endif
     180
    145181
    146182/*
     
    150186 */
    151187struct sockaddr {
     188#ifdef TCPV40HDRS
    152189        u_short sa_family;              /* address family */
    153190        char    sa_data[14];            /* up to 14 bytes of direct address */
     191#else
     192        u_char  sa_len;                 /* total length */
     193        u_char  sa_family;              /* address family */
     194        char    sa_data[14];            /* actually longer; address value */
     195#endif
    154196};
    155197
     
    168210#define PF_UNSPEC       AF_UNSPEC
    169211#define PF_UNIX         AF_UNIX
     212#ifndef TCPV40HDRS
     213#define PF_LOCAL        AF_LOCAL
     214#endif
     215#define PF_OS2          AF_UNIX
    170216#define PF_INET         AF_INET
    171217#define PF_IMPLINK      AF_IMPLINK
     
    173219#define PF_CHAOS        AF_CHAOS
    174220#define PF_NS           AF_NS
     221#ifdef TCPV40HDRS
    175222#define PF_NBS          AF_NBS
     223#endif
    176224#define PF_ISO          AF_ISO
    177 #define PF_OSI          AF_ISO
     225#define PF_OSI          AF_OSI
    178226#define PF_ECMA         AF_ECMA
    179227#define PF_DATAKIT      AF_DATAKIT
     
    185233#define PF_HYLINK       AF_HYLINK
    186234#define PF_APPLETALK    AF_APPLETALK
     235#define PF_NETBIOS      AF_NB
    187236#define PF_NB           AF_NB
    188 #define PF_NETBIOS      AF_NB
    189 #define PF_OS2          AF_UNIX
     237#ifndef TCPV40HDRS
     238#define PF_ROUTE        AF_ROUTE
     239#define PF_LINK         AF_LINK
     240#define PF_XTP          pseudo_AF_XTP   /* really just proto family, no AF */
     241#define PF_COIP         AF_COIP
     242#define PF_CNT          AF_CNT
     243#define PF_SIP          AF_SIP
     244#define PF_INET6        AF_INET6
     245#define PF_IPX          AF_IPX          /* same format as AF_NS */
     246#define PF_RTIP         pseudo_AF_FTIP  /* same format as AF_INET */
     247#define PF_PIP          pseudo_AF_PIP
     248#endif /* !TCPV40HDRS */
     249
    190250#define PF_MAX          AF_MAX
    191251
     252
     253#ifndef TCPV40HDRS
     254/*
     255 * Definitions for network related sysctl, CTL_NET.
     256 *
     257 * Second level is protocol family.
     258 * Third level is protocol number.
     259 *
     260 * Further levels are defined by the individual families below.
     261 */
     262#define NET_MAXID       AF_MAX
     263
     264#define CTL_NET_NAMES { \
     265        { 0, 0 }, \
     266        { "local", CTLTYPE_NODE }, \
     267        { "inet", CTLTYPE_NODE }, \
     268        { "implink", CTLTYPE_NODE }, \
     269        { "pup", CTLTYPE_NODE }, \
     270        { "chaos", CTLTYPE_NODE }, \
     271        { "xerox_ns", CTLTYPE_NODE }, \
     272        { "iso", CTLTYPE_NODE }, \
     273        { "emca", CTLTYPE_NODE }, \
     274        { "datakit", CTLTYPE_NODE }, \
     275        { "ccitt", CTLTYPE_NODE }, \
     276        { "ibm_sna", CTLTYPE_NODE }, \
     277        { "decnet", CTLTYPE_NODE }, \
     278        { "dec_dli", CTLTYPE_NODE }, \
     279        { "lat", CTLTYPE_NODE }, \
     280        { "hylink", CTLTYPE_NODE }, \
     281        { "appletalk", CTLTYPE_NODE }, \
     282        { "netbios", CTLTYPE_NODE }, \
     283        { "route", CTLTYPE_NODE }, \
     284        { "link_layer", CTLTYPE_NODE }, \
     285        { "xtp", CTLTYPE_NODE }, \
     286        { "coip", CTLTYPE_NODE }, \
     287        { "cnt", CTLTYPE_NODE }, \
     288        { "rtip", CTLTYPE_NODE }, \
     289        { "ipx", CTLTYPE_NODE }, \
     290        { "sip", CTLTYPE_NODE }, \
     291        { "pip", CTLTYPE_NODE }, \
     292}
     293
     294/*
     295 * PF_ROUTE - Routing table
     296 *
     297 * Three additional levels are defined:
     298 *      Fourth: address family, 0 is wildcard
     299 *      Fifth: type of info, defined below
     300 *      Sixth: flag(s) to mask with for NET_RT_FLAGS
     301 */
     302#define NET_RT_DUMP     1               /* dump; may limit to a.f. */
     303#define NET_RT_FLAGS    2               /* by flags, e.g. RESOLVING */
     304#define NET_RT_IFLIST   3               /* survey interface list */
     305#define NET_RT_MAXID    4
     306
     307#define CTL_NET_RT_NAMES { \
     308        { 0, 0 }, \
     309        { "dump", CTLTYPE_STRUCT }, \
     310        { "flags", CTLTYPE_STRUCT }, \
     311        { "iflist", CTLTYPE_STRUCT }, \
     312}
     313
     314#endif /* !TCPV40HDRS */
     315
     316
    192317/*
    193318 * Maximum queue length specifiable by listen.
    194319 */
     320#ifdef TCPV40HDRS
    195321#define SOMAXCONN       5
     322#else
     323#define SOMAXCONN       1024
     324#endif
    196325
    197326/*
     
    201330struct msghdr {
    202331        caddr_t msg_name;               /* optional address */
     332#ifdef TCPV40HDRS
    203333        int     msg_namelen;            /* size of address */
    204334        struct  iovec *msg_iov;         /* scatter/gather array */
     
    206336        caddr_t msg_accrights;          /* access rights sent/received */
    207337        int     msg_accrightslen;
     338#else
     339        u_int   msg_namelen;            /* size of address */
     340        struct  iovec *msg_iov;         /* scatter/gather array */
     341        u_int   msg_iovlen;             /* # elements in msg_iov */
     342        caddr_t msg_control;            /* ancillary data, see below */
     343        u_int   msg_controllen;         /* ancillary data buffer len */
     344        long    msg_flags;              /* flags on received message */
     345#endif
    208346};
    209347
     
    211349#define MSG_PEEK        0x2             /* peek at incoming message */
    212350#define MSG_DONTROUTE   0x4             /* send without using routing tables */
    213 #define MSG_EOR         0x8             /* data completes record */
    214 #define MSG_TRUNC       0x10            /* data discarded before delivery */
    215 #define MSG_CTRUNC      0x20            /* control data lost before delivery */
    216 #define MSG_WAITALL     0x40            /* wait for full request or error */
    217 
     351#define MSG_FULLREAD    0x8             /* send without using routing tables */
     352#ifndef TCPV40HDRS
     353#define MSG_EOR         0x10            /* data completes record */
     354#define MSG_TRUNC       0x20            /* data discarded before delivery */
     355#define MSG_CTRUNC      0x40            /* control data lost before delivery */
     356#define MSG_WAITALL     0x80            /* wait for full request or error */
     357#define MSG_DONTWAIT    0x100           /* this message should be nonblocking */
     358#ifdef TTCP
     359#define MSG_EOF         0x200
     360#endif
     361#define MSG_MAPIO       0x400           /* mem mapped io */
     362#define MSG_CLOSE       0x800           /* close connection after succesful send_file */
     363#endif
     364
     365#ifdef TCPV40HDRS
    218366#define MSG_MAXIOVLEN   16
     367#endif
    219368
    220369/*
     
    246395#define SCM_RIGHTS      0x01            /* access rights (array of int) */
    247396
    248 extern  int     accept (int, struct sockaddr *, int *);
    249 extern  int     bind (int, __const__ struct sockaddr *, int);
    250 extern  int     connect (int, __const__ struct sockaddr *, int);
    251 extern  int     gethostid (void);
    252 extern  int     getpeername (int, struct sockaddr *, int *);
    253 extern  int     getsockname (int, struct sockaddr *, int *);
    254 extern  int     getsockopt (int, int, int, void *, int *);
    255 extern  int     listen (int, int);
    256 extern  int     recv (int, void *, int, int);
    257 extern  int     recvfrom (int, void *, int, int, struct sockaddr *, int *);
    258 extern  int     recvmsg (int, struct msghdr *, int);
    259 extern  int     send (int, __const__ void *, int, int);
    260 extern  int     sendto (int, __const__ void *, int, int, __const__ struct sockaddr *, int);
    261 extern  int     sendmsg (int, __const__ struct msghdr *, int);
    262 extern  int     setsockopt (int, int, int, __const__ void *, int);
    263 extern  int     shutdown (int, int);
    264 extern  int     socket (int, int, int);
    265 extern  int     socketpair (int, int, int, int *);
    266 
    267 extern  int     _impsockhandle (int, int);
    268 
    269 /* special IBM prototypes
    270  * hv: warning: usage of these routines may interfere with EMX operation
    271  * usage is not recommended.
    272  */
    273 extern  void    psock_errno(__const__ char*);
    274 extern  int     soabort(int);
    275 extern  int     soclose(int);
    276 extern  int     sock_init(void);
    277 extern  int     sock_errno(void);
    278 extern  int     so_cancel(int);
    279 extern  int     getinetversion(char*);
    280 
    281 /* hv: these are new TCPIPV4 data structures. Consult IBM doc on that */
    282 #ifdef TCPIPV4
     397#ifndef TCPV40HDRS
     398/*
     399 * 4.3 compat sockaddr, move to compat file later
     400 */
     401struct osockaddr {
     402        u_short sa_family;              /* address family */
     403        char    sa_data[14];            /* up to 14 bytes of direct address */
     404};
     405
     406/*
     407 * 4.3-compat message header (move to compat file later).
     408 */
     409struct omsghdr {
     410        caddr_t msg_name;               /* optional address */
     411        int     msg_namelen;            /* size of address */
     412        struct  iovec *msg_iov;         /* scatter/gather array */
     413        int     msg_iovlen;             /* # elements in msg_iov */
     414        caddr_t msg_accrights;          /* access rights sent/received */
     415        int     msg_accrightslen;
     416};
     417
     418/*
     419 * send_file parameter structure
     420 */
     421struct sf_parms {
     422        void   *header_data;      /* ptr to header data */
     423        size_t header_length;     /* size of header data */
     424        int    file_handle;       /* file handle to send from */
     425        size_t file_size;         /* size of file */
     426        int    file_offset;       /* byte offset in file to send from */
     427        size_t file_bytes;        /* bytes of file to be sent */
     428        void   *trailer_data;     /* ptr to trailer data */
     429        size_t trailer_length;    /* size of trailer data */
     430        size_t bytes_sent;        /* bytes sent in this send_file call */
     431};
     432#endif
     433
     434int     _System accept (int, struct sockaddr *, int *);
     435int     _System bind (int, __const__ struct sockaddr *, int);
     436int     _System connect (int, __const__ struct sockaddr *, int);
     437int     _System gethostid (void);
     438int     _System getpeername (int, struct sockaddr *, int *);
     439int     _System getsockname (int, struct sockaddr *, int *);
     440int     _System getsockopt (int, int, int, void *, int *);
     441int     _System listen (int, int);
     442int     _System recv (int, void *, int, int);
     443int     _System recvfrom (int, void *, int, int, struct sockaddr *, int *);
     444int     _System recvmsg (int, struct msghdr *, int);
     445int     _System send (int, __const__ void *, int, int);
     446int     _System sendto (int, __const__ void *, int, int, __const__ struct sockaddr *, int);
     447int     _System sendmsg (int, __const__ struct msghdr *, int);
     448int     _System setsockopt (int, int, int, __const__ void *, int);
     449int     _System shutdown (int, int);
     450int     _System socket (int, int, int);
     451int     _System socketpair (int, int, int, int *);
     452
     453/* EMX addition */
     454int    _impsockhandle (int, int);
     455
     456#ifndef TCPV40HDRS
     457int     _System accept_and_recv (long, long*, struct sockaddr *, long*, struct sockaddr*, long*, caddr_t, size_t);
     458#endif
     459
     460/* OS/2 additions */
     461void    _System addsockettolist(int);
     462int     _System removesocketfromlist(int);
     463#include <sys/ioccom.h>
     464#ifdef TCPV40HDRS
     465#include <sys/select.h>
     466#endif
     467int     _System sock_init( void );
     468int     _System sock_errno( void );
     469void    _System psock_errno( char * );
     470int     _System soclose( int );
     471int     _System so_cancel(int);
     472int     _System Raccept(int, struct sockaddr *, int *);
     473#ifdef TCPV40HDRS
     474struct sockaddr_in;
     475int     _System Rbind(int, struct sockaddr_in *, int, struct sockaddr_in *);
     476#else
     477int     _System Rbind(int, struct sockaddr *, int, struct sockaddr *);
     478#endif
     479int     _System Rconnect(int, const struct sockaddr *, int);
     480int     _System Rgetsockname(int, struct sockaddr *, int *);
     481int     _System Rlisten(int, int);
     482#ifndef TCPV40HDRS
     483ssize_t _System send_file(int *, struct sf_parms *, int );
     484char *  _System sock_strerror(int);
     485int     _System getinetversion(char *);
     486#endif
     487
     488
     489/* more OS/2 stuff. */
     490#ifndef MAXSOCKETS
     491#define MAXSOCKETS      2048
     492#endif
     493
    283494#define MT_FREE         0
    284495#define MT_DATA         1
     
    305516};
    306517
    307 #define MAXSOCKETS      2048
    308518
    309519struct sostats {
    310520        short count;
    311         short socketdata[9*MAXSOCKETS];
    312 };
    313 #endif
     521#ifdef TCPV40HDRS
     522        short socketdata[9*MAXSOCKETS];
     523#else
     524        short socketdata[13*MAXSOCKETS];
     525#endif
     526};
    314527
    315528#if defined (__cplusplus)
Note: See TracChangeset for help on using the changeset viewer.