4 #include "include/types.h"
6 namespace rpc_protocol {
7 using proc_id_t = uint32_t;
9 using status = int32_t;
10 using rpc_sz_t = uint64_t;
11 using nonce_t = uint32_t;
12 using xid_t = int32_t;
16 unmarshall_args_failure = -2,
17 unmarshall_reply_failure = -3,
18 atmostonce_failure = -4,
24 struct request_header {
31 MEMBERS(xid, proc, clt_nonce, srv_nonce, xid_rep)
46 template <typename Signature>
47 struct proc_checked_t : proc_t {
48 using signature = Signature;
49 constexpr inline proc_checked_t(proc_id_t id, const char * name) : proc_t{id, name} {}
52 union header_t { request_header req; reply_header rep; };
53 const size_t RPC_HEADER_SZ = sizeof(header_t) + sizeof(rpc_sz_t);
54 const size_t MAX_PDU = 10<<20; // maximum PDF is 10M
56 #define REMOTE_PROCEDURE_BASE(_base_) \
57 static constexpr rpc_protocol::proc_id_t base = _base_
59 #define REMOTE_PROCEDURE(_offset_, _name_, _args_) \
60 static constexpr rpc_protocol::proc_checked_t<status _args_> _name_{base + _offset_, #_name_}
62 REMOTE_PROCEDURE_BASE(0);
63 REMOTE_PROCEDURE(1, bind, (nonce_t &)); // handler number reserved for bind