mirror of
https://github.com/espressif/openthread.git
synced 2026-09-04 00:00:06 +00:00
[cli] get external route list in the local Network Data (#2619)
This commit is contained in:
@@ -717,8 +717,16 @@ typedef struct otCommissionConfig
|
||||
OTLWF_CTL_CODE(200, METHOD_BUFFERED, FILE_WRITE_DATA)
|
||||
// GUID - InterfaceGuid
|
||||
|
||||
#define IOCTL_OTLWF_OT_NEXT_ROUTE \
|
||||
OTLWF_CTL_CODE(201, METHOD_BUFFERED, FILE_READ_DATA)
|
||||
// GUID - InterfaceGuid
|
||||
// BOOLEAN - aLocal (input)
|
||||
// uint8_t - aIterator (input)
|
||||
// uint8_t - aNewIterator (output)
|
||||
// otExternalRouteConfig - aConfig (output)
|
||||
|
||||
// OpenThread function IOCTL codes
|
||||
#define MIN_OTLWF_IOCTL_FUNC_CODE 100
|
||||
#define MAX_OTLWF_IOCTL_FUNC_CODE 200
|
||||
#define MAX_OTLWF_IOCTL_FUNC_CODE 201
|
||||
|
||||
#endif //__OTLWFIOCTL_H__
|
||||
|
||||
@@ -1840,6 +1840,42 @@ otBorderRouterGetNextOnMeshPrefix(
|
||||
return aError;
|
||||
}
|
||||
|
||||
OTAPI
|
||||
otError
|
||||
OTCALL
|
||||
otBorderRouterGetNextRoute(
|
||||
_In_ otInstance *aInstance,
|
||||
_Inout_ otNetworkDataIterator *aIterator,
|
||||
_Out_ otExternalRouteConfig *aConfig
|
||||
)
|
||||
{
|
||||
if (aInstance == nullptr || aConfig == nullptr) return OT_ERROR_INVALID_ARGS;
|
||||
|
||||
BOOLEAN aLocal = TRUE;
|
||||
PackedBuffer3<GUID,BOOLEAN,otNetworkDataIterator> InBuffer(aInstance->InterfaceGuid, aLocal, *aIterator);
|
||||
BYTE OutBuffer[sizeof(uint8_t) + sizeof(otExternalRouteConfig)];
|
||||
|
||||
otError aError =
|
||||
DwordToThreadError(
|
||||
SendIOCTL(
|
||||
aInstance->ApiHandle,
|
||||
IOCTL_OTLWF_OT_NEXT_ROUTE,
|
||||
&InBuffer, sizeof(InBuffer),
|
||||
OutBuffer, sizeof(OutBuffer)));
|
||||
|
||||
if (aError == OT_ERROR_NONE)
|
||||
{
|
||||
memcpy(aIterator, OutBuffer, sizeof(uint8_t));
|
||||
memcpy(aConfig, OutBuffer + sizeof(uint8_t), sizeof(otExternalRouteConfig));
|
||||
}
|
||||
else
|
||||
{
|
||||
ZeroMemory(aConfig, sizeof(otExternalRouteConfig));
|
||||
}
|
||||
|
||||
return aError;
|
||||
}
|
||||
|
||||
OTAPI
|
||||
otPanId
|
||||
OTCALL
|
||||
|
||||
@@ -145,6 +145,7 @@ OTLWF_IOCTL_HANDLER IoCtls[] =
|
||||
{ "IOCTL_OTLWF_OT_REMOVE_MAC_FIXED_RSS", REF_IOCTL_FUNC_WITH_TUN(otRemoveMacFixedRss) },
|
||||
{ "IOCTL_OTLWF_OT_NEXT_MAC_FIXED_RSS", REF_IOCTL_FUNC(otNextMacFixedRss) },
|
||||
{ "IOCTL_OTLWF_OT_CLEAR_MAC_FIXED_RSS", REF_IOCTL_FUNC_WITH_TUN(otClearMacFixedRss) },
|
||||
{ "IOCTL_OTLWF_OT_NEXT_ROUTE", REF_IOCTL_FUNC(otNextRoute) },
|
||||
};
|
||||
|
||||
// intentionally -1 in the end due to that IOCTL_OTLWF_OT_ASSIGN_LINK_QUALITY (#161) is removed now.
|
||||
@@ -4868,6 +4869,58 @@ otLwfIoCtl_otNextOnMeshPrefix(
|
||||
return status;
|
||||
}
|
||||
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
NTSTATUS
|
||||
otLwfIoCtl_otNextRoute(
|
||||
_In_ PMS_FILTER pFilter,
|
||||
_In_reads_bytes_(InBufferLength)
|
||||
PUCHAR InBuffer,
|
||||
_In_ ULONG InBufferLength,
|
||||
_Out_writes_bytes_(*OutBufferLength)
|
||||
PVOID OutBuffer,
|
||||
_Inout_ PULONG OutBufferLength
|
||||
)
|
||||
{
|
||||
NTSTATUS status = STATUS_INVALID_PARAMETER;
|
||||
|
||||
if (InBufferLength >= sizeof(BOOLEAN) + sizeof(uint32_t) &&
|
||||
*OutBufferLength >= sizeof(uint32_t) + sizeof(otExternalRouteConfig))
|
||||
{
|
||||
BOOLEAN aLocal = *(BOOLEAN*)InBuffer;
|
||||
uint32_t aIterator = *(uint32_t*)(InBuffer + sizeof(BOOLEAN));
|
||||
otExternalRouteConfig* aConfig = (otExternalRouteConfig*)((PUCHAR)OutBuffer + sizeof(uint32_t));
|
||||
if (aLocal)
|
||||
{
|
||||
status = ThreadErrorToNtstatus(
|
||||
otBorderRouterGetNextRoute(
|
||||
pFilter->otCtx,
|
||||
&aIterator,
|
||||
aConfig)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
status = ThreadErrorToNtstatus(
|
||||
otNetDataGetNextRoute(
|
||||
pFilter->otCtx,
|
||||
&aIterator,
|
||||
aConfig)
|
||||
);
|
||||
}
|
||||
*OutBufferLength = sizeof(uint8_t) + sizeof(otExternalRouteConfig);
|
||||
if (status == STATUS_SUCCESS)
|
||||
{
|
||||
*(uint32_t*)OutBuffer = aIterator;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*OutBufferLength = 0;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
NTSTATUS
|
||||
otLwfIoCtl_otPollPeriod(
|
||||
|
||||
@@ -231,5 +231,6 @@ DECL_IOCTL_FUNC_WITH_TUN(otAddMacFixedRss);
|
||||
DECL_IOCTL_FUNC_WITH_TUN(otRemoveMacFixedRss);
|
||||
DECL_IOCTL_FUNC(otNextMacFixedRss);
|
||||
DECL_IOCTL_FUNC_WITH_TUN(otClearMacFixedRss);
|
||||
DECL_IOCTL_FUNC(otNextRoute);
|
||||
|
||||
#endif // _IOCONTROL_H
|
||||
|
||||
Reference in New Issue
Block a user