nl::Inet::InetLayer

#include <src/inet/InetLayer.h>

这样一来,您就可以访问单个线程的互联网服务,包括计时器、域名系统 (DNS) 解析、TCP 网络传输、UDP 网络传输和原始网络传输。

摘要

对于 BSD/POSIX 套接字,事件就绪性通知会通过文件描述符和关于平台适配的传统轮询 / 选择实现来处理。

对于 LwIP,事件准备状态通知是通过事件 / 消息以及针对具体平台 / 系统的事件钩子机制来处理的。

构造函数和构造函数

InetLayer(void)
这是 InetLayer 默认构造函数。

公共类型

@5{
  kState_NotInitialized = 0,
  kState_Initialized = 1,
  kState_ShutdownInProgress = 2
}
枚举
InetLayer 对象的当前状态。
DNSResolveCompleteFunct typedef
DNSResolver::OnResolveCompleteFunct

公共属性

State
enum nl::Inet::InetLayer::@5
InetLayer 对象的当前状态。

公共静态属性

sInetEventHandlerDelegate

公共函数

CanEnqueueDroppableEvent(void)
bool
CancelResolveHostAddress(DNSResolveCompleteFunct onComplete, void *appState)
void
取消可能仍处于活跃状态的所有待处理的 DNS 查询(针对匹配的完成回调函数和应用状态)。
DroppableEventDequeued(void)
void
GetInterfaceFromAddr(const IPAddress & addr, InterfaceId & intfId)
获取指定 IP 地址的接口标识符。
GetLinkLocalAddr(InterfaceId link, IPAddress *llAddr)
获取指定链接或接口的链接本地 IPv6 地址。
GetPlatformData(void)
void *
这样可以返回分配给实例的所有客户端专用平台数据(如果之前已设置)。
HandleSelectResult(int selectRes, fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
void
处理选定调用中的 I/O。
Init(Weave::System::Layer & aSystemLayer, void *aContext)
这是 InetLayer 显式初始化器。
InitQueueLimiter(void)
MatchLocalIPv6Subnet(const IPAddress & addr)
bool
检查指定的 IPv6 地址与任意本地配置的 IPv6 地址之间是否存在前缀匹配。
NewRawEndPoint(IPVersion ipVer, IPProtocol ipProto, RawEndPoint **retEndPoint)
为特定 IP 版本和协议创建新的 RawEndPoint 对象。
NewTCPEndPoint(TCPEndPoint **retEndPoint)
创建一个新的 TCPEndPoint 对象。
NewTunEndPoint(TunEndPoint **retEndPoint)
创建一个新的 TunEndPoint 对象。
NewUDPEndPoint(UDPEndPoint **retEndPoint)
创建一个新的 UDPEndPoint 对象。
PrepareSelect(int & nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval & sleepTime)
void
准备要使用 select() 的文件描述符集。
ResolveHostAddress(const char *hostName, uint16_t hostNameLen, uint8_t options, uint8_t maxAddrs, IPAddress *addrArray, DNSResolveCompleteFunct onComplete, void *appState)
对指定主机名执行 IP 地址解析。
ResolveHostAddress(const char *hostName, uint16_t hostNameLen, uint8_t maxAddrs, IPAddress *addrArray, DNSResolveCompleteFunct onComplete, void *appState)
对指定主机名执行 IP 地址解析。
ResolveHostAddress(const char *hostName, uint8_t maxAddrs, IPAddress *addrArray, DNSResolveCompleteFunct onComplete, void *appState)
对指定主机名执行 IP 地址解析。
SetPlatformData(void *aPlatformData)
void
这会将指定的客户端专用平台数据设置为该实例,以便稍后由客户端平台进行检索。
Shutdown(void)
这是 InetLayer 显式反初始化程序,应在处理实例化的 InetLayer 实例之前调用。
SystemLayer(void) const

公共静态函数

HandleInetLayerEvent(Weave::System::Object & aTarget, Weave::System::EventType aEventType, uintptr_t aArgument)
Weave::System::Error
IsDroppableEvent(Weave::System::EventType aType)
bool
UpdateSnapshot(nl::Weave::System::Stats::Snapshot & aSnapshot)
void

公共类型

@5

 @5

InetLayer 对象的当前状态。

属性
kState_Initialized

初始化状态。

kState_NotInitialized

未初始化状态。

kState_ShutdownInProgress

触发关闭操作的状态。

DNSResolveCompleteFunct

DNSResolver::OnResolveCompleteFunct DNSResolveCompleteFunct

公共属性

状态

enum nl::Inet::InetLayer::@5 State

InetLayer 对象的当前状态。

[只读] 当前状态。

公共静态属性

sInetEventHandlerDelegate

Weave::System::LwIPEventHandlerDelegate sInetEventHandlerDelegate

公共函数

CanEnqueueDroppableEvent

bool CanEnqueueDroppableEvent(
  void
)

取消主机地址

void CancelResolveHostAddress(
  DNSResolveCompleteFunct onComplete,
  void *appState
)

取消可能仍处于活跃状态的所有待处理的 DNS 查询(针对匹配的完成回调函数和应用状态)。

详细信息
参数
[in] onComplete
DNS 请求完成后指向回调函数的指针。
[in] appState
指向要作为参数传递给回调函数的应用状态对象的指针。

将 DroppableEvent 移出队列

void DroppableEventDequeued(
  void
)

GetInterfaceFromAddr 中的接口

INET_ERROR GetInterfaceFromAddr(
  const IPAddress & addr,
  InterfaceId & intfId
)

获取指定 IP 地址的接口标识符。

如果无法派生接口标识符,则将其设置为 INET_NULL_INTERFACEID

详细信息
参数
[in] addr
IPAddress 对象的引用。
[out] intfId
对 InterfaceId 对象的引用。
返回值

GetLinkLocalAddr

INET_ERROR GetLinkLocalAddr(
  InterfaceId link,
  IPAddress *llAddr
)

获取指定链接或接口的链接本地 IPv6 地址。

详细信息
参数
[in] link
要寻找链路本地 IPv6 地址的接口。
[out] llAddr
链路的本地 IP6 地址。
返回值
INET_ERROR_NOT_IMPLEMENTED
如果 IPv6 不受支持。
INET_ERROR_BAD_ARGS
如果链接本地地址为 NULL。
INET_ERROR_ADDRESS_NOT_FOUND
未对链接配置任何地址。
INET_NO_ERROR
成功时。

GetPlatformData

void * GetPlatformData(
  void
)

这样可以返回分配给实例的所有客户端专用平台数据(如果之前已设置)。

详细信息
返回值
特定于客户端的平台数据(如果之前已设置);否则为 NULL。

HandleSelectResult

void HandleSelectResult(
  int selectRes,
  fd_set *readfds,
  fd_set *writefds,
  fd_set *exceptfds
)

处理选定调用中的 I/O。

此方法会在每个活跃端点中注册待处理的 I/O 事件,然后为这些端点调用相应的 I/O 处理函数。

详细信息
参数
[in] selectRes
Select 调用的返回值。
[in] readfds
指向读取文件描述符集的指针。
[in] writefds
指向写入文件描述符集合的指针。
[in] exceptfds
指向出错的文件描述符集的指针。

InetLayer

 InetLayer(
  void
)

这是 InetLayer 默认构造函数。

它执行一些基本的数据成员初始化;不过,由于 InetLayer 遵循显式初始化程序设计模式,因此必须在使用该对象之前成功调用 InetLayer::Init 方法。

Init

INET_ERROR Init(
  Weave::System::Layer & aSystemLayer,
  void *aContext
)

这是 InetLayer 显式初始化器。

必须先成功调用并完成此步骤,然后才能使用 InetLayer

调用程序可能会提供可选上下文参数,该参数将通过任何平台专用钩子函数传回。对于基于 LwIP 的适配,这通常是一个指向与 InetLayer 实例关联的事件队列的指针。

平台可以选择在其平台专用配置标头中声明 INET_CONFIG_WILL_OVERRIDE_PLATFORM_XTOR_FUNCS 并启用 Platform::InetLayer::WillInit and Platform::InetLayer::DidInit 钩子,以影响平台特定的自定义或对 InetLayer 的数据扩展。

详细信息
参数
[in] aSystemLayer
Weave 系统层的必需实例已成功初始化。
[in] aContext
将通过任何平台专用钩子函数传递回调用者的可选上下文参数。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 的状态不正确,
INET_ERROR_NO_MEMORY
如果 InetLayer 针对新的计时器请求的资源耗尽。
other
特定于平台的错误,指示初始化失败的原因。
INET_NO_ERROR
成功时。

InitQueueLimiter

INET_ERROR InitQueueLimiter(
  void
)

MatchLocalIPv6 子网

bool MatchLocalIPv6Subnet(
  const IPAddress & addr
)

检查指定的 IPv6 地址与任意本地配置的 IPv6 地址之间是否存在前缀匹配。

详细信息
参数
[in] addr
要检查其前缀匹配的 IPv6 地址。
返回值
如果找到了匹配的匹配项,则返回 true,否则返回 false。

NewRawEndPoint

INET_ERROR NewRawEndPoint(
  IPVersion ipVer,
  IPProtocol ipProto,
  RawEndPoint **retEndPoint
)

为特定 IP 版本和协议创建新的 RawEndPoint 对象。

详细信息
参数
[in] ipVer
IPv4 或 IPv6。
[in] ipProto
IP 系列中的协议(例如ICMPv4 或 ICMPv6)。
[in,out] retEndPoint
指向 RawEndPoint 对象的指针,该对象是对象创建完成后的返回参数。*如果创建失败,retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayerRawEndPoint 池已满,并且无法创建新端点。
INET_NO_ERROR
成功时。

新的 TCPEndPoint

INET_ERROR NewTCPEndPoint(
  TCPEndPoint **retEndPoint
)

创建一个新的 TCPEndPoint 对象。

详细信息
参数
[in,out] retEndPoint
指向 TCPEndPoint 对象的指针,该对象是对象创建完成后的返回参数。*如果创建失败,retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayerTCPEndPoint 池已满,无法创建新端点。
INET_NO_ERROR
成功时。

NewTunEndPoint

INET_ERROR NewTunEndPoint(
  TunEndPoint **retEndPoint
)

创建一个新的 TunEndPoint 对象。

详细信息
参数
[in,out] retEndPoint
指向 TunEndPoint 对象的指针,该对象是对象创建完成后的返回参数。*如果创建失败,retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayer TunEndPoint 池已满,无法创建新的池。
INET_NO_ERROR
成功时。

NewUDPEndPoint

INET_ERROR NewUDPEndPoint(
  UDPEndPoint **retEndPoint
)

创建一个新的 UDPEndPoint 对象。

详细信息
参数
[in,out] retEndPoint
指向 UDPEndPoint 对象的指针,该对象是对象创建完成后的返回参数。*如果创建失败,retEndPoint 为 NULL。
返回值
INET_ERROR_INCORRECT_STATE
如果 InetLayer 对象未初始化。
INET_ERROR_NO_ENDPOINTS
如果 InetLayer UDPEndPoint 池已满,无法创建新端点。
INET_NO_ERROR
成功时。

准备选择

void PrepareSelect(
  int & nfds,
  fd_set *readfds,
  fd_set *writefds,
  fd_set *exceptfds,
  struct timeval & sleepTime
)

准备要使用 select() 的文件描述符集。

详细信息
参数
[out] nfds
文件描述符集中的文件描述符范围。
[in] readfds
指向可读文件描述符集的指针。
[in] writefds
指向可写文件描述符集的指针。
[in] exceptfds
指向出错的文件描述符集的指针。
[in] sleepTimeTV
指向指定选定项休眠时长的结构指针

ResolveHostAddress

INET_ERROR ResolveHostAddress(
  const char *hostName,
  uint16_t hostNameLen,
  uint8_t options,
  uint8_t maxAddrs,
  IPAddress *addrArray,
  DNSResolveCompleteFunct onComplete,
  void *appState
)

对指定主机名执行 IP 地址解析。

详细信息
参数
[in] hostName
指向以非 NULL 结尾的 C 字符串的指针,表示要查询的主机名。
[in] hostNameLen
主机名的字符串长度。
[in] options
一个整数值,用于控制主机名解析的执行方式。
                    Value should be one of the address family values from the
                    #DNSOptions enumeration:

                    #kDNSOption_AddrFamily_Any
                    #kDNSOption_AddrFamily_IPv4Only
                    #kDNSOption_AddrFamily_IPv6Only
                    #kDNSOption_AddrFamily_IPv4Preferred
                    #kDNSOption_AddrFamily_IPv6Preferred
[in] maxAddrs
DNS 表格中可存储的地址数量上限。
[in] addrArray
指向 DNS 表的指针。
[in] onComplete
DNS 请求完成后指向回调函数的指针。
[in] appState
指向 DNS 请求完成后要传递给 onComplete 的应用状态的指针。
返回值
INET_NO_ERROR
成功处理 DNS 请求时触发。
INET_ERROR_NO_MEMORY
如果 Inet 层解析器池已满。
INET_ERROR_HOST_NAME_TOO_LONG
如果请求的主机名过长,则会发生此错误。
INET_ERROR_HOST_NOT_FOUND
如果请求的主机名无法解析为地址。
INET_ERROR_DNS_TRY_AGAIN
如果域名服务器返回临时失败指示,请稍后重试。
INET_ERROR_DNS_NO_RECOVERY
如果域名服务器返回了不可恢复的错误,
INET_ERROR_NOT_IMPLEMENTED
如果底层平台上未启用 DNS 解析,则会发生此错误。
other
底层 DNS 解析器实现返回的 POSIX 网络或操作系统错误。

ResolveHostAddress

INET_ERROR ResolveHostAddress(
  const char *hostName,
  uint16_t hostNameLen,
  uint8_t maxAddrs,
  IPAddress *addrArray,
  DNSResolveCompleteFunct onComplete,
  void *appState
)

对指定主机名执行 IP 地址解析。

详细信息
参数
[in] hostName
指向以非 NULL 结尾的 C 字符串的指针,表示要查询的主机名。
[in] hostNameLen
主机名的字符串长度。
[in] maxAddrs
DNS 表格中可存储的地址数量上限。
[in] addrArray
指向 DNS 表的指针。
[in] onComplete
DNS 请求完成后指向回调函数的指针。
[in] appState
指向 DNS 请求完成后要传递给 onComplete 的应用状态的指针。
返回值
INET_NO_ERROR
成功处理 DNS 请求时触发。
INET_ERROR_NO_MEMORY
如果 Inet 层解析器池已满。
INET_ERROR_HOST_NAME_TOO_LONG
如果请求的主机名过长,则会发生此错误。
INET_ERROR_HOST_NOT_FOUND
如果请求的主机名无法解析为地址。
INET_ERROR_DNS_TRY_AGAIN
如果域名服务器返回临时失败指示,请稍后重试。
INET_ERROR_DNS_NO_RECOVERY
如果域名服务器返回了不可恢复的错误,
INET_ERROR_NOT_IMPLEMENTED
如果底层平台上未启用 DNS 解析,则会发生此错误。
other
底层 DNS 解析器实现返回的 POSIX 网络或操作系统错误。

ResolveHostAddress

INET_ERROR ResolveHostAddress(
  const char *hostName,
  uint8_t maxAddrs,
  IPAddress *addrArray,
  DNSResolveCompleteFunct onComplete,
  void *appState
)

对指定主机名执行 IP 地址解析。

详细信息
参数
[in] hostName
指向以 NULL 结尾的 C 字符串的指针,表示要查询的主机名。
[in] maxAddrs
DNS 表格中可存储的地址数量上限。
[in] addrArray
指向 DNS 表的指针。
[in] onComplete
DNS 请求完成后指向回调函数的指针。
[in] appState
指向 DNS 请求完成后要传递给 onComplete 的应用状态的指针。
返回值
INET_NO_ERROR
成功处理 DNS 请求时触发。
INET_ERROR_NO_MEMORY
如果 Inet 层解析器池已满。
INET_ERROR_HOST_NAME_TOO_LONG
如果请求的主机名过长,则会发生此错误。
INET_ERROR_HOST_NOT_FOUND
如果请求的主机名无法解析为地址。
INET_ERROR_DNS_TRY_AGAIN
如果域名服务器返回临时失败指示,请稍后重试。
INET_ERROR_DNS_NO_RECOVERY
如果域名服务器返回了不可恢复的错误,
INET_ERROR_NOT_IMPLEMENTED
如果底层平台上未启用 DNS 解析,则会发生此错误。
other
底层 DNS 解析器实现返回的 POSIX 网络或操作系统错误。

设置平台数据

void SetPlatformData(
  void *aPlatformData
)

这会将指定的客户端专用平台数据设置为该实例,以便稍后由客户端平台进行检索。

详细信息
参数
[in] aPlatformData
要设置的特定于客户端的平台数据。

关机

INET_ERROR Shutdown(
  void
)

这是 InetLayer 显式反初始化程序,应在处理实例化的 InetLayer 实例之前调用。

平台可以选择在其平台专用配置标头中声明 INET_CONFIG_WILL_OVERRIDE_PLATFORM_XTOR_FUNCS 并启用 Platform::InetLayer::WillShutdown 和 Platform::InetLayer::DidShutdown 钩子,以清理对 InetLayer 的平台专用自定义或数据扩展。

详细信息
返回值
如果成功,则返回 INET_NO_ERROR;否则,显示指明关闭失败的原因的特定错误。

系统层

Weave::System::Layer * SystemLayer(
  void
) const 

公共静态函数

HandleInetLayerEvent 接口

Weave::System::Error HandleInetLayerEvent(
  Weave::System::Object & aTarget,
  Weave::System::EventType aEventType,
  uintptr_t aArgument
)

IsDroppableEvent

bool IsDroppableEvent(
  Weave::System::EventType aType
)

UpdateSnapshot(更新快照)

void UpdateSnapshot(
  nl::Weave::System::Stats::Snapshot & aSnapshot
)