6 namespace rpc_protocol {
7 using proc_id_t = uint32_t;
9 using status = int32_t;
10 using rpc_sz_t = uint32_t;
14 unmarshal_args_failure = -2,
15 unmarshal_reply_failure = -3,
16 atmostonce_failure = -4,
22 struct request_header {
25 unsigned int clt_nonce;
26 unsigned int srv_nonce;
29 MEMBERS(xid, proc, clt_nonce, srv_nonce, xid_rep)
39 template <typename Signature>
41 using signature = Signature;
45 const size_t RPC_HEADER_SZ = max(sizeof(request_header), sizeof(reply_header)) + sizeof(rpc_sz_t);
46 const size_t DEFAULT_RPC_SZ = 1024; // size of initial buffer allocation
47 const size_t MAX_PDU = 10<<20; //maximum PDF is 10M
49 #define REMOTE_PROCEDURE_BASE(_base_) enum proc_no : ::rpc_protocol::proc_id_t { base = _base_ };
50 #define REMOTE_PROCEDURE(_offset_, _name_, _args_) static constexpr ::rpc_protocol::proc_t<status _args_> _name_{base + _offset_};
52 REMOTE_PROCEDURE_BASE(0);
53 REMOTE_PROCEDURE(1, bind, (unsigned int &, int)); // handler number reserved for bind
56 ENDIAN_SWAPPABLE(rpc_protocol::request_header)
57 ENDIAN_SWAPPABLE(rpc_protocol::reply_header)