--- libaitrpc/inc/aitrpc_pkt.h 2015/07/02 17:52:52 1.1 +++ libaitrpc/inc/aitrpc_pkt.h 2015/07/02 22:28:14 1.2 @@ -0,0 +1,166 @@ +/************************************************************************* +* (C) 2015 AITNET ltd - Sofia/Bulgaria - +* by Michael Pounov +* +* $Author: misho $ +* $Id: aitrpc_pkt.h,v 1.2 2015/07/02 22:28:14 misho Exp $ +* +************************************************************************** +The ELWIX and AITNET software is distributed under the following +terms: + +All of the documentation and software included in the ELWIX and AITNET +Releases is copyrighted by ELWIX - Sofia/Bulgaria + +Copyright 2004 - 2015 + by Michael Pounov . All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: +This product includes software developed by Michael Pounov +ELWIX - Embedded LightWeight unIX and its contributors. +4. Neither the name of AITNET nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +*/ +#ifndef __AITRPC_PKT_H +#define __AITRPC_PKT_H + + +#include +#include + + +#define RPC_VERSION 9 +#define RPC_DEFPORT 2611 + +/* Additional ELWIX RPC supporting protocols */ + +#ifndef SOCK_STREAM +#define SOCK_STREAM 1 /* stream socket */ +#endif +#ifndef SOCK_DGRAM +#define SOCK_DGRAM 2 /* datagram socket */ +#endif +#ifndef SOCK_RAW +#define SOCK_RAW 3 /* raw-protocol interface */ +#endif +#define SOCK_BPF 4 /* ethernet interface */ +#define SOCK_EXT 5 /* bi-directional pipe interface */ + +/* RPC IP protocol number */ + +#define IPPROTO_ERPC 162 + +/* RPC call request flags */ + +#define RPC_REPLY 0x0 +#define RPC_NOREPLY 0x1 + +/* RPC call I/O direction */ + +#define RPC_REQ 0x0 +#define RPC_ACK 0x1 + +/* RPC builtin registed calls */ + +#define CALL_TAG_MAX 65535 + +#define CALL_SRVPING 65534 + +#define CALL_SRVSHUTDOWN 65533 +#define CALL_SRVCLIENTS 65532 +#define CALL_SRVCALLS 65531 +#define CALL_SRVSESSIONS 65530 + +#define CALL_BLOBSHUTDOWN 65529 +#define CALL_BLOBCLIENTS 65528 +#define CALL_BLOBVARS 65527 + +/* RPC signals */ + +#define SIGFBLOB 54 + + +/* RPC session identification */ + +typedef struct { +#if BYTE_ORDER == LITTLE_ENDIAN + uint16_t sess_instance:8; + uint16_t sess_version:8; +#endif +#if BYTE_ORDER == BIG_ENDIAN + uint16_t sess_version:8; + uint16_t sess_instance:8; +#endif +} __packed rpc_sess_t; /* size == 2 bytes */ + +/* Network RPC packet - Header */ + +struct tagRPCCall { + rpc_sess_t call_session; + + uint32_t call_len; + uint32_t call_seq; + uint16_t call_crc; + + union { + struct { + uint64_t flags; + } call_req; + struct { + int32_t ret; + int32_t eno; + } call_rep; + }; + + uint8_t call_io; + uint16_t call_tag; + uint8_t call_argc; + ait_val_t call_argv[0]; +} __packed; /* size == 20 bytes */ +#define RPC_CHK_NOREPLY(x) (ntohl((u_long) (x)->call_req.flags) & RPC_NOREPLY) +#define RPC_SET_ERRNO(x, _v) ((x)->call_rep.eno = (int32_t) htonl((_v))) +#define RPC_SET_RETURN(x, _v) ((x)->call_rep.ret = (int32_t) htonl((_v))) + +/* Network BLOB packet - Header */ + +struct tagBLOBHdr { + rpc_sess_t hdr_session; + uint8_t hdr_cmd; + uint32_t hdr_var; + uint32_t hdr_len; + uint32_t hdr_ret; + uint8_t hdr_pad; +} __packed; /* size == 16 bytes */ +#define RPC_SET_BLOB_RET(x, _v) ((x)->hdr_ret = (uint32_t) htonl((_v))) + +/* RPC BLOB types */ + +typedef enum { + ok, error, no, /* for blob reply */ + get, set, unset /* for blob request */ +} blob_cmd_type_t; + + +#endif