Safe API Framework
0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
rte_ipc_request_reply.c
Go to the documentation of this file.
1
6
7
#include "
rte/oal/ipc/rte_ipc_request_reply.h
"
8
#include "
rte/utils/lifecycle/rte_lifecycle.h
"
9
#include "rte/log.h"
10
11
/* Implementation stubs - actual implementation would use base IPC layer */
12
14
16
18
20
22
23
25
rte_status_t
rte_ipc_rr_server_create
(
rte_ipc_rr_server_t
*handle_out,
26
const
rte_ipc_rr_server_config_t
*config)
27
{
28
rte_status_t
lifecycle_status;
29
30
if
(handle_out == NULL || config == NULL) {
31
return
RTE_STATUS_INVALID_PARAM
;
32
}
33
34
/* REQ-LIFECYCLE-001 (ADR-026): an RR server is a setup-only resource -
35
* refuse once the application's setup phase has been locked. */
36
lifecycle_status =
rte_lifecycle_check_setup_allowed
();
37
if
(lifecycle_status !=
RTE_STATUS_OK
)
38
{
39
return
lifecycle_status;
40
}
41
42
RTE_LOG_INFO(
"Creating RR server: %s (req_sz=%zu, reply_sz=%zu, depth=%zu)"
,
43
config->
name
, config->
request_size
, config->
reply_size
,
44
config->
queue_depth
);
45
46
/* TODO: Implement using base IPC layer */
47
return
RTE_STATUS_OK
;
48
}
49
50
rte_status_t
rte_ipc_rr_receive_request
(
rte_ipc_rr_server_t
server,
51
rte_ipc_rr_request_t
*request_out,
52
rte_duration_ms_t
timeout_ms)
53
{
54
if
(server == NULL || request_out == NULL) {
55
return
RTE_STATUS_INVALID_PARAM
;
56
}
57
58
/* TODO: Implement request receiving with timeout */
59
return
RTE_STATUS_TIMEOUT
;
60
}
61
62
rte_status_t
rte_ipc_rr_send_reply
(
rte_ipc_rr_server_t
server,
63
uint32_t request_id,
64
const
void
*reply_data,
65
size_t
reply_size)
66
{
67
if
(server == NULL || reply_data == NULL) {
68
return
RTE_STATUS_INVALID_PARAM
;
69
}
70
71
RTE_LOG_DEBUG(
"Sending reply to request %u (%zu bytes)"
, request_id, reply_size);
72
73
/* TODO: Implement reply sending */
74
return
RTE_STATUS_OK
;
75
}
76
77
rte_status_t
rte_ipc_rr_server_destroy
(
rte_ipc_rr_server_t
server)
78
{
79
if
(server == NULL) {
80
return
RTE_STATUS_INVALID_PARAM
;
81
}
82
83
RTE_LOG_INFO(
"Destroying RR server"
);
84
return
RTE_STATUS_OK
;
85
}
86
87
rte_status_t
rte_ipc_rr_client_create
(
rte_ipc_rr_client_t
*handle_out,
88
const
rte_ipc_rr_client_config_t
*config)
89
{
90
rte_status_t
lifecycle_status;
91
92
if
(handle_out == NULL || config == NULL) {
93
return
RTE_STATUS_INVALID_PARAM
;
94
}
95
96
/* REQ-LIFECYCLE-001 (ADR-026): an RR client is a setup-only resource -
97
* refuse once the application's setup phase has been locked. */
98
lifecycle_status =
rte_lifecycle_check_setup_allowed
();
99
if
(lifecycle_status !=
RTE_STATUS_OK
)
100
{
101
return
lifecycle_status;
102
}
103
104
RTE_LOG_INFO(
"Creating RR client for server: %s"
, config->
server_name
);
105
106
/* TODO: Implement client connection to server */
107
return
RTE_STATUS_OK
;
108
}
109
110
rte_status_t
rte_ipc_rr_request
(
rte_ipc_rr_client_t
client,
111
const
void
*request_data,
112
size_t
request_size,
113
void
*reply_out,
114
size_t
reply_size,
115
rte_duration_ms_t
timeout_ms)
116
{
117
if
(client == NULL || request_data == NULL || reply_out == NULL) {
118
return
RTE_STATUS_INVALID_PARAM
;
119
}
120
121
RTE_LOG_DEBUG(
"Sending RPC request (%zu bytes), waiting for reply (timeout=%u ms)"
,
122
request_size, timeout_ms);
123
124
/* TODO: Implement request send + reply receive with timeout */
125
return
RTE_STATUS_TIMEOUT
;
126
}
127
128
rte_status_t
rte_ipc_rr_client_destroy
(
rte_ipc_rr_client_t
client)
129
{
130
if
(client == NULL) {
131
return
RTE_STATUS_INVALID_PARAM
;
132
}
133
134
RTE_LOG_INFO(
"Destroying RR client"
);
135
return
RTE_STATUS_OK
;
136
}
rte_lifecycle_check_setup_allowed
rte_status_t rte_lifecycle_check_setup_allowed(void)
Convenience check for a setup-only constructor: call this as one of the first checks in any function ...
Definition
rte_lifecycle.c:41
rte_status_t
rte_status_t
Common result/status codes.
Definition
rte_status.h:27
RTE_STATUS_OK
@ RTE_STATUS_OK
Definition
rte_status.h:28
RTE_STATUS_INVALID_PARAM
@ RTE_STATUS_INVALID_PARAM
Definition
rte_status.h:29
RTE_STATUS_TIMEOUT
@ RTE_STATUS_TIMEOUT
Definition
rte_status.h:32
rte_duration_ms_t
uint32_t rte_duration_ms_t
Definition
rte_types.h:27
rte_ipc_request_reply.h
IPC Request-Reply Pattern (RPC-style communication).
rte_ipc_rr_client_destroy
rte_status_t rte_ipc_rr_client_destroy(rte_ipc_rr_client_t client)
Destroy request-reply client connection.
Definition
rte_ipc_request_reply.c:128
rte_ipc_rr_send_reply
rte_status_t rte_ipc_rr_send_reply(rte_ipc_rr_server_t server, uint32_t request_id, const void *reply_data, size_t reply_size)
Send reply to a request.
Definition
rte_ipc_request_reply.c:62
rte_ipc_rr_server_destroy
rte_status_t rte_ipc_rr_server_destroy(rte_ipc_rr_server_t server)
Destroy request-reply server.
Definition
rte_ipc_request_reply.c:77
rte_ipc_rr_server_create
rte_status_t rte_ipc_rr_server_create(rte_ipc_rr_server_t *handle_out, const rte_ipc_rr_server_config_t *config)
Create a request-reply server channel.
Definition
rte_ipc_request_reply.c:25
rte_ipc_rr_receive_request
rte_status_t rte_ipc_rr_receive_request(rte_ipc_rr_server_t server, rte_ipc_rr_request_t *request_out, rte_duration_ms_t timeout_ms)
Receive a request (blocking with timeout).
Definition
rte_ipc_request_reply.c:50
rte_ipc_rr_server_t
struct rte_ipc_rr_server_s * rte_ipc_rr_server_t
Request-Reply server channel handle.
Definition
rte_ipc_request_reply.h:42
rte_ipc_rr_client_t
struct rte_ipc_rr_client_s * rte_ipc_rr_client_t
Request-reply client handle.
Definition
rte_ipc_request_reply.h:149
rte_ipc_rr_request
rte_status_t rte_ipc_rr_request(rte_ipc_rr_client_t client, const void *request_data, size_t request_size, void *reply_out, size_t reply_size, rte_duration_ms_t timeout_ms)
Send request and wait for reply (blocking with timeout).
Definition
rte_ipc_request_reply.c:110
rte_ipc_rr_client_create
rte_status_t rte_ipc_rr_client_create(rte_ipc_rr_client_t *handle_out, const rte_ipc_rr_client_config_t *config)
Create a request-reply client connection.
Definition
rte_ipc_request_reply.c:87
rte_lifecycle.h
Process-wide application setup-phase lock (ADR-026).
rte_ipc_rr_client_config_t
Configuration for request-reply client.
Definition
rte_ipc_request_reply.h:154
rte_ipc_rr_client_config_t::server_name
const char * server_name
Definition
rte_ipc_request_reply.h:155
rte_ipc_rr_request_t
Incoming request with context for sending reply.
Definition
rte_ipc_request_reply.h:57
rte_ipc_rr_server_config_t
Configuration for request-reply server.
Definition
rte_ipc_request_reply.h:47
rte_ipc_rr_server_config_t::reply_size
size_t reply_size
Definition
rte_ipc_request_reply.h:50
rte_ipc_rr_server_config_t::name
const char * name
Definition
rte_ipc_request_reply.h:48
rte_ipc_rr_server_config_t::queue_depth
size_t queue_depth
Definition
rte_ipc_request_reply.h:51
rte_ipc_rr_server_config_t::request_size
size_t request_size
Definition
rte_ipc_request_reply.h:49
src
oal
ipc
rte_ipc_request_reply.c
Generated by
1.18.0