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 对象的当前状态。

[READ-ONLY] 当前状态。

公共静态属性

sInetEventHandlerDelegate

Weave::System::LwIPEventHandlerDelegate sInetEventHandlerDelegate

公共函数

CanEnqueueDroppableEvent

bool CanEnqueueDroppableEvent(
  void
)

CancelResolveHostAddress

void CancelResolveHostAddress(
  DNSResolveCompleteFunct onComplete,
  void *appState
)

取消任何尚未完成的 DNS 查询(针对匹配的完成回调函数和应用状态)。

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

DroppableEventDequeued

void DroppableEventDequeued(
  void
)

GetInterfaceFromAddr

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

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

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

具体说明
参数
[in] addr
IPAddress 对象的引用。
[out] intfId
对 InterfaceId 对象的引用。
返回值
INET_NO_ERROR(无条件)。

GetLinkLocalAddr

INET_ERROR GetLinkLocalAddr(
  InterfaceId link,
  IPAddress *llAddr
)

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

具体说明
参数
[in] link
正在为其查找链路本地 IPv6 地址的接口。
[out] llAddr
链路的链路本地 IPv6 地址。
返回值
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 和 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
)

MatchLocalIPv6Subnet

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
成功时。

NewTCPEndPoint

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
如果 InetLayerTunEndPoint 池已满,并且无法创建新的池。
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
如果 InetLayerUDPEndPoint 池已满,无法创建新的端点。
INET_NO_ERROR
成功时。

PrepareSelect

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 网络或操作系统错误。

SetPlatformData

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;否则,是一个指示关闭失败原因的特定错误。

SystemLayer

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
)