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

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.4     ! misho       6: * $Id: aitrpc_pkt.h,v 1.3.4.2 2024/02/26 11:00:37 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: 
1.4     ! misho      15: Copyright 2004 - 2024
1.2       misho      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: 
1.4     ! misho      82: #define RPC_REQ                        0x1
        !            83: #define RPC_ACK                        0x2
        !            84: #define RPC_IPC                        0x4
1.2       misho      85: 
                     86: /* RPC builtin registed calls */
                     87: 
                     88: #define CALL_TAG_MAX           65535
                     89: 
                     90: #define CALL_SRVPING           65534
                     91: 
                     92: #define CALL_SRVSHUTDOWN       65533
                     93: #define CALL_SRVCLIENTS                65532
                     94: #define CALL_SRVCALLS          65531
                     95: #define CALL_SRVSESSIONS       65530
                     96: 
                     97: #define CALL_BLOBSHUTDOWN      65529
                     98: #define CALL_BLOBCLIENTS       65528
                     99: #define CALL_BLOBVARS          65527
                    100: 
                    101: /* RPC signals */
                    102: 
                    103: #define SIGFBLOB               54
                    104: 
                    105: 
                    106: /* RPC session identification */
                    107: 
                    108: typedef struct {
                    109: #if BYTE_ORDER == LITTLE_ENDIAN
                    110:        uint16_t        sess_instance:8;
                    111:        uint16_t        sess_version:8;
                    112: #endif
                    113: #if BYTE_ORDER == BIG_ENDIAN
                    114:        uint16_t        sess_version:8;
                    115:        uint16_t        sess_instance:8;
                    116: #endif
1.3       misho     117: } __attribute__((packed)) rpc_sess_t;  /* size == 2 bytes */
1.2       misho     118: 
                    119: /* Network RPC packet - Header */
                    120: 
                    121: struct tagRPCCall {
                    122:        rpc_sess_t      call_session;
                    123: 
                    124:        uint32_t        call_len;
                    125:        uint32_t        call_seq;
                    126:        uint16_t        call_crc;
                    127: 
                    128:        union {
                    129:                struct {
                    130:                        uint64_t        flags;
                    131:                }       call_req;
                    132:                struct {
                    133:                        int32_t         ret;
                    134:                        int32_t         eno;
                    135:                }       call_rep;
                    136:        };
                    137: 
                    138:        uint8_t         call_io;
                    139:        uint16_t        call_tag;
                    140:        uint8_t         call_argc;
                    141:        ait_val_t       call_argv[0];
1.4     ! misho     142: } __attribute__((packed));     /* size == 20 bytes */
1.2       misho     143: #define RPC_CHK_NOREPLY(x)     (ntohl((u_long) (x)->call_req.flags) & RPC_NOREPLY)
                    144: #define RPC_SET_ERRNO(x, _v)   ((x)->call_rep.eno = (int32_t) htonl((_v)))
                    145: #define RPC_SET_RETURN(x, _v)  ((x)->call_rep.ret = (int32_t) htonl((_v)))
                    146: 
                    147: /* Network BLOB packet - Header */
                    148: 
                    149: struct tagBLOBHdr {
                    150:        rpc_sess_t      hdr_session;
                    151:        uint8_t         hdr_cmd;
                    152:        uint32_t        hdr_var;
                    153:        uint32_t        hdr_len;
                    154:        uint32_t        hdr_ret;
                    155:        uint8_t         hdr_pad;
1.3       misho     156: } __attribute__((packed));                     /* size == 16 bytes */
1.2       misho     157: #define RPC_SET_BLOB_RET(x, _v)        ((x)->hdr_ret = (uint32_t) htonl((_v)))
                    158: 
                    159: /* RPC BLOB types */
                    160: 
                    161: typedef enum {
                    162:        ok, error, no,                          /* for blob reply */
                    163:        get, set, unset                         /* for blob request */
                    164: } blob_cmd_type_t;
                    165: 
                    166: 
                    167: #endif

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