home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / os2 / anonymou / rcb / rcb.h next >
Encoding:
C/C++ Source or Header  |  1992-07-09  |  12.4 KB  |  336 lines

  1.  
  2. /****************************************************************************
  3.  ****************************************************************************
  4.  
  5. $Abstract: 
  6.    Request Control  Block  structure  definition  used  to  convey BSD 4.3
  7.    socket  request/reply  between drivers  and  library/user.
  8. $
  9.    The RCB can be  logically defined  as two different  sub structures the 
  10.    Non IO operation RCB and the IO operation RCB. 
  11.  
  12.    DOS Host Resident Internet Protocols Request Control Block (RCB) Format
  13.              (For Non-IO Operations)
  14.  
  15.             +=======================+===================+
  16.             | 0    |                |                   |
  17.             | 1    | RCB_next       | Used for link mgt.|
  18.             | 2    |                |                   |
  19.             | 3    |                |                   |
  20.             |-----------------------|-------------------|
  21.             | 4    |                |                   |
  22.             | 5    | RCB_prev       | Used for link mgt.|
  23.             | 6    |                |                   |
  24.             | 7    |                |                   |
  25.             |-----------------------|-------------------|
  26.             | 8    |                |                   |
  27.             | 9    | RCB_ESR        | Post address      |
  28.             |10    |                |                   |
  29.             |11    |                |                   |
  30.             |-----------------------|-------------------|
  31.             |12    |                |                   |
  32.             |13    |                |                   |
  33.             |14    |                |                   |
  34.             |15    | RCB_reserved   |  For internal use |
  35.             |16    |                |                   |
  36.             |17    |                |                   |
  37.             |18    |                |                   |
  38.             |19    |                |                   |
  39.             |-----------------------|-------------------|
  40.             |20    | RCB_type       | BSD 4.3..         |
  41.             |-----------------------|-------------------|
  42.             |21    | RCB_command    | Command code      |
  43.             |-----------------------|-------------------|
  44.             |22    | RCB_socket     | Socket ID         |
  45.             |-----------------------|-------------------|
  46.             |23    | RCB_status     | Status & Ret code |
  47.             |-----------------------|-------------------|
  48.             |24    | RCB_param      | Length determined | Refer to particular 
  49.             |      | (Variable)     | by RCB_command    | command.  
  50.             +-----------------------+-------------------+
  51.              xx 
  52.  
  53.  
  54.    DOS Host Resident Internet Protocols Request Control Block (RCB) Format
  55.    
  56.             (For Data-IO Operations)
  57.  
  58.             +=======================+===================+
  59.             | 0    |                |                   |
  60.             | 1    | RCB_next       | Used for link mgt.|
  61.             | 2    |                |                   |
  62.             | 3    |                |                   |
  63.             |-----------------------|-------------------|
  64.             | 4    |                |                   |
  65.             | 5    | RCB_prev       | Used for link mgt.|
  66.             | 6    |                |                   |
  67.             | 7    |                |                   |
  68.             |-----------------------|-------------------|
  69.             | 8    |                |                   |
  70.             | 9    | RCB_ESR        | Post address      |
  71.             |10    |                |                   |
  72.             |11    |                |                   |
  73.             |-----------------------|-------------------|
  74.             |12    |                |                   |
  75.             |13    |                |                   |
  76.             |14    |                |                   |
  77.             |15    | RCB_reserved   |  For internal use |
  78.             |16    |                |                   |
  79.             |17    |                |                   |
  80.             |18    |                |                   |
  81.             |19    |                |                   |
  82.             |-----------------------|-------------------|
  83.             |20    | RCB_type       | BSD 4.3..         |
  84.             |-----------------------|-------------------|
  85.             |21    | RCB_command    | Command code      |
  86.             |-----------------------|-------------------|
  87.             |22    | RCB_socket     | Socket ID         |
  88.             |-----------------------|-------------------|
  89.             |23    | RCB_status     | Status & Ret code |
  90.             |-----------------------|-------------------|
  91.             |24    | RCB_flags      | Flag Indicators   | 
  92.             |25    |                | MSG_OOB/MSG_PEEK  |
  93.             |-----------------------|-------------------|
  94.             |26    | RCB_port       | Port ID. Ignored  |
  95.             |27    |                | for SEND/RECV     |
  96.             |-----------------------|-------------------|
  97.             |28    |                |                   |
  98.             |29    | RCB_ip_addr    | IP Addr. Ignored  |  
  99.             |30    |                | for SEND/RECV     |
  100.             |31    |                |                   |
  101.             |-----------------------|-------------------|
  102.             |32    | totallen       | Total length of   |
  103.             |33    |                | all fragments.    |
  104.             |-----------------------|-------------------|
  105.             |34    | RCB_frag_cnt   | Fragment Count    |
  106.             |35    |                |                   |
  107.             |-----------------------|-------------------|
  108.             |36    | RCB_frag [0]   | Fragment 0        |
  109.             |-----------------------|-------------------|
  110.             |42    | RCB_frag [1]   | Fragment 1        |
  111.             |-----------------------|-------------------|
  112.             |48    | RCB_frag [2]   | Fragment 2        |
  113.             |-----------------------|-------------------|
  114.             |54    | RCB_frag [3]   | Fragment 3        |
  115.             |-----------------------|-------------------|
  116.             |60    | RCB_frag [4]   | Fragment 4        |
  117.             |-----------------------|-------------------|
  118.             |66    | RCB_frag [5]   | Fragment 5        |
  119.             |-----------------------|-------------------|
  120.             |72    | RCB_frag [6]   | Fragment 6        |
  121.             |-----------------------|-------------------|
  122.             |78    | RCB_frag [7]   | Fragment 7        |
  123.             +=======================+===================+
  124.              84
  125.  ****************************************************************************
  126.  ****************************************************************************/
  127.  
  128. #ifndef  _RCB
  129.  
  130. #define _RCB
  131.  
  132. #define MAXSG        8         /* Max number of scatter/gather */
  133. #define MAXTOTALLEN 65535   /* Max Total length of data per io */
  134.  
  135. typedef    unsigned char    u8bit;
  136. typedef    unsigned short   u16bit;
  137. typedef    unsigned long    u32bit;
  138.  
  139.   /* RCB defines the static part of both Non IO and IO RCBs    */
  140.  
  141. typedef    struct RCB_static {
  142.     u32bit         RCB_next;           /* RCB management       */
  143.     u32bit         RCB_prev;           /* RCB management       */
  144.     u32bit         RCB_ESR;            /* post address         */
  145.     u8bit          RCB_reserved [8];   /* workspace            */
  146.     u8bit          RCB_type;           /* for RCB de-muxing    */
  147.     u8bit          RCB_command;        /* command code         */
  148.     u8bit          RCB_socket;         /* socket               */
  149.     u8bit          RCB_status;         /* status & return code */
  150. };
  151.  
  152.   /* frag describes the fragments                              */
  153.  
  154. struct    frag {  
  155.     u32bit    fragptr;             /* pointer to the data      */
  156.     u16bit    fraglen;             /* length                   */
  157. };
  158.  
  159.   /* RCB_io defines the scatter gather arrray for IO RCBs      */
  160. typedef    struct    RCB_io {
  161.     u16bit          totallen;
  162.     u16bit          RCB_fragcnt;   /* number of fragments      */
  163.     struct  frag    RCB_frag [8];  /* the fragments. Max = 8   */
  164. };
  165.  
  166. /***************************************************************/
  167.  
  168. /* values for RCB_type */
  169.  
  170. #define    RCB_BSD43    1            /* BSD 4.3 Internet       */
  171.  
  172.  
  173. /* Values for RCB_command */
  174. /* Non-IO Operations      */
  175.  
  176. #define    ACCEPT          1
  177. #define    BIND            2
  178. #define    CLOSE           3
  179. #define    CONNECT         4
  180. #define    GETMYIPADDR     5
  181. #define    GETMYMACADDR    6
  182. #define    GETPEERNAME     7
  183. #define    GETSOCKNAME     8 
  184. #define    GETSOCKOPT      9 
  185. #define    GETSUBNETMASK   10
  186. #define    IOCTL           11
  187. #define    LISTEN          12
  188. #define    SELECT          13
  189. #define    SETMYIPADDR     14
  190. #define    SETSOCKOPT      15
  191. #define    SHUTDOWN        16
  192. #define    SOCKET          17
  193.  
  194. /* Data-IO Operations     */
  195.  
  196. #define    RECV            18
  197. #define    RECVFROM        19
  198. #define    SEND            20
  199. #define    SENDTO          21
  200.  
  201. /***************************************************************/
  202.  
  203.  
  204. /* Sockaddr structure has the IPADDR and the PORT              */
  205.  
  206. struct    RCB_sockaddr {
  207.     u16bit    port;                  /* UDP/TCP port           */
  208.     u32bit    ip_addr;               /* IP address             */
  209. };
  210.  
  211.  
  212. /* Define various rcb structures for the socket commands.      */
  213.  
  214. /***************************************************************/
  215. /**           RCB structures for NON IO operations            **/
  216. /***************************************************************/
  217.  
  218. typedef struct  rcb_accept {
  219.     struct    RCB_static      rcb;
  220.     struct    RCB_sockaddr    addr;
  221. } rcb_accept;
  222.  
  223. typedef struct  rcb_bind {
  224.     struct    RCB_static      rcb;
  225.     struct    RCB_sockaddr    addr;
  226. } rcb_bind;
  227.  
  228. typedef struct  rcb_close {
  229.     struct    RCB_static      rcb;
  230. } rcb_close;
  231.  
  232. typedef struct  rcb_connect {
  233.     struct    RCB_static      rcb;
  234.     struct    RCB_sockaddr    addr;
  235. } rcb_connect;
  236.  
  237. typedef struct  rcb_getmyipaddr {
  238.     struct    RCB_static      rcb;
  239.     struct    RCB_sockaddr    addr;
  240. } rcb_getmyipaddr;
  241.  
  242. typedef struct  rcb_getmymacaddr {
  243.     struct    RCB_static      rcb;
  244.     u8bit                     rcb_macaddr[6];
  245. } rcb_getmymacaddr;
  246.  
  247. typedef struct  rcb_getpeername {
  248.     struct    RCB_static      rcb;
  249.     struct    RCB_sockaddr    addr;
  250. } rcb_getpeername;
  251.  
  252. typedef struct  rcb_getsockname {
  253.     struct    RCB_static      rcb;
  254.     struct    RCB_sockaddr    addr;
  255. } rcb_getsockname;
  256.  
  257. typedef struct  rcb_getsockopt {
  258.     struct    RCB_static      rcb;
  259.     u16bit                    optname;
  260.     u16bit                    optval; 
  261.     u16bit                    linger;
  262. } rcb_getsockopt;
  263.  
  264. typedef struct  rcb_ioctl {
  265.     struct    RCB_static      rcb;
  266.     u32bit                    arg;
  267.     u16bit                    ioctl;
  268. } rcb_ioctl;
  269.  
  270. typedef struct  rcb_listen {
  271.     struct    RCB_static      rcb;
  272.     u16bit                    backlog;        
  273. } rcb_listen;
  274.  
  275. typedef struct  rcb_select {
  276.     struct    RCB_static      rcb;
  277.     u16bit                    socket_count;
  278.     fd_set                    readfds;
  279.     fd_set                    writefds;
  280.     fd_set                    exceptfds;
  281.     unsigned  long            ticks;
  282. } rcb_select;
  283.  
  284. typedef struct  rcb_setsockopt {
  285.     struct    RCB_static      rcb;
  286.     u16bit                    optname;
  287.     u16bit                    optval; 
  288.     u16bit                    linger;
  289. } rcb_setsockopt;
  290.  
  291. typedef struct  rcb_shutdown {
  292.     struct    RCB_static      rcb;
  293.     u16bit                    how;
  294. } rcb_shutdown;
  295.  
  296. typedef struct  rcb_socket {
  297.     struct    RCB_static      rcb;
  298.     u16bit                    protocol;
  299. } rcb_socket;
  300.  
  301.  
  302. /***************************************************************/
  303. /**            RCB structures for IO operations               **/
  304. /***************************************************************/
  305.  
  306. typedef struct  rcb_recv {
  307.     struct    RCB_static      rcb;
  308.     u16bit                    flags;
  309.     struct    RCB_sockaddr    from;
  310.     struct    RCB_io          recv_io;
  311. } rcb_recv;
  312.  
  313. typedef struct  rcb_recvfrom {
  314.     struct    RCB_static      rcb;
  315.     u16bit                    flags;
  316.     struct    RCB_sockaddr    from;
  317.     struct    RCB_io          recvfrom_io;
  318. } rcb_recvfrom;
  319.  
  320. typedef struct  rcb_send {
  321.     struct    RCB_static      rcb;
  322.     u16bit                    flags;
  323.     struct    RCB_sockaddr    to;
  324.     struct    RCB_io          send_io;
  325. } rcb_send;
  326.  
  327. typedef struct  rcb_sendto {
  328.     struct    RCB_static      rcb;
  329.     u16bit                    flags;
  330.     struct    RCB_sockaddr    to;
  331.     struct    RCB_io          sendto_io;
  332. } rcb_sendto;
  333.  
  334. #endif
  335.  
  336.