Annotation of libaitrpc/inc/aitrpc_pkt.h, revision 1.2.4.1

1.2       misho       1: /*************************************************************************
                      2: * (C) 2015 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
                      3: *  by Michael Pounov <misho@openbsd-bg.org>
                      4: *
                      5: * $Author: misho $
1.2.4.1 ! misho       6: * $Id: aitrpc_pkt.h,v 1.2 2015/07/02 22:28:14 misho Exp $
1.2       misho       7: *
                      8: **************************************************************************
                      9: The ELWIX and AITNET software is distributed under the following
                     10: terms:
                     11: 
                     12: All of the documentation and software included in the ELWIX and AITNET
                     13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
                     14: 
                     15: Copyright 2004 - 2015
                     16:        by Michael Pounov <misho@elwix.org>.  All rights reserved.
                     17: 
                     18: Redistribution and use in source and binary forms, with or without
                     19: modification, are permitted provided that the following conditions
                     20: are met:
                     21: 1. Redistributions of source code must retain the above copyright
                     22:    notice, this list of conditions and the following disclaimer.
                     23: 2. Redistributions in binary form must reproduce the above copyright
                     24:    notice, this list of conditions and the following disclaimer in the
                     25:    documentation and/or other materials provided with the distribution.
                     26: 3. All advertising materials mentioning features or use of this software
                     27:    must display the following acknowledgement:
                     28: This product includes software developed by Michael Pounov <misho@elwix.org>
                     29: ELWIX - Embedded LightWeight unIX and its contributors.
                     30: 4. Neither the name of AITNET nor the names of its contributors
                     31:    may be used to endorse or promote products derived from this software
                     32:    without specific prior written permission.
                     33: 
                     34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
                     35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     37: ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     44: SUCH DAMAGE.
                     45: */
                     46: #ifndef __AITRPC_PKT_H
                     47: #define __AITRPC_PKT_H
                     48: 
                     49: 
                     50: #include <sys/types.h>
                     51: #include <elwix.h>
                     52: 
                     53: 
                     54: #define RPC_VERSION            9
                     55: #define RPC_DEFPORT            2611
                     56: 
                     57: /* Additional ELWIX RPC supporting protocols */
                     58: 
                     59: #ifndef SOCK_STREAM
                     60: #define SOCK_STREAM            1       /* stream socket */
                     61: #endif
                     62: #ifndef SOCK_DGRAM
                     63: #define SOCK_DGRAM             2       /* datagram socket */
                     64: #endif
                     65: #ifndef SOCK_RAW
                     66: #define SOCK_RAW               3       /* raw-protocol interface */
                     67: #endif
                     68: #define SOCK_BPF               4       /* ethernet interface */
                     69: #define SOCK_EXT               5       /* bi-directional pipe interface */
                     70: 
                     71: /* RPC IP protocol number */
                     72: 
                     73: #define IPPROTO_ERPC           162
                     74: 
                     75: /* RPC call request flags */
                     76: 
                     77: #define RPC_REPLY              0x0
                     78: #define RPC_NOREPLY            0x1
                     79: 
                     80: /* RPC call I/O direction */
                     81: 
                     82: #define RPC_REQ                        0x0
                     83: #define RPC_ACK                        0x1
                     84: 
                     85: /* RPC builtin registed calls */
                     86: 
                     87: #define CALL_TAG_MAX           65535
                     88: 
                     89: #define CALL_SRVPING           65534
                     90: 
                     91: #define CALL_SRVSHUTDOWN       65533
                     92: #define CALL_SRVCLIENTS                65532
                     93: #define CALL_SRVCALLS          65531
                     94: #define CALL_SRVSESSIONS       65530
                     95: 
                     96: #define CALL_BLOBSHUTDOWN      65529
                     97: #define CALL_BLOBCLIENTS       65528
                     98: #define CALL_BLOBVARS          65527
                     99: 
                    100: /* RPC signals */
                    101: 
                    102: #define SIGFBLOB               54
                    103: 
                    104: 
                    105: /* RPC session identification */
                    106: 
                    107: typedef struct {
                    108: #if BYTE_ORDER == LITTLE_ENDIAN
                    109:        uint16_t        sess_instance:8;
                    110:        uint16_t        sess_version:8;
                    111: #endif
                    112: #if BYTE_ORDER == BIG_ENDIAN
                    113:        uint16_t        sess_version:8;
                    114:        uint16_t        sess_instance:8;
                    115: #endif
1.2.4.1 ! misho     116: } __attribute__((packed)) rpc_sess_t;  /* size == 2 bytes */
1.2       misho     117: 
                    118: /* Network RPC packet - Header */
                    119: 
                    120: struct tagRPCCall {
                    121:        rpc_sess_t      call_session;
                    122: 
                    123:        uint32_t        call_len;
                    124:        uint32_t        call_seq;
                    125:        uint16_t        call_crc;
                    126: 
                    127:        union {
                    128:                struct {
                    129:                        uint64_t        flags;
                    130:                }       call_req;
                    131:                struct {
                    132:                        int32_t         ret;
                    133:                        int32_t         eno;
                    134:                }       call_rep;
                    135:        };
                    136: 
                    137:        uint8_t         call_io;
                    138:        uint16_t        call_tag;
                    139:        uint8_t         call_argc;
                    140:        ait_val_t       call_argv[0];
                    141: } __packed;                    /* size == 20 bytes */
                    142: #define RPC_CHK_NOREPLY(x)     (ntohl((u_long) (x)->call_req.flags) & RPC_NOREPLY)
                    143: #define RPC_SET_ERRNO(x, _v)   ((x)->call_rep.eno = (int32_t) htonl((_v)))
                    144: #define RPC_SET_RETURN(x, _v)  ((x)->call_rep.ret = (int32_t) htonl((_v)))
                    145: 
                    146: /* Network BLOB packet - Header */
                    147: 
                    148: struct tagBLOBHdr {
                    149:        rpc_sess_t      hdr_session;
                    150:        uint8_t         hdr_cmd;
                    151:        uint32_t        hdr_var;
                    152:        uint32_t        hdr_len;
                    153:        uint32_t        hdr_ret;
                    154:        uint8_t         hdr_pad;
1.2.4.1 ! misho     155: } __attribute__((packed));                     /* size == 16 bytes */
1.2       misho     156: #define RPC_SET_BLOB_RET(x, _v)        ((x)->hdr_ret = (uint32_t) htonl((_v)))
                    157: 
                    158: /* RPC BLOB types */
                    159: 
                    160: typedef enum {
                    161:        ok, error, no,                          /* for blob reply */
                    162:        get, set, unset                         /* for blob request */
                    163: } blob_cmd_type_t;
                    164: 
                    165: 
                    166: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>