1 /*
2 * Copyright (c) 2017, The OpenThread Authors.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * 3. Neither the name of the copyright holder nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #include "openthread-core-config.h"
30
31 #include "fuzzer_platform.h"
32
33 #include <string.h>
34
35 #include <openthread/platform/alarm-micro.h>
36 #include <openthread/platform/alarm-milli.h>
37 #include <openthread/platform/diag.h>
38 #include <openthread/platform/dnssd.h>
39 #include <openthread/platform/entropy.h>
40 #include <openthread/platform/logging.h>
41 #include <openthread/platform/mdns_socket.h>
42 #include <openthread/platform/misc.h>
43 #include <openthread/platform/multipan.h>
44 #include <openthread/platform/radio.h>
45 #include <openthread/platform/settings.h>
46
47 #include "mac/mac_frame.hpp"
48 #include "openthread/error.h"
49
50 using namespace ot;
51
52 typedef struct AlarmState
53 {
54 uint32_t fire;
55 bool isRunning;
56 } AlarmState;
57
58 enum
59 {
60 IEEE802154_ACK_LENGTH = 5,
61
62 IEEE802154_FRAME_TYPE_ACK = 2 << 0,
63 };
64
65 static uint32_t sAlarmNow;
66 static AlarmState sAlarmMilli;
67 static AlarmState sAlarmMicro;
68 static uint32_t sRandomState = 1;
69 static uint8_t sRadioTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE];
70 static otRadioFrame sRadioTransmitFrame;
71 static uint8_t sRadioAckPsdu[OT_RADIO_FRAME_MAX_SIZE];
72 static otRadioFrame sRadioAckFrame;
73 static bool sResetWasRequested = false;
74 static otRadioState sRadioState = OT_RADIO_STATE_DISABLED;
75
otMacFrameIsAckRequested(const otRadioFrame * aFrame)76 bool otMacFrameIsAckRequested(const otRadioFrame *aFrame)
77 {
78 return static_cast<const Mac::Frame *>(aFrame)->GetAckRequest();
79 }
80
otMacFrameGetSequence(const otRadioFrame * aFrame,uint8_t * aSequence)81 otError otMacFrameGetSequence(const otRadioFrame *aFrame, uint8_t *aSequence)
82 {
83 otError error;
84
85 if (static_cast<const Mac::Frame *>(aFrame)->IsSequencePresent())
86 {
87 *aSequence = static_cast<const Mac::Frame *>(aFrame)->GetSequence();
88 error = kErrorNone;
89 }
90 else
91 {
92 error = kErrorParse;
93 }
94
95 return error;
96 }
97
FuzzerPlatformInit(void)98 void FuzzerPlatformInit(void)
99 {
100 sRandomState = 1;
101 sAlarmNow = 0;
102 memset(&sAlarmMilli, 0, sizeof(sAlarmMilli));
103 memset(&sAlarmMicro, 0, sizeof(sAlarmMicro));
104
105 sRadioTransmitFrame.mPsdu = sRadioTransmitPsdu;
106 sRadioAckFrame.mPsdu = sRadioAckPsdu;
107 }
108
FuzzerPlatformProcess(otInstance * aInstance)109 void FuzzerPlatformProcess(otInstance *aInstance)
110 {
111 if (sRadioState == OT_RADIO_STATE_TRANSMIT)
112 {
113 sRadioState = OT_RADIO_STATE_RECEIVE;
114
115 if (otMacFrameIsAckRequested(&sRadioTransmitFrame))
116 {
117 otError error;
118
119 sRadioAckFrame.mLength = IEEE802154_ACK_LENGTH;
120 sRadioAckFrame.mPsdu[0] = IEEE802154_FRAME_TYPE_ACK;
121 sRadioAckFrame.mPsdu[1] = 0;
122 sRadioAckFrame.mChannel = sRadioTransmitFrame.mChannel;
123 error = otMacFrameGetSequence(&sRadioTransmitFrame, &sRadioAckFrame.mPsdu[2]);
124
125 if (error == OT_ERROR_NONE)
126 {
127 otPlatRadioTxDone(aInstance, &sRadioTransmitFrame, &sRadioAckFrame, OT_ERROR_NONE);
128 }
129 else
130 {
131 otPlatRadioTxDone(aInstance, &sRadioTransmitFrame, nullptr, OT_ERROR_NO_ACK);
132 }
133 }
134 else
135 {
136 otPlatRadioTxDone(aInstance, &sRadioTransmitFrame, nullptr, OT_ERROR_NONE);
137 }
138 }
139
140 if (sAlarmMilli.isRunning || sAlarmMicro.isRunning)
141 {
142 uint32_t fire = UINT32_MAX;
143
144 if (sAlarmMilli.isRunning && fire > sAlarmMilli.fire)
145 {
146 fire = sAlarmMilli.fire;
147 }
148
149 if (sAlarmMicro.isRunning && fire > sAlarmMicro.fire)
150 {
151 fire = sAlarmMicro.fire;
152 }
153
154 sAlarmNow = fire;
155
156 if (sAlarmMilli.isRunning && sAlarmNow >= sAlarmMilli.fire)
157 {
158 sAlarmMilli.isRunning = false;
159 otPlatAlarmMilliFired(aInstance);
160 }
161
162 #if OPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE
163 if (sAlarmMicro.isRunning && sAlarmNow >= sAlarmMicro.fire)
164 {
165 sAlarmMicro.isRunning = false;
166 otPlatAlarmMicroFired(aInstance);
167 }
168 #endif
169 }
170 }
171
FuzzerPlatformResetWasRequested(void)172 bool FuzzerPlatformResetWasRequested(void) { return sResetWasRequested; }
173
174 extern "C" {
175
otPlatAlarmMilliGetNow(void)176 uint32_t otPlatAlarmMilliGetNow(void) { return sAlarmNow / 1000; }
177
otPlatAlarmMilliStartAt(otInstance * aInstance,uint32_t aT0,uint32_t aDt)178 void otPlatAlarmMilliStartAt(otInstance *aInstance, uint32_t aT0, uint32_t aDt)
179 {
180 OT_UNUSED_VARIABLE(aInstance);
181
182 sAlarmMilli.fire = (aT0 + aDt) * 1000;
183 sAlarmMilli.isRunning = true;
184 }
185
otPlatAlarmMilliStop(otInstance * aInstance)186 void otPlatAlarmMilliStop(otInstance *aInstance)
187 {
188 OT_UNUSED_VARIABLE(aInstance);
189
190 sAlarmMilli.isRunning = false;
191 }
192
otPlatAlarmMicroGetNow(void)193 uint32_t otPlatAlarmMicroGetNow(void) { return sAlarmNow; }
194
otPlatAlarmMicroStartAt(otInstance * aInstance,uint32_t aT0,uint32_t aDt)195 void otPlatAlarmMicroStartAt(otInstance *aInstance, uint32_t aT0, uint32_t aDt)
196 {
197 OT_UNUSED_VARIABLE(aInstance);
198
199 sAlarmMicro.fire = aT0 + aDt;
200 sAlarmMicro.isRunning = true;
201 }
202
otPlatAlarmMicroStop(otInstance * aInstance)203 void otPlatAlarmMicroStop(otInstance *aInstance)
204 {
205 OT_UNUSED_VARIABLE(aInstance);
206
207 sAlarmMicro.isRunning = false;
208 }
209
otDiagIsEnabled(otInstance * aInstance)210 bool otDiagIsEnabled(otInstance *aInstance)
211 {
212 OT_UNUSED_VARIABLE(aInstance);
213
214 return false;
215 }
216
otDiagProcessCmd(otInstance * aInstance,uint8_t aArgsLength,char * aArgs[],char * aOutput,size_t aOutputMaxLen)217 otError otDiagProcessCmd(otInstance *aInstance, uint8_t aArgsLength, char *aArgs[], char *aOutput, size_t aOutputMaxLen)
218 {
219 OT_UNUSED_VARIABLE(aInstance);
220 OT_UNUSED_VARIABLE(aArgsLength);
221 OT_UNUSED_VARIABLE(aArgs);
222 OT_UNUSED_VARIABLE(aOutput);
223 OT_UNUSED_VARIABLE(aOutputMaxLen);
224
225 return OT_ERROR_NOT_IMPLEMENTED;
226 }
227
otDiagProcessCmdLine(otInstance * aInstance,const char * aString,char * aOutput,size_t aOutputMaxLen)228 otError otDiagProcessCmdLine(otInstance *aInstance, const char *aString, char *aOutput, size_t aOutputMaxLen)
229 {
230 OT_UNUSED_VARIABLE(aInstance);
231 OT_UNUSED_VARIABLE(aString);
232 OT_UNUSED_VARIABLE(aOutput);
233 OT_UNUSED_VARIABLE(aOutputMaxLen);
234
235 return OT_ERROR_NOT_IMPLEMENTED;
236 }
237
otPlatReset(otInstance * aInstance)238 void otPlatReset(otInstance *aInstance)
239 {
240 OT_UNUSED_VARIABLE(aInstance);
241
242 sResetWasRequested = true;
243 }
244
otPlatGetResetReason(otInstance * aInstance)245 otPlatResetReason otPlatGetResetReason(otInstance *aInstance)
246 {
247 OT_UNUSED_VARIABLE(aInstance);
248 return OT_PLAT_RESET_REASON_POWER_ON;
249 }
250
otPlatLog(otLogLevel aLogLevel,otLogRegion aLogRegion,const char * aFormat,...)251 OT_TOOL_WEAK void otPlatLog(otLogLevel aLogLevel, otLogRegion aLogRegion, const char *aFormat, ...)
252 {
253 OT_UNUSED_VARIABLE(aLogLevel);
254 OT_UNUSED_VARIABLE(aLogRegion);
255 OT_UNUSED_VARIABLE(aFormat);
256 }
257
otPlatWakeHost(void)258 void otPlatWakeHost(void) {}
259
otPlatMultipanGetActiveInstance(otInstance **)260 otError otPlatMultipanGetActiveInstance(otInstance **) { return OT_ERROR_NOT_IMPLEMENTED; }
261
otPlatMultipanSetActiveInstance(otInstance *,bool)262 otError otPlatMultipanSetActiveInstance(otInstance *, bool) { return OT_ERROR_NOT_IMPLEMENTED; }
263
otPlatRadioGetIeeeEui64(otInstance * aInstance,uint8_t * aIeeeEui64)264 void otPlatRadioGetIeeeEui64(otInstance *aInstance, uint8_t *aIeeeEui64)
265 {
266 OT_UNUSED_VARIABLE(aInstance);
267 OT_UNUSED_VARIABLE(aIeeeEui64);
268 }
269
otPlatRadioSetPanId(otInstance * aInstance,uint16_t aPanId)270 void otPlatRadioSetPanId(otInstance *aInstance, uint16_t aPanId)
271 {
272 OT_UNUSED_VARIABLE(aInstance);
273 OT_UNUSED_VARIABLE(aPanId);
274 }
275
otPlatRadioSetExtendedAddress(otInstance * aInstance,const otExtAddress * aExtAddr)276 void otPlatRadioSetExtendedAddress(otInstance *aInstance, const otExtAddress *aExtAddr)
277 {
278 OT_UNUSED_VARIABLE(aInstance);
279 OT_UNUSED_VARIABLE(aExtAddr);
280 }
281
otPlatRadioSetShortAddress(otInstance * aInstance,uint16_t aShortAddress)282 void otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t aShortAddress)
283 {
284 OT_UNUSED_VARIABLE(aInstance);
285 OT_UNUSED_VARIABLE(aShortAddress);
286 }
287
otPlatRadioSetPromiscuous(otInstance * aInstance,bool aEnabled)288 void otPlatRadioSetPromiscuous(otInstance *aInstance, bool aEnabled)
289 {
290 OT_UNUSED_VARIABLE(aInstance);
291 OT_UNUSED_VARIABLE(aEnabled);
292 }
293
otPlatRadioSetRxOnWhenIdle(otInstance * aInstance,bool aEnabled)294 void otPlatRadioSetRxOnWhenIdle(otInstance *aInstance, bool aEnabled)
295 {
296 OT_UNUSED_VARIABLE(aInstance);
297 OT_UNUSED_VARIABLE(aEnabled);
298 }
299
otPlatRadioIsEnabled(otInstance * aInstance)300 bool otPlatRadioIsEnabled(otInstance *aInstance)
301 {
302 OT_UNUSED_VARIABLE(aInstance);
303 return true;
304 }
305
otPlatRadioEnable(otInstance * aInstance)306 otError otPlatRadioEnable(otInstance *aInstance)
307 {
308 OT_UNUSED_VARIABLE(aInstance);
309
310 sRadioState = OT_RADIO_STATE_SLEEP;
311
312 return OT_ERROR_NONE;
313 }
314
otPlatRadioDisable(otInstance * aInstance)315 otError otPlatRadioDisable(otInstance *aInstance)
316 {
317 OT_UNUSED_VARIABLE(aInstance);
318
319 sRadioState = OT_RADIO_STATE_DISABLED;
320
321 return OT_ERROR_NONE;
322 }
323
otPlatRadioSleep(otInstance * aInstance)324 otError otPlatRadioSleep(otInstance *aInstance)
325 {
326 OT_UNUSED_VARIABLE(aInstance);
327
328 sRadioState = OT_RADIO_STATE_SLEEP;
329
330 return OT_ERROR_NONE;
331 }
332
otPlatRadioReceive(otInstance * aInstance,uint8_t aChannel)333 otError otPlatRadioReceive(otInstance *aInstance, uint8_t aChannel)
334 {
335 OT_UNUSED_VARIABLE(aInstance);
336 OT_UNUSED_VARIABLE(aChannel);
337
338 sRadioState = OT_RADIO_STATE_RECEIVE;
339
340 return OT_ERROR_NONE;
341 }
342
otPlatRadioTransmit(otInstance * aInstance,otRadioFrame * aFrame)343 otError otPlatRadioTransmit(otInstance *aInstance, otRadioFrame *aFrame)
344 {
345 sRadioState = OT_RADIO_STATE_TRANSMIT;
346
347 otPlatRadioTxStarted(aInstance, aFrame);
348
349 return OT_ERROR_NONE;
350 }
351
otPlatRadioGetTransmitPower(otInstance * aInstance,int8_t * aPower)352 otError otPlatRadioGetTransmitPower(otInstance *aInstance, int8_t *aPower)
353 {
354 OT_UNUSED_VARIABLE(aInstance);
355 OT_UNUSED_VARIABLE(aPower);
356 return OT_ERROR_NONE;
357 }
358
otPlatRadioGetTransmitBuffer(otInstance * aInstance)359 otRadioFrame *otPlatRadioGetTransmitBuffer(otInstance *aInstance)
360 {
361 OT_UNUSED_VARIABLE(aInstance);
362 return &sRadioTransmitFrame;
363 }
364
otPlatRadioGetRssi(otInstance * aInstance)365 int8_t otPlatRadioGetRssi(otInstance *aInstance)
366 {
367 OT_UNUSED_VARIABLE(aInstance);
368 return 0;
369 }
370
otPlatRadioGetCaps(otInstance * aInstance)371 otRadioCaps otPlatRadioGetCaps(otInstance *aInstance)
372 {
373 OT_UNUSED_VARIABLE(aInstance);
374 return OT_RADIO_CAPS_NONE;
375 }
376
otPlatRadioGetPromiscuous(otInstance * aInstance)377 bool otPlatRadioGetPromiscuous(otInstance *aInstance)
378 {
379 OT_UNUSED_VARIABLE(aInstance);
380 return false;
381 }
382
otPlatRadioEnableSrcMatch(otInstance * aInstance,bool aEnable)383 void otPlatRadioEnableSrcMatch(otInstance *aInstance, bool aEnable)
384 {
385 OT_UNUSED_VARIABLE(aInstance);
386 OT_UNUSED_VARIABLE(aEnable);
387 }
388
otPlatRadioAddSrcMatchShortEntry(otInstance * aInstance,uint16_t aShortAddress)389 otError otPlatRadioAddSrcMatchShortEntry(otInstance *aInstance, uint16_t aShortAddress)
390 {
391 OT_UNUSED_VARIABLE(aInstance);
392 OT_UNUSED_VARIABLE(aShortAddress);
393 return OT_ERROR_NONE;
394 }
395
otPlatRadioAddSrcMatchExtEntry(otInstance * aInstance,const otExtAddress * aExtAddress)396 otError otPlatRadioAddSrcMatchExtEntry(otInstance *aInstance, const otExtAddress *aExtAddress)
397 {
398 OT_UNUSED_VARIABLE(aInstance);
399 OT_UNUSED_VARIABLE(aExtAddress);
400 return OT_ERROR_NONE;
401 }
402
otPlatRadioClearSrcMatchShortEntry(otInstance * aInstance,uint16_t aShortAddress)403 otError otPlatRadioClearSrcMatchShortEntry(otInstance *aInstance, uint16_t aShortAddress)
404 {
405 OT_UNUSED_VARIABLE(aInstance);
406 OT_UNUSED_VARIABLE(aShortAddress);
407 return OT_ERROR_NONE;
408 }
409
otPlatRadioClearSrcMatchExtEntry(otInstance * aInstance,const otExtAddress * aExtAddress)410 otError otPlatRadioClearSrcMatchExtEntry(otInstance *aInstance, const otExtAddress *aExtAddress)
411 {
412 OT_UNUSED_VARIABLE(aInstance);
413 OT_UNUSED_VARIABLE(aExtAddress);
414 return OT_ERROR_NONE;
415 }
416
otPlatRadioClearSrcMatchShortEntries(otInstance * aInstance)417 void otPlatRadioClearSrcMatchShortEntries(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
418
otPlatRadioClearSrcMatchExtEntries(otInstance * aInstance)419 void otPlatRadioClearSrcMatchExtEntries(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
420
otPlatRadioEnergyScan(otInstance * aInstance,uint8_t aScanChannel,uint16_t aScanDuration)421 otError otPlatRadioEnergyScan(otInstance *aInstance, uint8_t aScanChannel, uint16_t aScanDuration)
422 {
423 OT_UNUSED_VARIABLE(aInstance);
424 OT_UNUSED_VARIABLE(aScanChannel);
425 OT_UNUSED_VARIABLE(aScanDuration);
426 return OT_ERROR_NOT_IMPLEMENTED;
427 }
428
otPlatRadioSetTransmitPower(otInstance * aInstance,int8_t aPower)429 otError otPlatRadioSetTransmitPower(otInstance *aInstance, int8_t aPower)
430 {
431 OT_UNUSED_VARIABLE(aInstance);
432 OT_UNUSED_VARIABLE(aPower);
433 return OT_ERROR_NOT_IMPLEMENTED;
434 }
435
otPlatRadioGetCcaEnergyDetectThreshold(otInstance * aInstance,int8_t * aThreshold)436 otError otPlatRadioGetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t *aThreshold)
437 {
438 OT_UNUSED_VARIABLE(aInstance);
439 OT_UNUSED_VARIABLE(aThreshold);
440 return OT_ERROR_NOT_IMPLEMENTED;
441 }
442
otPlatRadioSetCcaEnergyDetectThreshold(otInstance * aInstance,int8_t aThreshold)443 otError otPlatRadioSetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t aThreshold)
444 {
445 OT_UNUSED_VARIABLE(aInstance);
446 OT_UNUSED_VARIABLE(aThreshold);
447 return OT_ERROR_NOT_IMPLEMENTED;
448 }
449
otPlatRadioGetReceiveSensitivity(otInstance * aInstance)450 int8_t otPlatRadioGetReceiveSensitivity(otInstance *aInstance)
451 {
452 OT_UNUSED_VARIABLE(aInstance);
453 return 0;
454 }
455
otPlatEntropyGet(uint8_t * aOutput,uint16_t aOutputLength)456 otError otPlatEntropyGet(uint8_t *aOutput, uint16_t aOutputLength)
457 {
458 for (uint16_t length = 0; length < aOutputLength; length++)
459 {
460 aOutput[length] = (uint8_t)rand();
461 }
462
463 return OT_ERROR_NONE;
464 }
465
otPlatSettingsInit(otInstance * aInstance,const uint16_t * aSensitiveKeys,uint16_t aSensitiveKeysLength)466 void otPlatSettingsInit(otInstance *aInstance, const uint16_t *aSensitiveKeys, uint16_t aSensitiveKeysLength)
467 {
468 OT_UNUSED_VARIABLE(aInstance);
469 OT_UNUSED_VARIABLE(aSensitiveKeys);
470 OT_UNUSED_VARIABLE(aSensitiveKeysLength);
471 }
472
otPlatSettingsDeinit(otInstance * aInstance)473 void otPlatSettingsDeinit(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
474
otPlatSettingsGet(otInstance * aInstance,uint16_t aKey,int aIndex,uint8_t * aValue,uint16_t * aValueLength)475 otError otPlatSettingsGet(otInstance *aInstance, uint16_t aKey, int aIndex, uint8_t *aValue, uint16_t *aValueLength)
476 {
477 OT_UNUSED_VARIABLE(aInstance);
478 OT_UNUSED_VARIABLE(aKey);
479 OT_UNUSED_VARIABLE(aIndex);
480 OT_UNUSED_VARIABLE(aValue);
481 OT_UNUSED_VARIABLE(aValueLength);
482 return OT_ERROR_NOT_FOUND;
483 }
484
otPlatSettingsSet(otInstance * aInstance,uint16_t aKey,const uint8_t * aValue,uint16_t aValueLength)485 otError otPlatSettingsSet(otInstance *aInstance, uint16_t aKey, const uint8_t *aValue, uint16_t aValueLength)
486 {
487 OT_UNUSED_VARIABLE(aInstance);
488 OT_UNUSED_VARIABLE(aKey);
489 OT_UNUSED_VARIABLE(aValue);
490 OT_UNUSED_VARIABLE(aValueLength);
491 return OT_ERROR_NONE;
492 }
493
otPlatSettingsAdd(otInstance * aInstance,uint16_t aKey,const uint8_t * aValue,uint16_t aValueLength)494 otError otPlatSettingsAdd(otInstance *aInstance, uint16_t aKey, const uint8_t *aValue, uint16_t aValueLength)
495 {
496 OT_UNUSED_VARIABLE(aInstance);
497 OT_UNUSED_VARIABLE(aKey);
498 OT_UNUSED_VARIABLE(aValue);
499 OT_UNUSED_VARIABLE(aValueLength);
500 return OT_ERROR_NONE;
501 }
502
otPlatSettingsDelete(otInstance * aInstance,uint16_t aKey,int aIndex)503 otError otPlatSettingsDelete(otInstance *aInstance, uint16_t aKey, int aIndex)
504 {
505 OT_UNUSED_VARIABLE(aInstance);
506 OT_UNUSED_VARIABLE(aKey);
507 OT_UNUSED_VARIABLE(aIndex);
508 return OT_ERROR_NONE;
509 }
510
otPlatSettingsWipe(otInstance * aInstance)511 void otPlatSettingsWipe(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
512
otPlatDiagSetOutputCallback(otInstance * aInstance,otPlatDiagOutputCallback aCallback,void * aContext)513 void otPlatDiagSetOutputCallback(otInstance *aInstance, otPlatDiagOutputCallback aCallback, void *aContext)
514 {
515 OT_UNUSED_VARIABLE(aInstance);
516 OT_UNUSED_VARIABLE(aCallback);
517 OT_UNUSED_VARIABLE(aContext);
518 }
519
otPlatDiagProcess(otInstance * aInstance,uint8_t aArgsLength,char * aArgs[])520 otError otPlatDiagProcess(otInstance *aInstance, uint8_t aArgsLength, char *aArgs[])
521 {
522 OT_UNUSED_VARIABLE(aInstance);
523 OT_UNUSED_VARIABLE(aArgsLength);
524 OT_UNUSED_VARIABLE(aArgs);
525
526 return OT_ERROR_INVALID_COMMAND;
527 }
528
otPlatDiagModeSet(bool aMode)529 void otPlatDiagModeSet(bool aMode) { OT_UNUSED_VARIABLE(aMode); }
530
otPlatDiagModeGet(void)531 bool otPlatDiagModeGet(void) { return false; }
532
otPlatDiagChannelSet(uint8_t aChannel)533 void otPlatDiagChannelSet(uint8_t aChannel) { OT_UNUSED_VARIABLE(aChannel); }
534
otPlatDiagTxPowerSet(int8_t aTxPower)535 void otPlatDiagTxPowerSet(int8_t aTxPower) { OT_UNUSED_VARIABLE(aTxPower); }
536
otPlatDiagRadioReceived(otInstance * aInstance,otRadioFrame * aFrame,otError aError)537 void otPlatDiagRadioReceived(otInstance *aInstance, otRadioFrame *aFrame, otError aError)
538 {
539 OT_UNUSED_VARIABLE(aInstance);
540 OT_UNUSED_VARIABLE(aFrame);
541 OT_UNUSED_VARIABLE(aError);
542 }
543
otPlatDiagAlarmCallback(otInstance * aInstance)544 void otPlatDiagAlarmCallback(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
545
otPlatDnssdGetState(otInstance * aInstance)546 otPlatDnssdState otPlatDnssdGetState(otInstance *aInstance)
547 {
548 OT_UNUSED_VARIABLE(aInstance);
549
550 return OT_PLAT_DNSSD_STOPPED;
551 }
552
otPlatDnssdRegisterService(otInstance * aInstance,const otPlatDnssdService * aService,otPlatDnssdRequestId aRequestId,otPlatDnssdRegisterCallback aCallback)553 void otPlatDnssdRegisterService(otInstance *aInstance,
554 const otPlatDnssdService *aService,
555 otPlatDnssdRequestId aRequestId,
556 otPlatDnssdRegisterCallback aCallback)
557 {
558 OT_UNUSED_VARIABLE(aInstance);
559 OT_UNUSED_VARIABLE(aService);
560 OT_UNUSED_VARIABLE(aRequestId);
561 OT_UNUSED_VARIABLE(aCallback);
562 }
563
otPlatDnssdUnregisterService(otInstance * aInstance,const otPlatDnssdService * aService,otPlatDnssdRequestId aRequestId,otPlatDnssdRegisterCallback aCallback)564 void otPlatDnssdUnregisterService(otInstance *aInstance,
565 const otPlatDnssdService *aService,
566 otPlatDnssdRequestId aRequestId,
567 otPlatDnssdRegisterCallback aCallback)
568 {
569 OT_UNUSED_VARIABLE(aInstance);
570 OT_UNUSED_VARIABLE(aService);
571 OT_UNUSED_VARIABLE(aRequestId);
572 OT_UNUSED_VARIABLE(aCallback);
573 }
574
otPlatDnssdRegisterHost(otInstance * aInstance,const otPlatDnssdHost * aHost,otPlatDnssdRequestId aRequestId,otPlatDnssdRegisterCallback aCallback)575 void otPlatDnssdRegisterHost(otInstance *aInstance,
576 const otPlatDnssdHost *aHost,
577 otPlatDnssdRequestId aRequestId,
578 otPlatDnssdRegisterCallback aCallback)
579 {
580 OT_UNUSED_VARIABLE(aInstance);
581 OT_UNUSED_VARIABLE(aHost);
582 OT_UNUSED_VARIABLE(aRequestId);
583 OT_UNUSED_VARIABLE(aCallback);
584 }
585
otPlatDnssdUnregisterHost(otInstance * aInstance,const otPlatDnssdHost * aHost,otPlatDnssdRequestId aRequestId,otPlatDnssdRegisterCallback aCallback)586 void otPlatDnssdUnregisterHost(otInstance *aInstance,
587 const otPlatDnssdHost *aHost,
588 otPlatDnssdRequestId aRequestId,
589 otPlatDnssdRegisterCallback aCallback)
590 {
591 OT_UNUSED_VARIABLE(aInstance);
592 OT_UNUSED_VARIABLE(aHost);
593 OT_UNUSED_VARIABLE(aRequestId);
594 OT_UNUSED_VARIABLE(aCallback);
595 }
596
otPlatDnssdRegisterKey(otInstance * aInstance,const otPlatDnssdKey * aKey,otPlatDnssdRequestId aRequestId,otPlatDnssdRegisterCallback aCallback)597 void otPlatDnssdRegisterKey(otInstance *aInstance,
598 const otPlatDnssdKey *aKey,
599 otPlatDnssdRequestId aRequestId,
600 otPlatDnssdRegisterCallback aCallback)
601 {
602 OT_UNUSED_VARIABLE(aInstance);
603 OT_UNUSED_VARIABLE(aKey);
604 OT_UNUSED_VARIABLE(aRequestId);
605 OT_UNUSED_VARIABLE(aCallback);
606 }
607
otPlatDnssdUnregisterKey(otInstance * aInstance,const otPlatDnssdKey * aKey,otPlatDnssdRequestId aRequestId,otPlatDnssdRegisterCallback aCallback)608 void otPlatDnssdUnregisterKey(otInstance *aInstance,
609 const otPlatDnssdKey *aKey,
610 otPlatDnssdRequestId aRequestId,
611 otPlatDnssdRegisterCallback aCallback)
612 {
613 OT_UNUSED_VARIABLE(aInstance);
614 OT_UNUSED_VARIABLE(aKey);
615 OT_UNUSED_VARIABLE(aRequestId);
616 OT_UNUSED_VARIABLE(aCallback);
617 }
618
otPlatMdnsSetListeningEnabled(otInstance * aInstance,bool aEnable,uint32_t aInfraIfIndex)619 otError otPlatMdnsSetListeningEnabled(otInstance *aInstance, bool aEnable, uint32_t aInfraIfIndex)
620 {
621 OT_UNUSED_VARIABLE(aInstance);
622 OT_UNUSED_VARIABLE(aEnable);
623 OT_UNUSED_VARIABLE(aInfraIfIndex);
624
625 return OT_ERROR_NOT_IMPLEMENTED;
626 }
627
otPlatMdnsSendMulticast(otInstance * aInstance,otMessage * aMessage,uint32_t aInfraIfIndex)628 void otPlatMdnsSendMulticast(otInstance *aInstance, otMessage *aMessage, uint32_t aInfraIfIndex)
629 {
630 OT_UNUSED_VARIABLE(aInstance);
631 OT_UNUSED_VARIABLE(aMessage);
632 OT_UNUSED_VARIABLE(aInfraIfIndex);
633 }
634
otPlatMdnsSendUnicast(otInstance * aInstance,otMessage * aMessage,const otPlatMdnsAddressInfo * aAddress)635 void otPlatMdnsSendUnicast(otInstance *aInstance, otMessage *aMessage, const otPlatMdnsAddressInfo *aAddress)
636 {
637 OT_UNUSED_VARIABLE(aInstance);
638 OT_UNUSED_VARIABLE(aMessage);
639 OT_UNUSED_VARIABLE(aAddress);
640 }
641
otPlatInfraIfHasAddress(uint32_t aInfraIfIndex,const otIp6Address * aAddress)642 bool otPlatInfraIfHasAddress(uint32_t aInfraIfIndex, const otIp6Address *aAddress)
643 {
644 OT_UNUSED_VARIABLE(aInfraIfIndex);
645 OT_UNUSED_VARIABLE(aAddress);
646
647 return false;
648 }
649
otPlatInfraIfSendIcmp6Nd(uint32_t aInfraIfIndex,const otIp6Address * aDestAddress,const uint8_t * aBuffer,uint16_t aBufferLength)650 otError otPlatInfraIfSendIcmp6Nd(uint32_t aInfraIfIndex,
651 const otIp6Address *aDestAddress,
652 const uint8_t *aBuffer,
653 uint16_t aBufferLength)
654 {
655 OT_UNUSED_VARIABLE(aInfraIfIndex);
656 OT_UNUSED_VARIABLE(aDestAddress);
657 OT_UNUSED_VARIABLE(aBuffer);
658 OT_UNUSED_VARIABLE(aBufferLength);
659
660 return OT_ERROR_FAILED;
661 }
662
otPlatInfraIfDiscoverNat64Prefix(uint32_t aInfraIfIndex)663 otError otPlatInfraIfDiscoverNat64Prefix(uint32_t aInfraIfIndex)
664 {
665 OT_UNUSED_VARIABLE(aInfraIfIndex);
666
667 return OT_ERROR_FAILED;
668 }
669
670 } // extern "C"
671