• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/entropy.h>
39 #include <openthread/platform/logging.h>
40 #include <openthread/platform/misc.h>
41 #include <openthread/platform/multipan.h>
42 #include <openthread/platform/radio.h>
43 #include <openthread/platform/settings.h>
44 
45 #include "mac/mac_frame.hpp"
46 
47 using namespace ot;
48 
49 typedef struct AlarmState
50 {
51     uint32_t fire;
52     bool     isRunning;
53 } AlarmState;
54 
55 enum
56 {
57     IEEE802154_ACK_LENGTH = 5,
58 
59     IEEE802154_FRAME_TYPE_ACK = 2 << 0,
60 };
61 
62 static uint32_t     sAlarmNow;
63 static AlarmState   sAlarmMilli;
64 static AlarmState   sAlarmMicro;
65 static uint32_t     sRandomState = 1;
66 static uint8_t      sRadioTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE];
67 static otRadioFrame sRadioTransmitFrame;
68 static uint8_t      sRadioAckPsdu[OT_RADIO_FRAME_MAX_SIZE];
69 static otRadioFrame sRadioAckFrame;
70 static bool         sResetWasRequested = false;
71 static otRadioState sRadioState        = OT_RADIO_STATE_DISABLED;
72 
otMacFrameIsAckRequested(const otRadioFrame * aFrame)73 bool otMacFrameIsAckRequested(const otRadioFrame *aFrame)
74 {
75     return static_cast<const Mac::Frame *>(aFrame)->GetAckRequest();
76 }
77 
otMacFrameGetSequence(const otRadioFrame * aFrame)78 uint8_t otMacFrameGetSequence(const otRadioFrame *aFrame)
79 {
80     return static_cast<const Mac::Frame *>(aFrame)->GetSequence();
81 }
82 
FuzzerPlatformInit(void)83 void FuzzerPlatformInit(void)
84 {
85     sRandomState = 1;
86     sAlarmNow    = 0;
87     memset(&sAlarmMilli, 0, sizeof(sAlarmMilli));
88     memset(&sAlarmMicro, 0, sizeof(sAlarmMicro));
89 
90     sRadioTransmitFrame.mPsdu = sRadioTransmitPsdu;
91     sRadioAckFrame.mPsdu      = sRadioAckPsdu;
92 }
93 
FuzzerPlatformProcess(otInstance * aInstance)94 void FuzzerPlatformProcess(otInstance *aInstance)
95 {
96     if (sRadioState == OT_RADIO_STATE_TRANSMIT)
97     {
98         sRadioState = OT_RADIO_STATE_RECEIVE;
99 
100         if (otMacFrameIsAckRequested(&sRadioTransmitFrame))
101         {
102             sRadioAckFrame.mLength  = IEEE802154_ACK_LENGTH;
103             sRadioAckFrame.mPsdu[0] = IEEE802154_FRAME_TYPE_ACK;
104             sRadioAckFrame.mPsdu[1] = 0;
105             sRadioAckFrame.mPsdu[2] = otMacFrameGetSequence(&sRadioTransmitFrame);
106             sRadioAckFrame.mChannel = sRadioTransmitFrame.mChannel;
107 
108             otPlatRadioTxDone(aInstance, &sRadioTransmitFrame, &sRadioAckFrame, OT_ERROR_NONE);
109         }
110         else
111         {
112             otPlatRadioTxDone(aInstance, &sRadioTransmitFrame, nullptr, OT_ERROR_NONE);
113         }
114     }
115 
116     if (sAlarmMilli.isRunning || sAlarmMicro.isRunning)
117     {
118         uint32_t fire = UINT32_MAX;
119 
120         if (sAlarmMilli.isRunning && fire > sAlarmMilli.fire)
121         {
122             fire = sAlarmMilli.fire;
123         }
124 
125         if (sAlarmMicro.isRunning && fire > sAlarmMicro.fire)
126         {
127             fire = sAlarmMicro.fire;
128         }
129 
130         sAlarmNow = fire;
131 
132         if (sAlarmMilli.isRunning && sAlarmNow >= sAlarmMilli.fire)
133         {
134             sAlarmMilli.isRunning = false;
135             otPlatAlarmMilliFired(aInstance);
136         }
137 
138 #if OPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE
139         if (sAlarmMicro.isRunning && sAlarmNow >= sAlarmMicro.fire)
140         {
141             sAlarmMicro.isRunning = false;
142             otPlatAlarmMicroFired(aInstance);
143         }
144 #endif
145     }
146 }
147 
FuzzerPlatformResetWasRequested(void)148 bool FuzzerPlatformResetWasRequested(void) { return sResetWasRequested; }
149 
otPlatAlarmMilliGetNow(void)150 uint32_t otPlatAlarmMilliGetNow(void) { return sAlarmNow / 1000; }
151 
otPlatAlarmMilliStartAt(otInstance * aInstance,uint32_t aT0,uint32_t aDt)152 void otPlatAlarmMilliStartAt(otInstance *aInstance, uint32_t aT0, uint32_t aDt)
153 {
154     OT_UNUSED_VARIABLE(aInstance);
155 
156     sAlarmMilli.fire      = (aT0 + aDt) * 1000;
157     sAlarmMilli.isRunning = true;
158 }
159 
otPlatAlarmMilliStop(otInstance * aInstance)160 void otPlatAlarmMilliStop(otInstance *aInstance)
161 {
162     OT_UNUSED_VARIABLE(aInstance);
163 
164     sAlarmMilli.isRunning = false;
165 }
166 
otPlatAlarmMicroGetNow(void)167 uint32_t otPlatAlarmMicroGetNow(void) { return sAlarmNow; }
168 
otPlatAlarmMicroStartAt(otInstance * aInstance,uint32_t aT0,uint32_t aDt)169 void otPlatAlarmMicroStartAt(otInstance *aInstance, uint32_t aT0, uint32_t aDt)
170 {
171     OT_UNUSED_VARIABLE(aInstance);
172 
173     sAlarmMicro.fire      = aT0 + aDt;
174     sAlarmMicro.isRunning = true;
175 }
176 
otPlatAlarmMicroStop(otInstance * aInstance)177 void otPlatAlarmMicroStop(otInstance *aInstance)
178 {
179     OT_UNUSED_VARIABLE(aInstance);
180 
181     sAlarmMicro.isRunning = false;
182 }
183 
otDiagIsEnabled(otInstance * aInstance)184 bool otDiagIsEnabled(otInstance *aInstance)
185 {
186     OT_UNUSED_VARIABLE(aInstance);
187 
188     return false;
189 }
190 
otDiagProcessCmd(otInstance * aInstance,uint8_t aArgsLength,char * aArgs[],char * aOutput,size_t aOutputMaxLen)191 otError otDiagProcessCmd(otInstance *aInstance, uint8_t aArgsLength, char *aArgs[], char *aOutput, size_t aOutputMaxLen)
192 {
193     OT_UNUSED_VARIABLE(aInstance);
194     OT_UNUSED_VARIABLE(aArgsLength);
195     OT_UNUSED_VARIABLE(aArgs);
196     OT_UNUSED_VARIABLE(aOutput);
197     OT_UNUSED_VARIABLE(aOutputMaxLen);
198 
199     return OT_ERROR_NOT_IMPLEMENTED;
200 }
201 
otDiagProcessCmdLine(otInstance * aInstance,const char * aString,char * aOutput,size_t aOutputMaxLen)202 otError otDiagProcessCmdLine(otInstance *aInstance, const char *aString, char *aOutput, size_t aOutputMaxLen)
203 {
204     OT_UNUSED_VARIABLE(aInstance);
205     OT_UNUSED_VARIABLE(aString);
206     OT_UNUSED_VARIABLE(aOutput);
207     OT_UNUSED_VARIABLE(aOutputMaxLen);
208 
209     return OT_ERROR_NOT_IMPLEMENTED;
210 }
211 
otPlatReset(otInstance * aInstance)212 void otPlatReset(otInstance *aInstance)
213 {
214     OT_UNUSED_VARIABLE(aInstance);
215 
216     sResetWasRequested = true;
217 }
218 
otPlatGetResetReason(otInstance * aInstance)219 otPlatResetReason otPlatGetResetReason(otInstance *aInstance)
220 {
221     OT_UNUSED_VARIABLE(aInstance);
222     return OT_PLAT_RESET_REASON_POWER_ON;
223 }
224 
otPlatLog(otLogLevel aLogLevel,otLogRegion aLogRegion,const char * aFormat,...)225 OT_TOOL_WEAK void otPlatLog(otLogLevel aLogLevel, otLogRegion aLogRegion, const char *aFormat, ...)
226 {
227     OT_UNUSED_VARIABLE(aLogLevel);
228     OT_UNUSED_VARIABLE(aLogRegion);
229     OT_UNUSED_VARIABLE(aFormat);
230 }
231 
otPlatWakeHost(void)232 void otPlatWakeHost(void) {}
233 
otPlatMultipanGetActiveInstance(otInstance **)234 otError otPlatMultipanGetActiveInstance(otInstance **) { return OT_ERROR_NOT_IMPLEMENTED; }
235 
otPlatMultipanSetActiveInstance(otInstance *,bool)236 otError otPlatMultipanSetActiveInstance(otInstance *, bool) { return OT_ERROR_NOT_IMPLEMENTED; }
237 
otPlatRadioGetIeeeEui64(otInstance * aInstance,uint8_t * aIeeeEui64)238 void otPlatRadioGetIeeeEui64(otInstance *aInstance, uint8_t *aIeeeEui64)
239 {
240     OT_UNUSED_VARIABLE(aInstance);
241     OT_UNUSED_VARIABLE(aIeeeEui64);
242 }
243 
otPlatRadioSetPanId(otInstance * aInstance,uint16_t aPanId)244 void otPlatRadioSetPanId(otInstance *aInstance, uint16_t aPanId)
245 {
246     OT_UNUSED_VARIABLE(aInstance);
247     OT_UNUSED_VARIABLE(aPanId);
248 }
249 
otPlatRadioSetExtendedAddress(otInstance * aInstance,const otExtAddress * aExtAddr)250 void otPlatRadioSetExtendedAddress(otInstance *aInstance, const otExtAddress *aExtAddr)
251 {
252     OT_UNUSED_VARIABLE(aInstance);
253     OT_UNUSED_VARIABLE(aExtAddr);
254 }
255 
otPlatRadioSetShortAddress(otInstance * aInstance,uint16_t aShortAddress)256 void otPlatRadioSetShortAddress(otInstance *aInstance, uint16_t aShortAddress)
257 {
258     OT_UNUSED_VARIABLE(aInstance);
259     OT_UNUSED_VARIABLE(aShortAddress);
260 }
261 
otPlatRadioSetPromiscuous(otInstance * aInstance,bool aEnabled)262 void otPlatRadioSetPromiscuous(otInstance *aInstance, bool aEnabled)
263 {
264     OT_UNUSED_VARIABLE(aInstance);
265     OT_UNUSED_VARIABLE(aEnabled);
266 }
267 
otPlatRadioSetRxOnWhenIdle(otInstance * aInstance,bool aEnabled)268 void otPlatRadioSetRxOnWhenIdle(otInstance *aInstance, bool aEnabled)
269 {
270     OT_UNUSED_VARIABLE(aInstance);
271     OT_UNUSED_VARIABLE(aEnabled);
272 }
273 
otPlatRadioIsEnabled(otInstance * aInstance)274 bool otPlatRadioIsEnabled(otInstance *aInstance)
275 {
276     OT_UNUSED_VARIABLE(aInstance);
277     return true;
278 }
279 
otPlatRadioEnable(otInstance * aInstance)280 otError otPlatRadioEnable(otInstance *aInstance)
281 {
282     OT_UNUSED_VARIABLE(aInstance);
283 
284     sRadioState = OT_RADIO_STATE_SLEEP;
285 
286     return OT_ERROR_NONE;
287 }
288 
otPlatRadioDisable(otInstance * aInstance)289 otError otPlatRadioDisable(otInstance *aInstance)
290 {
291     OT_UNUSED_VARIABLE(aInstance);
292 
293     sRadioState = OT_RADIO_STATE_DISABLED;
294 
295     return OT_ERROR_NONE;
296 }
297 
otPlatRadioSleep(otInstance * aInstance)298 otError otPlatRadioSleep(otInstance *aInstance)
299 {
300     OT_UNUSED_VARIABLE(aInstance);
301 
302     sRadioState = OT_RADIO_STATE_SLEEP;
303 
304     return OT_ERROR_NONE;
305 }
306 
otPlatRadioReceive(otInstance * aInstance,uint8_t aChannel)307 otError otPlatRadioReceive(otInstance *aInstance, uint8_t aChannel)
308 {
309     OT_UNUSED_VARIABLE(aInstance);
310     OT_UNUSED_VARIABLE(aChannel);
311 
312     sRadioState = OT_RADIO_STATE_RECEIVE;
313 
314     return OT_ERROR_NONE;
315 }
316 
otPlatRadioTransmit(otInstance * aInstance,otRadioFrame * aFrame)317 otError otPlatRadioTransmit(otInstance *aInstance, otRadioFrame *aFrame)
318 {
319     sRadioState = OT_RADIO_STATE_TRANSMIT;
320 
321     otPlatRadioTxStarted(aInstance, aFrame);
322 
323     return OT_ERROR_NONE;
324 }
325 
otPlatRadioGetTransmitPower(otInstance * aInstance,int8_t * aPower)326 otError otPlatRadioGetTransmitPower(otInstance *aInstance, int8_t *aPower)
327 {
328     OT_UNUSED_VARIABLE(aInstance);
329     OT_UNUSED_VARIABLE(aPower);
330     return OT_ERROR_NONE;
331 }
332 
otPlatRadioGetTransmitBuffer(otInstance * aInstance)333 otRadioFrame *otPlatRadioGetTransmitBuffer(otInstance *aInstance)
334 {
335     OT_UNUSED_VARIABLE(aInstance);
336     return &sRadioTransmitFrame;
337 }
338 
otPlatRadioGetRssi(otInstance * aInstance)339 int8_t otPlatRadioGetRssi(otInstance *aInstance)
340 {
341     OT_UNUSED_VARIABLE(aInstance);
342     return 0;
343 }
344 
otPlatRadioGetCaps(otInstance * aInstance)345 otRadioCaps otPlatRadioGetCaps(otInstance *aInstance)
346 {
347     OT_UNUSED_VARIABLE(aInstance);
348     return OT_RADIO_CAPS_NONE;
349 }
350 
otPlatRadioGetPromiscuous(otInstance * aInstance)351 bool otPlatRadioGetPromiscuous(otInstance *aInstance)
352 {
353     OT_UNUSED_VARIABLE(aInstance);
354     return false;
355 }
356 
otPlatRadioEnableSrcMatch(otInstance * aInstance,bool aEnable)357 void otPlatRadioEnableSrcMatch(otInstance *aInstance, bool aEnable)
358 {
359     OT_UNUSED_VARIABLE(aInstance);
360     OT_UNUSED_VARIABLE(aEnable);
361 }
362 
otPlatRadioAddSrcMatchShortEntry(otInstance * aInstance,uint16_t aShortAddress)363 otError otPlatRadioAddSrcMatchShortEntry(otInstance *aInstance, uint16_t aShortAddress)
364 {
365     OT_UNUSED_VARIABLE(aInstance);
366     OT_UNUSED_VARIABLE(aShortAddress);
367     return OT_ERROR_NONE;
368 }
369 
otPlatRadioAddSrcMatchExtEntry(otInstance * aInstance,const otExtAddress * aExtAddress)370 otError otPlatRadioAddSrcMatchExtEntry(otInstance *aInstance, const otExtAddress *aExtAddress)
371 {
372     OT_UNUSED_VARIABLE(aInstance);
373     OT_UNUSED_VARIABLE(aExtAddress);
374     return OT_ERROR_NONE;
375 }
376 
otPlatRadioClearSrcMatchShortEntry(otInstance * aInstance,uint16_t aShortAddress)377 otError otPlatRadioClearSrcMatchShortEntry(otInstance *aInstance, uint16_t aShortAddress)
378 {
379     OT_UNUSED_VARIABLE(aInstance);
380     OT_UNUSED_VARIABLE(aShortAddress);
381     return OT_ERROR_NONE;
382 }
383 
otPlatRadioClearSrcMatchExtEntry(otInstance * aInstance,const otExtAddress * aExtAddress)384 otError otPlatRadioClearSrcMatchExtEntry(otInstance *aInstance, const otExtAddress *aExtAddress)
385 {
386     OT_UNUSED_VARIABLE(aInstance);
387     OT_UNUSED_VARIABLE(aExtAddress);
388     return OT_ERROR_NONE;
389 }
390 
otPlatRadioClearSrcMatchShortEntries(otInstance * aInstance)391 void otPlatRadioClearSrcMatchShortEntries(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
392 
otPlatRadioClearSrcMatchExtEntries(otInstance * aInstance)393 void otPlatRadioClearSrcMatchExtEntries(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
394 
otPlatRadioEnergyScan(otInstance * aInstance,uint8_t aScanChannel,uint16_t aScanDuration)395 otError otPlatRadioEnergyScan(otInstance *aInstance, uint8_t aScanChannel, uint16_t aScanDuration)
396 {
397     OT_UNUSED_VARIABLE(aInstance);
398     OT_UNUSED_VARIABLE(aScanChannel);
399     OT_UNUSED_VARIABLE(aScanDuration);
400     return OT_ERROR_NOT_IMPLEMENTED;
401 }
402 
otPlatRadioSetTransmitPower(otInstance * aInstance,int8_t aPower)403 otError otPlatRadioSetTransmitPower(otInstance *aInstance, int8_t aPower)
404 {
405     OT_UNUSED_VARIABLE(aInstance);
406     OT_UNUSED_VARIABLE(aPower);
407     return OT_ERROR_NOT_IMPLEMENTED;
408 }
409 
otPlatRadioGetCcaEnergyDetectThreshold(otInstance * aInstance,int8_t * aThreshold)410 otError otPlatRadioGetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t *aThreshold)
411 {
412     OT_UNUSED_VARIABLE(aInstance);
413     OT_UNUSED_VARIABLE(aThreshold);
414     return OT_ERROR_NOT_IMPLEMENTED;
415 }
416 
otPlatRadioSetCcaEnergyDetectThreshold(otInstance * aInstance,int8_t aThreshold)417 otError otPlatRadioSetCcaEnergyDetectThreshold(otInstance *aInstance, int8_t aThreshold)
418 {
419     OT_UNUSED_VARIABLE(aInstance);
420     OT_UNUSED_VARIABLE(aThreshold);
421     return OT_ERROR_NOT_IMPLEMENTED;
422 }
423 
otPlatRadioGetReceiveSensitivity(otInstance * aInstance)424 int8_t otPlatRadioGetReceiveSensitivity(otInstance *aInstance)
425 {
426     OT_UNUSED_VARIABLE(aInstance);
427     return 0;
428 }
429 
otPlatEntropyGet(uint8_t * aOutput,uint16_t aOutputLength)430 otError otPlatEntropyGet(uint8_t *aOutput, uint16_t aOutputLength)
431 {
432     for (uint16_t length = 0; length < aOutputLength; length++)
433     {
434         aOutput[length] = (uint8_t)rand();
435     }
436 
437     return OT_ERROR_NONE;
438 }
439 
otPlatSettingsInit(otInstance * aInstance,const uint16_t * aSensitiveKeys,uint16_t aSensitiveKeysLength)440 void otPlatSettingsInit(otInstance *aInstance, const uint16_t *aSensitiveKeys, uint16_t aSensitiveKeysLength)
441 {
442     OT_UNUSED_VARIABLE(aInstance);
443     OT_UNUSED_VARIABLE(aSensitiveKeys);
444     OT_UNUSED_VARIABLE(aSensitiveKeysLength);
445 }
446 
otPlatSettingsDeinit(otInstance * aInstance)447 void otPlatSettingsDeinit(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
448 
otPlatSettingsGet(otInstance * aInstance,uint16_t aKey,int aIndex,uint8_t * aValue,uint16_t * aValueLength)449 otError otPlatSettingsGet(otInstance *aInstance, uint16_t aKey, int aIndex, uint8_t *aValue, uint16_t *aValueLength)
450 {
451     OT_UNUSED_VARIABLE(aInstance);
452     OT_UNUSED_VARIABLE(aKey);
453     OT_UNUSED_VARIABLE(aIndex);
454     OT_UNUSED_VARIABLE(aValue);
455     OT_UNUSED_VARIABLE(aValueLength);
456     return OT_ERROR_NOT_FOUND;
457 }
458 
otPlatSettingsSet(otInstance * aInstance,uint16_t aKey,const uint8_t * aValue,uint16_t aValueLength)459 otError otPlatSettingsSet(otInstance *aInstance, uint16_t aKey, const uint8_t *aValue, uint16_t aValueLength)
460 {
461     OT_UNUSED_VARIABLE(aInstance);
462     OT_UNUSED_VARIABLE(aKey);
463     OT_UNUSED_VARIABLE(aValue);
464     OT_UNUSED_VARIABLE(aValueLength);
465     return OT_ERROR_NONE;
466 }
467 
otPlatSettingsAdd(otInstance * aInstance,uint16_t aKey,const uint8_t * aValue,uint16_t aValueLength)468 otError otPlatSettingsAdd(otInstance *aInstance, uint16_t aKey, const uint8_t *aValue, uint16_t aValueLength)
469 {
470     OT_UNUSED_VARIABLE(aInstance);
471     OT_UNUSED_VARIABLE(aKey);
472     OT_UNUSED_VARIABLE(aValue);
473     OT_UNUSED_VARIABLE(aValueLength);
474     return OT_ERROR_NONE;
475 }
476 
otPlatSettingsDelete(otInstance * aInstance,uint16_t aKey,int aIndex)477 otError otPlatSettingsDelete(otInstance *aInstance, uint16_t aKey, int aIndex)
478 {
479     OT_UNUSED_VARIABLE(aInstance);
480     OT_UNUSED_VARIABLE(aKey);
481     OT_UNUSED_VARIABLE(aIndex);
482     return OT_ERROR_NONE;
483 }
484 
otPlatSettingsWipe(otInstance * aInstance)485 void otPlatSettingsWipe(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
486 
otPlatDiagProcess(otInstance * aInstance,uint8_t aArgsLength,char * aArgs[],char * aOutput,size_t aOutputMaxLen)487 otError otPlatDiagProcess(otInstance *aInstance,
488                           uint8_t     aArgsLength,
489                           char       *aArgs[],
490                           char       *aOutput,
491                           size_t      aOutputMaxLen)
492 {
493     OT_UNUSED_VARIABLE(aInstance);
494     OT_UNUSED_VARIABLE(aArgsLength);
495     OT_UNUSED_VARIABLE(aArgs);
496     OT_UNUSED_VARIABLE(aOutput);
497     OT_UNUSED_VARIABLE(aOutputMaxLen);
498 
499     return OT_ERROR_INVALID_COMMAND;
500 }
501 
otPlatDiagModeSet(bool aMode)502 void otPlatDiagModeSet(bool aMode) { OT_UNUSED_VARIABLE(aMode); }
503 
otPlatDiagModeGet(void)504 bool otPlatDiagModeGet(void) { return false; }
505 
otPlatDiagChannelSet(uint8_t aChannel)506 void otPlatDiagChannelSet(uint8_t aChannel) { OT_UNUSED_VARIABLE(aChannel); }
507 
otPlatDiagTxPowerSet(int8_t aTxPower)508 void otPlatDiagTxPowerSet(int8_t aTxPower) { OT_UNUSED_VARIABLE(aTxPower); }
509 
otPlatDiagRadioReceived(otInstance * aInstance,otRadioFrame * aFrame,otError aError)510 void otPlatDiagRadioReceived(otInstance *aInstance, otRadioFrame *aFrame, otError aError)
511 {
512     OT_UNUSED_VARIABLE(aInstance);
513     OT_UNUSED_VARIABLE(aFrame);
514     OT_UNUSED_VARIABLE(aError);
515 }
516 
otPlatDiagAlarmCallback(otInstance * aInstance)517 void otPlatDiagAlarmCallback(otInstance *aInstance) { OT_UNUSED_VARIABLE(aInstance); }
518