• 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/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