aboutsummaryrefslogtreecommitdiff
path: root/protocols/rpc/common/packed-c/header.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/rpc/common/packed-c/header.h')
-rw-r--r--protocols/rpc/common/packed-c/header.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/protocols/rpc/common/packed-c/header.h b/protocols/rpc/common/packed-c/header.h
new file mode 100644
index 000000000..2542dbd2f
--- /dev/null
+++ b/protocols/rpc/common/packed-c/header.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef PROTOCOLS_RPC_COMMON_HEADER_H
+#define PROTOCOLS_RPC_COMMON_HEADER_H
+
+#include <stdint.h>
+
+/*
+ * Defines an RPC request header that may be used for a packed-c serialization
+ * of common RPC fields. Different RPC protocols my carry some or all of these
+ * fields in a protocol specific way. If a particular protocol does't, this
+ * structure provides a common definition that may be used.
+ */
+struct __attribute__ ((__packed__)) ts_rpc_req_hdr
+{
+ /*
+ * A trustworthy identifier for the call originator. Used for access control, applied
+ * at the remote RPC interface. This ID will have been added by an intermediary running
+ * at a higher privilege level than the caller. Example caller_ids could be the UID
+ * or SELinux label associated with a calling process. The caller_id may be supplemented
+ * by a source identity from the messaging layer (e.g. the source partition ID).
+ */
+ uint32_t caller_id;
+
+ /*
+ * Identifies a particular RPC interface instance that is reachable at a messaging
+ * endpoint. Allows multiple services to be co-located at a single messaging endpoint.
+ */
+ uint16_t interface_id;
+
+ /*
+ * Identifies the requested operation to call.
+ */
+ uint16_t opcode;
+
+ /*
+ * Identifies the encoding scheme used to serialize request and response parameters.
+ * It is the responsibility of the caller to specify an encoding that the destination
+ * RPC interface can handle. Must be set to a meaningful value, even if there are
+ * no request parameters. This is because response parameters will beb serialized
+ * using the same encoding.
+ */
+ uint16_t encoding;
+
+ /*
+ * Specifies the length in bytes of the serialized parameters.
+ */
+ uint16_t param_len;
+};
+
+/*
+ * Defines the coresponding response header, used for returning status and
+ * any output parameters, serialized using the same encoding as specified in
+ * the request header.
+ */
+struct __attribute__ ((__packed__)) ts_rpc_resp_hdr
+{
+ /*
+ * Returns the RPC layer status. Only if a value of TS_RPC_CALL_ACCEPTED
+ * is returned should the opstatus value be consider. The RPC status is
+ * kept separate from the opstatus to allow a service specific status coding
+ * namespace to coexist with the RPC status namespace.
+ */
+ int16_t rpc_status;
+
+ /*
+ * Returns the status of the requested operation. The meaning of this status
+ * code will be service specific.
+ */
+ int16_t op_status;
+
+ /*
+ * Specifies the length in bytes of the serialized parameters.
+ */
+ uint16_t param_len;
+};
+
+#endif /* PROTOCOLS_RPC_COMMON_HEADER_H */