1*cfb92d14SAndroid Build Coastguard Worker /*
2*cfb92d14SAndroid Build Coastguard Worker * Copyright (c) 2016, The OpenThread Authors.
3*cfb92d14SAndroid Build Coastguard Worker * All rights reserved.
4*cfb92d14SAndroid Build Coastguard Worker *
5*cfb92d14SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
6*cfb92d14SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met:
7*cfb92d14SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright
8*cfb92d14SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer.
9*cfb92d14SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright
10*cfb92d14SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the
11*cfb92d14SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution.
12*cfb92d14SAndroid Build Coastguard Worker * 3. Neither the name of the copyright holder nor the
13*cfb92d14SAndroid Build Coastguard Worker * names of its contributors may be used to endorse or promote products
14*cfb92d14SAndroid Build Coastguard Worker * derived from this software without specific prior written permission.
15*cfb92d14SAndroid Build Coastguard Worker *
16*cfb92d14SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17*cfb92d14SAndroid Build Coastguard Worker * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*cfb92d14SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*cfb92d14SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20*cfb92d14SAndroid Build Coastguard Worker * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*cfb92d14SAndroid Build Coastguard Worker * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*cfb92d14SAndroid Build Coastguard Worker * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*cfb92d14SAndroid Build Coastguard Worker * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*cfb92d14SAndroid Build Coastguard Worker * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*cfb92d14SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*cfb92d14SAndroid Build Coastguard Worker * POSSIBILITY OF SUCH DAMAGE.
27*cfb92d14SAndroid Build Coastguard Worker */
28*cfb92d14SAndroid Build Coastguard Worker
29*cfb92d14SAndroid Build Coastguard Worker /**
30*cfb92d14SAndroid Build Coastguard Worker * @file
31*cfb92d14SAndroid Build Coastguard Worker * @brief
32*cfb92d14SAndroid Build Coastguard Worker * This file includes the platform-specific initializers.
33*cfb92d14SAndroid Build Coastguard Worker */
34*cfb92d14SAndroid Build Coastguard Worker
35*cfb92d14SAndroid Build Coastguard Worker #include "platform-simulation.h"
36*cfb92d14SAndroid Build Coastguard Worker
37*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_SIMULATION_VIRTUAL_TIME == 0
38*cfb92d14SAndroid Build Coastguard Worker
39*cfb92d14SAndroid Build Coastguard Worker #include <arpa/inet.h>
40*cfb92d14SAndroid Build Coastguard Worker #include <assert.h>
41*cfb92d14SAndroid Build Coastguard Worker #include <errno.h>
42*cfb92d14SAndroid Build Coastguard Worker #include <getopt.h>
43*cfb92d14SAndroid Build Coastguard Worker #include <libgen.h>
44*cfb92d14SAndroid Build Coastguard Worker #include <stddef.h>
45*cfb92d14SAndroid Build Coastguard Worker #include <stdint.h>
46*cfb92d14SAndroid Build Coastguard Worker #include <stdio.h>
47*cfb92d14SAndroid Build Coastguard Worker #include <stdlib.h>
48*cfb92d14SAndroid Build Coastguard Worker #include <string.h>
49*cfb92d14SAndroid Build Coastguard Worker #include <sys/types.h>
50*cfb92d14SAndroid Build Coastguard Worker
51*cfb92d14SAndroid Build Coastguard Worker #include <openthread/tasklet.h>
52*cfb92d14SAndroid Build Coastguard Worker #include <openthread/platform/alarm-milli.h>
53*cfb92d14SAndroid Build Coastguard Worker #include <openthread/platform/radio.h>
54*cfb92d14SAndroid Build Coastguard Worker
55*cfb92d14SAndroid Build Coastguard Worker #include "simul_utils.h"
56*cfb92d14SAndroid Build Coastguard Worker
57*cfb92d14SAndroid Build Coastguard Worker uint32_t gNodeId = 1;
58*cfb92d14SAndroid Build Coastguard Worker
59*cfb92d14SAndroid Build Coastguard Worker extern bool gPlatformPseudoResetWasRequested;
60*cfb92d14SAndroid Build Coastguard Worker extern otRadioCaps gRadioCaps;
61*cfb92d14SAndroid Build Coastguard Worker
62*cfb92d14SAndroid Build Coastguard Worker static volatile bool gTerminate = false;
63*cfb92d14SAndroid Build Coastguard Worker
handleSignal(int aSignal)64*cfb92d14SAndroid Build Coastguard Worker static void handleSignal(int aSignal)
65*cfb92d14SAndroid Build Coastguard Worker {
66*cfb92d14SAndroid Build Coastguard Worker OT_UNUSED_VARIABLE(aSignal);
67*cfb92d14SAndroid Build Coastguard Worker
68*cfb92d14SAndroid Build Coastguard Worker gTerminate = true;
69*cfb92d14SAndroid Build Coastguard Worker }
70*cfb92d14SAndroid Build Coastguard Worker
71*cfb92d14SAndroid Build Coastguard Worker /**
72*cfb92d14SAndroid Build Coastguard Worker * Defines the argument return values.
73*cfb92d14SAndroid Build Coastguard Worker *
74*cfb92d14SAndroid Build Coastguard Worker */
75*cfb92d14SAndroid Build Coastguard Worker enum
76*cfb92d14SAndroid Build Coastguard Worker {
77*cfb92d14SAndroid Build Coastguard Worker OT_SIM_OPT_HELP = 'h',
78*cfb92d14SAndroid Build Coastguard Worker OT_SIM_OPT_ENABLE_ENERGY_SCAN = 'E',
79*cfb92d14SAndroid Build Coastguard Worker OT_SIM_OPT_LOCAL_INTERFACE = 'L',
80*cfb92d14SAndroid Build Coastguard Worker OT_SIM_OPT_SLEEP_TO_TX = 't',
81*cfb92d14SAndroid Build Coastguard Worker OT_SIM_OPT_TIME_SPEED = 's',
82*cfb92d14SAndroid Build Coastguard Worker OT_SIM_OPT_LOG_FILE = 'l',
83*cfb92d14SAndroid Build Coastguard Worker OT_SIM_OPT_UNKNOWN = '?',
84*cfb92d14SAndroid Build Coastguard Worker };
85*cfb92d14SAndroid Build Coastguard Worker
PrintUsage(const char * aProgramName,int aExitCode)86*cfb92d14SAndroid Build Coastguard Worker static void PrintUsage(const char *aProgramName, int aExitCode)
87*cfb92d14SAndroid Build Coastguard Worker {
88*cfb92d14SAndroid Build Coastguard Worker fprintf(stderr,
89*cfb92d14SAndroid Build Coastguard Worker "Syntax:\n"
90*cfb92d14SAndroid Build Coastguard Worker " %s [Options] NodeId\n"
91*cfb92d14SAndroid Build Coastguard Worker "Options:\n"
92*cfb92d14SAndroid Build Coastguard Worker " -h --help Display this usage information.\n"
93*cfb92d14SAndroid Build Coastguard Worker " -L --local-interface=val The address or name of the netif to simulate Thread radio.\n"
94*cfb92d14SAndroid Build Coastguard Worker " -E --enable-energy-scan Enable energy scan capability.\n"
95*cfb92d14SAndroid Build Coastguard Worker " -t --sleep-to-tx Let radio support direct transition from sleep to TX with CSMA.\n"
96*cfb92d14SAndroid Build Coastguard Worker " -s --time-speed=val Speed up the time in simulation.\n"
97*cfb92d14SAndroid Build Coastguard Worker #if (OPENTHREAD_CONFIG_LOG_OUTPUT == OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED)
98*cfb92d14SAndroid Build Coastguard Worker " -l --log-file=name File name to write logs.\n"
99*cfb92d14SAndroid Build Coastguard Worker #endif
100*cfb92d14SAndroid Build Coastguard Worker ,
101*cfb92d14SAndroid Build Coastguard Worker aProgramName);
102*cfb92d14SAndroid Build Coastguard Worker
103*cfb92d14SAndroid Build Coastguard Worker exit(aExitCode);
104*cfb92d14SAndroid Build Coastguard Worker }
105*cfb92d14SAndroid Build Coastguard Worker
otSysInit(int aArgCount,char * aArgVector[])106*cfb92d14SAndroid Build Coastguard Worker void otSysInit(int aArgCount, char *aArgVector[])
107*cfb92d14SAndroid Build Coastguard Worker {
108*cfb92d14SAndroid Build Coastguard Worker char *endptr;
109*cfb92d14SAndroid Build Coastguard Worker uint32_t speedUpFactor = 1;
110*cfb92d14SAndroid Build Coastguard Worker
111*cfb92d14SAndroid Build Coastguard Worker static const struct option long_options[] = {
112*cfb92d14SAndroid Build Coastguard Worker {"help", no_argument, 0, OT_SIM_OPT_HELP},
113*cfb92d14SAndroid Build Coastguard Worker {"enable-energy-scan", no_argument, 0, OT_SIM_OPT_ENABLE_ENERGY_SCAN},
114*cfb92d14SAndroid Build Coastguard Worker {"sleep-to-tx", no_argument, 0, OT_SIM_OPT_SLEEP_TO_TX},
115*cfb92d14SAndroid Build Coastguard Worker {"time-speed", required_argument, 0, OT_SIM_OPT_TIME_SPEED},
116*cfb92d14SAndroid Build Coastguard Worker {"local-interface", required_argument, 0, OT_SIM_OPT_LOCAL_INTERFACE},
117*cfb92d14SAndroid Build Coastguard Worker #if (OPENTHREAD_CONFIG_LOG_OUTPUT == OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED)
118*cfb92d14SAndroid Build Coastguard Worker {"log-file", required_argument, 0, OT_SIM_OPT_LOG_FILE},
119*cfb92d14SAndroid Build Coastguard Worker #endif
120*cfb92d14SAndroid Build Coastguard Worker {0, 0, 0, 0},
121*cfb92d14SAndroid Build Coastguard Worker };
122*cfb92d14SAndroid Build Coastguard Worker
123*cfb92d14SAndroid Build Coastguard Worker #if (OPENTHREAD_CONFIG_LOG_OUTPUT == OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED)
124*cfb92d14SAndroid Build Coastguard Worker static const char options[] = "Ehts:L:l:";
125*cfb92d14SAndroid Build Coastguard Worker #else
126*cfb92d14SAndroid Build Coastguard Worker static const char options[] = "Ehts:L:";
127*cfb92d14SAndroid Build Coastguard Worker #endif
128*cfb92d14SAndroid Build Coastguard Worker
129*cfb92d14SAndroid Build Coastguard Worker if (gPlatformPseudoResetWasRequested)
130*cfb92d14SAndroid Build Coastguard Worker {
131*cfb92d14SAndroid Build Coastguard Worker gPlatformPseudoResetWasRequested = false;
132*cfb92d14SAndroid Build Coastguard Worker return;
133*cfb92d14SAndroid Build Coastguard Worker }
134*cfb92d14SAndroid Build Coastguard Worker
135*cfb92d14SAndroid Build Coastguard Worker optind = 1;
136*cfb92d14SAndroid Build Coastguard Worker
137*cfb92d14SAndroid Build Coastguard Worker while (true)
138*cfb92d14SAndroid Build Coastguard Worker {
139*cfb92d14SAndroid Build Coastguard Worker int c = getopt_long(aArgCount, aArgVector, options, long_options, NULL);
140*cfb92d14SAndroid Build Coastguard Worker
141*cfb92d14SAndroid Build Coastguard Worker if (c == -1)
142*cfb92d14SAndroid Build Coastguard Worker {
143*cfb92d14SAndroid Build Coastguard Worker break;
144*cfb92d14SAndroid Build Coastguard Worker }
145*cfb92d14SAndroid Build Coastguard Worker
146*cfb92d14SAndroid Build Coastguard Worker switch (c)
147*cfb92d14SAndroid Build Coastguard Worker {
148*cfb92d14SAndroid Build Coastguard Worker case OT_SIM_OPT_UNKNOWN:
149*cfb92d14SAndroid Build Coastguard Worker PrintUsage(aArgVector[0], EXIT_FAILURE);
150*cfb92d14SAndroid Build Coastguard Worker break;
151*cfb92d14SAndroid Build Coastguard Worker case OT_SIM_OPT_HELP:
152*cfb92d14SAndroid Build Coastguard Worker PrintUsage(aArgVector[0], EXIT_SUCCESS);
153*cfb92d14SAndroid Build Coastguard Worker break;
154*cfb92d14SAndroid Build Coastguard Worker case OT_SIM_OPT_ENABLE_ENERGY_SCAN:
155*cfb92d14SAndroid Build Coastguard Worker gRadioCaps |= OT_RADIO_CAPS_ENERGY_SCAN;
156*cfb92d14SAndroid Build Coastguard Worker break;
157*cfb92d14SAndroid Build Coastguard Worker case OT_SIM_OPT_SLEEP_TO_TX:
158*cfb92d14SAndroid Build Coastguard Worker gRadioCaps |= OT_RADIO_CAPS_SLEEP_TO_TX;
159*cfb92d14SAndroid Build Coastguard Worker break;
160*cfb92d14SAndroid Build Coastguard Worker case OT_SIM_OPT_LOCAL_INTERFACE:
161*cfb92d14SAndroid Build Coastguard Worker gLocalInterface = optarg;
162*cfb92d14SAndroid Build Coastguard Worker break;
163*cfb92d14SAndroid Build Coastguard Worker case OT_SIM_OPT_TIME_SPEED:
164*cfb92d14SAndroid Build Coastguard Worker speedUpFactor = (uint32_t)strtol(optarg, &endptr, 10);
165*cfb92d14SAndroid Build Coastguard Worker if (*endptr != '\0' || speedUpFactor == 0)
166*cfb92d14SAndroid Build Coastguard Worker {
167*cfb92d14SAndroid Build Coastguard Worker fprintf(stderr, "Invalid value for TimerSpeedUpFactor: %s\n", optarg);
168*cfb92d14SAndroid Build Coastguard Worker exit(EXIT_FAILURE);
169*cfb92d14SAndroid Build Coastguard Worker }
170*cfb92d14SAndroid Build Coastguard Worker break;
171*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_LOG_OUTPUT == OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED
172*cfb92d14SAndroid Build Coastguard Worker case OT_SIM_OPT_LOG_FILE:
173*cfb92d14SAndroid Build Coastguard Worker platformLoggingSetFileName(optarg);
174*cfb92d14SAndroid Build Coastguard Worker break;
175*cfb92d14SAndroid Build Coastguard Worker #endif
176*cfb92d14SAndroid Build Coastguard Worker default:
177*cfb92d14SAndroid Build Coastguard Worker break;
178*cfb92d14SAndroid Build Coastguard Worker }
179*cfb92d14SAndroid Build Coastguard Worker }
180*cfb92d14SAndroid Build Coastguard Worker
181*cfb92d14SAndroid Build Coastguard Worker if (optind != aArgCount - 1)
182*cfb92d14SAndroid Build Coastguard Worker {
183*cfb92d14SAndroid Build Coastguard Worker PrintUsage(aArgVector[0], EXIT_FAILURE);
184*cfb92d14SAndroid Build Coastguard Worker }
185*cfb92d14SAndroid Build Coastguard Worker
186*cfb92d14SAndroid Build Coastguard Worker gNodeId = (uint32_t)strtol(aArgVector[optind], &endptr, 0);
187*cfb92d14SAndroid Build Coastguard Worker
188*cfb92d14SAndroid Build Coastguard Worker if (*endptr != '\0' || gNodeId < 1 || gNodeId > MAX_NETWORK_SIZE)
189*cfb92d14SAndroid Build Coastguard Worker {
190*cfb92d14SAndroid Build Coastguard Worker fprintf(stderr, "Invalid NodeId: %s\n", aArgVector[optind]);
191*cfb92d14SAndroid Build Coastguard Worker exit(EXIT_FAILURE);
192*cfb92d14SAndroid Build Coastguard Worker }
193*cfb92d14SAndroid Build Coastguard Worker
194*cfb92d14SAndroid Build Coastguard Worker signal(SIGTERM, &handleSignal);
195*cfb92d14SAndroid Build Coastguard Worker signal(SIGHUP, &handleSignal);
196*cfb92d14SAndroid Build Coastguard Worker
197*cfb92d14SAndroid Build Coastguard Worker platformLoggingInit(basename(aArgVector[0]));
198*cfb92d14SAndroid Build Coastguard Worker platformAlarmInit(speedUpFactor);
199*cfb92d14SAndroid Build Coastguard Worker platformRadioInit();
200*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE
201*cfb92d14SAndroid Build Coastguard Worker platformTrelInit(speedUpFactor);
202*cfb92d14SAndroid Build Coastguard Worker #endif
203*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_SIMULATION_IMPLEMENT_INFRA_IF && OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
204*cfb92d14SAndroid Build Coastguard Worker platformInfraIfInit();
205*cfb92d14SAndroid Build Coastguard Worker #endif
206*cfb92d14SAndroid Build Coastguard Worker platformRandomInit();
207*cfb92d14SAndroid Build Coastguard Worker }
208*cfb92d14SAndroid Build Coastguard Worker
otSysPseudoResetWasRequested(void)209*cfb92d14SAndroid Build Coastguard Worker bool otSysPseudoResetWasRequested(void) { return gPlatformPseudoResetWasRequested; }
210*cfb92d14SAndroid Build Coastguard Worker
otSysDeinit(void)211*cfb92d14SAndroid Build Coastguard Worker void otSysDeinit(void)
212*cfb92d14SAndroid Build Coastguard Worker {
213*cfb92d14SAndroid Build Coastguard Worker platformRadioDeinit();
214*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE
215*cfb92d14SAndroid Build Coastguard Worker platformTrelDeinit();
216*cfb92d14SAndroid Build Coastguard Worker #endif
217*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_SIMULATION_IMPLEMENT_INFRA_IF && OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
218*cfb92d14SAndroid Build Coastguard Worker platformInfraIfDeinit();
219*cfb92d14SAndroid Build Coastguard Worker #endif
220*cfb92d14SAndroid Build Coastguard Worker platformLoggingDeinit();
221*cfb92d14SAndroid Build Coastguard Worker }
222*cfb92d14SAndroid Build Coastguard Worker
otSysProcessDrivers(otInstance * aInstance)223*cfb92d14SAndroid Build Coastguard Worker void otSysProcessDrivers(otInstance *aInstance)
224*cfb92d14SAndroid Build Coastguard Worker {
225*cfb92d14SAndroid Build Coastguard Worker fd_set read_fds;
226*cfb92d14SAndroid Build Coastguard Worker fd_set write_fds;
227*cfb92d14SAndroid Build Coastguard Worker fd_set error_fds;
228*cfb92d14SAndroid Build Coastguard Worker int max_fd = -1;
229*cfb92d14SAndroid Build Coastguard Worker struct timeval timeout;
230*cfb92d14SAndroid Build Coastguard Worker int rval;
231*cfb92d14SAndroid Build Coastguard Worker
232*cfb92d14SAndroid Build Coastguard Worker FD_ZERO(&read_fds);
233*cfb92d14SAndroid Build Coastguard Worker FD_ZERO(&write_fds);
234*cfb92d14SAndroid Build Coastguard Worker FD_ZERO(&error_fds);
235*cfb92d14SAndroid Build Coastguard Worker
236*cfb92d14SAndroid Build Coastguard Worker platformUartUpdateFdSet(&read_fds, &write_fds, &error_fds, &max_fd);
237*cfb92d14SAndroid Build Coastguard Worker platformAlarmUpdateTimeout(&timeout);
238*cfb92d14SAndroid Build Coastguard Worker platformRadioUpdateFdSet(&read_fds, &write_fds, &timeout, &max_fd);
239*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE
240*cfb92d14SAndroid Build Coastguard Worker platformTrelUpdateFdSet(&read_fds, &write_fds, &timeout, &max_fd);
241*cfb92d14SAndroid Build Coastguard Worker #endif
242*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_SIMULATION_IMPLEMENT_INFRA_IF && OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
243*cfb92d14SAndroid Build Coastguard Worker platformInfraIfUpdateFdSet(&read_fds, &write_fds, &max_fd);
244*cfb92d14SAndroid Build Coastguard Worker #endif
245*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_MULTICAST_DNS_ENABLE && OPENTHREAD_SIMULATION_MDNS_SOCKET_IMPLEMENT_POSIX
246*cfb92d14SAndroid Build Coastguard Worker platformMdnsSocketUpdateFdSet(&read_fds, &max_fd);
247*cfb92d14SAndroid Build Coastguard Worker #endif
248*cfb92d14SAndroid Build Coastguard Worker
249*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_BLE_TCAT_ENABLE
250*cfb92d14SAndroid Build Coastguard Worker platformBleUpdateFdSet(&read_fds, &write_fds, &timeout, &max_fd);
251*cfb92d14SAndroid Build Coastguard Worker #endif
252*cfb92d14SAndroid Build Coastguard Worker
253*cfb92d14SAndroid Build Coastguard Worker if (otTaskletsArePending(aInstance))
254*cfb92d14SAndroid Build Coastguard Worker {
255*cfb92d14SAndroid Build Coastguard Worker timeout.tv_sec = 0;
256*cfb92d14SAndroid Build Coastguard Worker timeout.tv_usec = 0;
257*cfb92d14SAndroid Build Coastguard Worker }
258*cfb92d14SAndroid Build Coastguard Worker
259*cfb92d14SAndroid Build Coastguard Worker rval = select(max_fd + 1, &read_fds, &write_fds, &error_fds, &timeout);
260*cfb92d14SAndroid Build Coastguard Worker
261*cfb92d14SAndroid Build Coastguard Worker if (rval >= 0)
262*cfb92d14SAndroid Build Coastguard Worker {
263*cfb92d14SAndroid Build Coastguard Worker platformUartProcess();
264*cfb92d14SAndroid Build Coastguard Worker platformRadioProcess(aInstance, &read_fds, &write_fds);
265*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_BLE_TCAT_ENABLE
266*cfb92d14SAndroid Build Coastguard Worker platformBleProcess(aInstance, &read_fds, &write_fds);
267*cfb92d14SAndroid Build Coastguard Worker #endif
268*cfb92d14SAndroid Build Coastguard Worker }
269*cfb92d14SAndroid Build Coastguard Worker else if (errno != EINTR)
270*cfb92d14SAndroid Build Coastguard Worker {
271*cfb92d14SAndroid Build Coastguard Worker perror("select");
272*cfb92d14SAndroid Build Coastguard Worker exit(EXIT_FAILURE);
273*cfb92d14SAndroid Build Coastguard Worker }
274*cfb92d14SAndroid Build Coastguard Worker
275*cfb92d14SAndroid Build Coastguard Worker platformAlarmProcess(aInstance);
276*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE
277*cfb92d14SAndroid Build Coastguard Worker platformTrelProcess(aInstance, &read_fds, &write_fds);
278*cfb92d14SAndroid Build Coastguard Worker #endif
279*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_SIMULATION_IMPLEMENT_INFRA_IF && OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
280*cfb92d14SAndroid Build Coastguard Worker platformInfraIfProcess(aInstance, &read_fds, &write_fds);
281*cfb92d14SAndroid Build Coastguard Worker #endif
282*cfb92d14SAndroid Build Coastguard Worker #if OPENTHREAD_CONFIG_MULTICAST_DNS_ENABLE && OPENTHREAD_SIMULATION_MDNS_SOCKET_IMPLEMENT_POSIX
283*cfb92d14SAndroid Build Coastguard Worker platformMdnsSocketProcess(aInstance, &read_fds);
284*cfb92d14SAndroid Build Coastguard Worker #endif
285*cfb92d14SAndroid Build Coastguard Worker
286*cfb92d14SAndroid Build Coastguard Worker if (gTerminate)
287*cfb92d14SAndroid Build Coastguard Worker {
288*cfb92d14SAndroid Build Coastguard Worker exit(0);
289*cfb92d14SAndroid Build Coastguard Worker }
290*cfb92d14SAndroid Build Coastguard Worker }
291*cfb92d14SAndroid Build Coastguard Worker
292*cfb92d14SAndroid Build Coastguard Worker #endif // OPENTHREAD_SIMULATION_VIRTUAL_TIME == 0
293