RTE RBC 2oo2 Reference Application 0.1.0 build 0006685
SIL 4 2oo2 Dual-Site Fault-Tolerant ERTMS Radio Block Centre Reference Architecture
Loading...
Searching...
No Matches
site_config.c
Go to the documentation of this file.
1
5#include <stdlib.h>
6#include <string.h>
7
8#include "site_config.h"
9#include "common_config.h"
10
12
14
16
18
20static uint16_t site_port_base(rte_example_site_t site);
28static uint16_t relay_port_offset(rte_example_relay_kind_t kind, uint16_t train_base,
29 uint16_t il_base, uint16_t ctc_base, uint16_t util_base);
30
31
33bool site_config_parse(const char *arg, rte_example_site_t *out_site)
34{
35 if ((arg == NULL) || (out_site == NULL))
36 {
37 return false;
38 }
39 if ((strcmp(arg, "WEST") == 0) || (strcmp(arg, "west") == 0))
40 {
41 *out_site = RTE_EXAMPLE_SITE_WEST;
42 return true;
43 }
44 if ((strcmp(arg, "EAST") == 0) || (strcmp(arg, "east") == 0))
45 {
46 *out_site = RTE_EXAMPLE_SITE_EAST;
47 return true;
48 }
49 return false;
50}
51
53{
54 return (site == RTE_EXAMPLE_SITE_WEST) ? "WEST" : "EAST";
55}
56
58{
59 return (uint16_t)(site_port_base(site) + (uint16_t)RTE_EXAMPLE_AB_PORT_OFFSET);
60}
61
66
75
84
86{
87 return (uint16_t)(site_port_base(site) + (uint16_t)RTE_EXAMPLE_C_FOR_TRAIN_PORT_OFFSET);
88}
89
91{
92 return (uint16_t)(site_port_base(site) + (uint16_t)RTE_EXAMPLE_C_FOR_IL_PORT_OFFSET);
93}
94
96{
97 return (uint16_t)(site_port_base(site) + (uint16_t)RTE_EXAMPLE_C_FOR_CTC_PORT_OFFSET);
98}
99
101{
102 uint16_t off;
103
104 switch (gw_kind)
105 {
108 break;
111 break;
113 default:
115 break;
116 }
117 return (uint16_t)(site_port_base(site) + off);
118}
119
120const char *site_config_host(const char *env_var_name)
121{
122 const char *value = getenv(env_var_name);
123
124 return ((value != NULL) && (value[0] != '\0')) ? value : RTE_EXAMPLE_LOCALHOST;
125}
126
127
128/****Local functions ****/
129
131{
132 return (site == RTE_EXAMPLE_SITE_WEST) ? (uint16_t)RTE_EXAMPLE_WEST_PORT_BASE
133 : (uint16_t)RTE_EXAMPLE_EAST_PORT_BASE;
134}
135
136static uint16_t relay_port_offset(rte_example_relay_kind_t kind, uint16_t train_base,
137 uint16_t il_base, uint16_t ctc_base, uint16_t util_base)
138{
139 uint16_t base;
140
141 switch (kind)
142 {
144 base = train_base;
145 break;
147 base = il_base;
148 break;
150 base = util_base;
151 break;
153 default:
154 base = ctc_base;
155 break;
156 }
157 return base;
158}
#define RTE_EXAMPLE_C_FOR_A_TRAIN_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_B_IL_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_CTC_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_B_CTC_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_A_CTC_PORT_OFFSET
#define RTE_EXAMPLE_AB_CROSSCOMPARE_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_A_IL_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_IL_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_A_UTIL_PORT_OFFSET
#define RTE_EXAMPLE_WEST_PORT_BASE
#define RTE_EXAMPLE_C_FOR_BROKER_CTC_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_B_TRAIN_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_TRAIN_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_BROKER_IL_PORT_OFFSET
#define RTE_EXAMPLE_LOCALHOST
#define RTE_EXAMPLE_EAST_PORT_BASE
#define RTE_EXAMPLE_AB_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_BROKER_TRAIN_PORT_OFFSET
#define RTE_EXAMPLE_C_FOR_B_UTIL_PORT_OFFSET
static uint16_t relay_port_offset(rte_example_relay_kind_t kind, uint16_t train_base, uint16_t il_base, uint16_t ctc_base, uint16_t util_base)
uint16_t site_config_c_port_for_broker(rte_example_site_t site, rte_example_relay_kind_t gw_kind)
ADR-038: the status/broker service's LISTEN port for one local gateway service to CONNECT and publish...
uint16_t site_config_c_port_for_ctc(rte_example_site_t site)
Definition site_config.c:95
const char * site_config_name(rte_example_site_t site)
Definition site_config.c:52
uint16_t site_config_c_port_for_il(rte_example_site_t site)
Definition site_config.c:90
bool site_config_parse(const char *arg, rte_example_site_t *out_site)
Parses a site name argument ("WEST"/"EAST", case-insensitive).
Definition site_config.c:33
uint16_t site_config_c_port_for_b(rte_example_site_t site, rte_example_relay_kind_t kind)
Definition site_config.c:76
uint16_t site_config_c_port_for_train(rte_example_site_t site)
C's single listen port for the Train sim, for this site (ADR-036: one multiplexed connection carries ...
Definition site_config.c:85
uint16_t site_config_ab_port(rte_example_site_t site)
Definition site_config.c:57
static uint16_t site_port_base(rte_example_site_t site)
const char * site_config_host(const char *env_var_name)
Resolves a CONNECT-role link's target host for this process.
uint16_t site_config_c_port_for_a(rte_example_site_t site, rte_example_relay_kind_t kind)
C's listen port for A's dedicated kind relay link, for this site (rte_example_relay_kind_t's own doc)...
Definition site_config.c:67
uint16_t site_config_ab_crosscompare_port(rte_example_site_t site)
Definition site_config.c:62
West/East site identity and the per-site config derived from it (ports, container host lookup) - see ...
rte_example_site_t
Definition site_config.h:20
@ RTE_EXAMPLE_SITE_WEST
Definition site_config.h:21
@ RTE_EXAMPLE_SITE_EAST
Definition site_config.h:22
rte_example_relay_kind_t
Which client type a C<->A/C<->B relay link/port belongs to - this project's own dedicated-channel-per...
Definition site_config.h:39
@ RTE_EXAMPLE_RELAY_KIND_UTIL
Definition site_config.h:48
@ RTE_EXAMPLE_RELAY_KIND_CTC
Definition site_config.h:42
@ RTE_EXAMPLE_RELAY_KIND_IL
Definition site_config.h:41
@ RTE_EXAMPLE_RELAY_KIND_TRAIN
Definition site_config.h:40