nl::Inet

摘要

枚举

@7{
  kInetEvent_TCPConnectComplete = _INET_CONFIG_EVENT(0),
  kInetEvent_TCPConnectionReceived = _INET_CONFIG_EVENT(1),
  kInetEvent_TCPDataReceived = _INET_CONFIG_EVENT(2),
  kInetEvent_TCPDataSent = _INET_CONFIG_EVENT(3),
  kInetEvent_TCPError = _INET_CONFIG_EVENT(4),
  kInetEvent_UDPDataReceived = _INET_CONFIG_EVENT(5),
  kInetEvent_DNSResolveComplete = _INET_CONFIG_EVENT(6),
  kInetEvent_TunDataReceived = _INET_CONFIG_EVENT(7),
  kInetEvent_RawDataReceived = _INET_CONFIG_EVENT(8)
}
枚举
Inet 层事件类型定义。
DNSOptions{
  kDNSOption_AddrFamily_Mask = 0x07,
  kDNSOption_Flags_Mask = 0xF8,
  kDNSOption_AddrFamily_Any = 0x00,
  kDNSOption_AddrFamily_IPv4Only = 0x01,
  kDNSOption_AddrFamily_IPv4Preferred = 0x02,
  kDNSOption_AddrFamily_IPv6Only = 0x03,
  kDNSOption_AddrFamily_IPv6Preferred = 0x04,
  kDNSOption_ValidFlags = 0
}
枚举
用于控制 IP 地址解析执行方式的选项。
IPAddressType{
  kIPAddressType_Unknown = 0,
  kIPAddressType_IPv4 = 1,
  kIPAddressType_IPv6 = 2,
  kIPAddressType_Any = 3
}
枚举
互联网协议地址族。
IPProtocol{
  kIPProtocol_ICMPv6 = 58,
  kIPProtocol_ICMPv4 = 1
}
枚举
IP 系列中某些协议的数量。
IPV6MulticastGroup{
  kIPV6MulticastGroup_AllRouters = 2
}
枚举
互联网协议多播组标识符。
IPVersion{
  kIPVersion_6 = 6,
  kIPVersion_4 = 4
}
枚举
所使用的 IP 协议的版本。
IPv6MulticastFlag{
  kIPv6MulticastFlag_Transient = 0x01,
  kIPv6MulticastFlag_Prefix = 0x02
}
枚举
互联网协议 v6 多播标志。
IPv6MulticastScope{
  kIPv6MulticastScope_Interface = 1,
  kIPv6MulticastScope_Link = 2,
  kIPv6MulticastScope_IPv4 = 3,
  kIPv6MulticastScope_Admin = 4,
  kIPv6MulticastScope_Site = 5,
  kIPv6MulticastScope_Organization = 8,
  kIPv6MulticastScope_Global = 14
}
枚举
互联网协议多播地址范围。

类型定义符

InterfaceId typedef
struct netif *
系统网络接口的指示符。

变量

sIOCTLSocket = -1
int

函数

CheckMulticastGroupArgs(InterfaceId aInterfaceId, const IPAddress & aAddress)
CloseIOCTLSocket(void)
void
关闭 GetIOCTLSocket 创建的全局套接字。
FormatInetLayerError(char *buf, uint16_t bufSize, int32_t err)
bool
如果存在 Inet 层错误,则返回直观易懂的以 NULL 结尾的 C 字符串,以描述错误。
GetIOCTLSocket(void)
int
返回可用于调用某些网络 IOCTL 的全局通用套接字。
GetInterfaceName(InterfaceId intfId, char *nameBuf, size_t nameBufSize)
NL_DLL_EXPORT INET_ERROR
获取网络接口的名称。
INET_IsInetEvent(Weave::System::EventType aType)
bool
检查以验证 System::EventType 是否为有效的 Inet 层事件类型。
InterfaceNameToId(const char *intfName, InterfaceId & intfId)
NL_DLL_EXPORT INET_ERROR
在网络接口列表中搜索指定名称。
LwIPBindInterface(struct raw_pcb *aRaw, InterfaceId intfId)
LwIPBindInterface(struct udp_pcb *aUDP, InterfaceId intfId)
NetmaskToPrefixLength(const uint8_t *netmask, uint16_t netmaskLen)
uint8_t
根据可变长度的网络掩码计算前缀长度。
ParseHostAndPort(const char *aString, uint16_t aStringLen, const char *& aHost, uint16_t & aHostLen, uint16_t & aPort)
解析包含主机或 IP 地址以及可选端口号(以“:”分隔)的人类可读字符串,支持以下格式:
ParseHostPortAndInterface(const char *aString, uint16_t aStringLen, const char *& aHost, uint16_t & aHostLen, uint16_t & aPort, const char *& aInterface, uint16_t & aInterfaceLen)
解析一个人类可读的字符串,该字符串包含主机或 IP 地址、可选端口号(以“:”分隔)和可选接口名称(以“'”分隔),支持以下格式:
RegisterInetLayerErrorFormatter(void)
void
针对 Inet 层错误注册文本错误格式设置工具。
SocketsIPv4JoinLeaveMulticastGroup(int aSocket, InterfaceId aInterfaceId, const IPAddress & aAddress, int aCommand)
SocketsIPv6JoinLeaveMulticastGroup(int aSocket, InterfaceId aInterfaceId, const IPAddress & aAddress, int aCommand)
SocketsSetMulticastLoopback(int aSocket, bool aLoopback, int aProtocol, int aOption)
SocketsSetMulticastLoopback(int aSocket, IPVersion aIPVersion, bool aLoopback)

nl::Inet::AsyncDNSResolverSockets

这是 InetLayer 的内部类,为 InetLayer 中的异步域名系统 (DNS) 解析提供了辅助 API。

nl::Inet::DNSResolver

这是 InetLayer 的内部类,提供了 InetLayer 中域名系统 (DNS) 解析的抽象概念。

nl::Inet::EndPointBasis

互联网传输端点类的基础。

nl::Inet::IPAddress

互联网协议地址。

nl::Inet::IPEndPointBasis

此类的对象表示不可实例化的 IP 协议端点。

nl::Inet::IPPacketInfo

有关传入/传出消息/连接的信息。

nl::Inet::IPPrefix

互联网协议地址前缀。

nl::Inet::InetLayer

提供对单个线程的互联网服务的访问权限,包括计时器、域名系统 (DNS) 解析、TCP 网络传输、UDP 网络传输和原始网络传输。

nl::Inet::InetLayerBasis

这是由 InetLayer 对象管理的引用计数对象的基础类。

nl::Inet::InterfaceAddressIterator

系统网络接口 IP 地址列表的迭代器。

nl::Inet::InterfaceIterator

系统网络接口列表的迭代器。

nl::Inet::RawEndPoint

此类的对象表示原始 IP 网络端点。

nl::Inet::SocketEvents

表示套接字上已请求/待处理的一组 I/O 事件。

nl::Inet::TCPEndPoint

此类的对象表示 TCP 传输端点。

nl::Inet::TunEndPoint

此类的对象表示隧道接口。

nl::Inet::UDPEndPoint

此类的对象表示 UDP 传输端点。

联合体

nl::Inet::PeerSockAddr

命名空间

nl::Inet::Platform

枚举

@7

 @7

Inet 层事件类型定义。

属性
kInetEvent_DNSResolveComplete

DNS 名称解析完成事件。

kInetEvent_RawDataReceived

通过 InetLayer 原始端点接收数据的事件。

kInetEvent_TCPConnectComplete

TCP 连接完成事件。

kInetEvent_TCPConnectionReceived

TCP 连接接收事件。

kInetEvent_TCPDataReceived

通过 TCP 连接接收数据的事件。

kInetEvent_TCPDataSent

通过 TCP 连接传输数据的事件。

kInetEvent_TCPError

TCP 连接错误事件。

kInetEvent_TunDataReceived

通过 Weave 隧道接收数据的事件。

kInetEvent_UDPDataReceived

通过 UDP 接收数据的事件。

DNSOptions

 DNSOptions

用于控制 IP 地址解析执行方式的选项。

属性
kDNSOption_AddrFamily_Any

按照域名服务器返回的顺序返回 IPv4 和/或 IPv6 地址。

kDNSOption_AddrFamily_IPv4Only

仅返回 IPv4 地址。

kDNSOption_AddrFamily_IPv4Preferred

返回 IPv4 和/或 IPv6 地址,IPv4 地址列在最前面。

kDNSOption_AddrFamily_IPv6Only

仅返回 IPv6 地址。

kDNSOption_AddrFamily_IPv6Preferred

返回 IPv4 和/或 IPv6 地址,IPv6 地址列在最前面。

kDNSOption_AddrFamily_Mask

DNSOptions 整数值中的位,表示所需地址系列。

kDNSOption_Flags_Mask

DNSOptions 整数值中的位为标志预留。

kDNSOption_ValidFlags

所有有效的 DNSOption 标志集。

IPAddressType

 IPAddressType

互联网协议地址族。

IPAddressType 类型的值由 IPAddress::Type() 方法返回。它们指明了使用地址所涉及的地址类别。

属性
kIPAddressType_Any

未指定的互联网地址(与协议版本无关)

kIPAddressType_IPv4

互联网协议版本 4。

kIPAddressType_IPv6

互联网协议版本 6。

kIPAddressType_Unknown

未使用。

IPProtocol

 IPProtocol

IP 系列中某些协议的数量。

属性
kIPProtocol_ICMPv4

ICMPv4。

kIPProtocol_ICMPv6

ICMPv6。

IPV6MulticastGroup

 IPV6MulticastGroup

互联网协议多播组标识符。

IPV6MulticastGroup 类型的值用于调用 IPAddress::MakeIPv6Multicast() 方法。它们表示 IETF 在 IANA 注册的区分组标识符。

属性
kIPV6MulticastGroup_AllRouters

RFC 4291。

IPVersion

 IPVersion

所使用的 IP 协议的版本。

属性
kIPVersion_4

IPv4。

kIPVersion_6

IPv6。

IPv6MulticastFlag

 IPv6MulticastFlag

互联网协议 v6 多播标志。

IPv6MulticastFlag 类型的值用于调用 IPAddress::MakeIPv6Multicast() 方法。它们指示要创建的 IPv6 多播地址的类型。这些编号由 IETF 向 IANA 注册。

属性
kIPv6MulticastFlag_Prefix

多播地址是 (1) 基于网络前缀。

kIPv6MulticastFlag_Transient

多播地址 (1) 是瞬时地址(即动态分配),而不是 (0) 已知地址(即 IANA 分配地址)。

IPv6MulticastScope

 IPv6MulticastScope

互联网协议多播地址范围。

IPv6MulticastScope 类型的值用于调用 IPAddress::MakeIPv6Multicast() 方法。它们指示结果指定的多播组的可路由范围。这些编号由 IETF 向 IANA 注册。

属性
kIPv6MulticastScope_Admin

Realm-local 范围。

kIPv6MulticastScope_Global

全局范围。

kIPv6MulticastScope_IPv4

Realm-local(“IPv4”)范围。

kIPv6MulticastScope_Interface

本地接口范围。

kIPv6MulticastScope_Link

链路本地范围。

kIPv6MulticastScope_Organization

组织本地范围。

kIPv6MulticastScope_Site

Realm-local 范围。

类型定义符

InterfaceId

struct netif * InterfaceId

系统网络接口的指示符。

可携性依赖于从未见过这种别名。它以后可能会被具体的不透明类取代。

请注意:按照惯例,在所有相关 IETF 标准文档中,“接口标识符”一词也指 IPv6 地址的低 64 位,其中通常使用缩写“IID”。在本文本中,术语“接口指示符”是指此类型别名的值。

变量

sIOCTLSocket

int sIOCTLSocket = -1

函数

CheckMulticastGroupArgs

INET_ERROR CheckMulticastGroupArgs(
  InterfaceId aInterfaceId,
  const IPAddress & aAddress
)

CloseIOCTLSocket

void CloseIOCTLSocket(
  void
)

关闭 GetIOCTLSocket 创建的全局套接字。

此函数适用于让全局 IOCTL 套接字保持打开状态会注册为泄露的情况。

注意:就 GetIOCTLSocket 而言,此函数不是线程安全的。

FormatInetLayerError

bool FormatInetLayerError(
  char *buf,
  uint16_t bufSize,
  int32_t err
)

如果存在 Inet 层错误,则返回直观易懂的以 NULL 结尾的 C 字符串,以描述错误。

具体说明
参数
[in] buf
将在其中放入错误字符串的缓冲区。
[in] bufSize
所提供缓冲区的大小(以字节为单位)。
[in] err
要描述的错误。
返回值
如果说明字符串已写入所提供的缓冲区,则返回 true。
返回值
如果提供的错误不是 Inet 层错误,则返回 false。

GetIOCTLSocket

int GetIOCTLSocket(
  void
)

返回可用于调用某些网络 IOCTL 的全局通用套接字。

此函数在所有平台上都是线程安全的。

GetInterfaceName

NL_DLL_EXPORT INET_ERROR GetInterfaceName(
  InterfaceId intfId,
  char *nameBuf,
  size_t nameBufSize
)

获取网络接口的名称。

Writes the name of the network interface as \c NUL terminated text string
at \c nameBuf. The name of the unspecified network interface is the empty
string.

具体说明
参数
[in] intfId
网络接口
[in] nameBuf
写入接口名称的内存区域
[in] nameBufSize
nameBuf 表示的区域的大小
返回值
INET_NO_ERROR
成功结果,接口名称为
INET_ERROR_NO_MEMORY
名称太大,无法写入缓冲区
other
其他系统或平台错误

INET_IsInetEvent

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

检查以验证 System::EventType 是否为有效的 Inet 层事件类型。

具体说明
参数
[in] aType
一种 Weave 系统层事件类型。
返回值
如果值在枚举范围内,则为 true;否则为 false。

InterfaceNameToId

NL_DLL_EXPORT INET_ERROR InterfaceNameToId(
  const char *intfName,
  InterfaceId & intfId
)

在网络接口列表中搜索指定名称。

On LwIP, this function must be called with the LwIP stack lock acquired.

The \c intfId parameter is not updated unless the value returned is
\c INET_NO_ERROR. It should be initialized with \c INET_NULL_INTERFACEID
before calling this function.

具体说明
参数
[in] intfName
要查找的网络接口的名称
[out] intfId
要分配的网络接口的指示符
返回值
INET_NO_ERROR
成功,已指示网络接口
INET_ERROR_UNKNOWN_INTERFACE
未找到网络接口
other
其他系统或平台错误

LwIPBindInterface

INET_ERROR LwIPBindInterface(
  struct raw_pcb *aRaw,
  InterfaceId intfId
)

LwIPBindInterface

INET_ERROR LwIPBindInterface(
  struct udp_pcb *aUDP,
  InterfaceId intfId
)

NetmaskToPrefixLength

uint8_t NetmaskToPrefixLength(
  const uint8_t *netmask,
  uint16_t netmaskLen
)

根据可变长度的网络掩码计算前缀长度。

ParseHostAndPort

INET_ERROR ParseHostAndPort(
  const char *aString,
  uint16_t aStringLen,
  const char *& aHost,
  uint16_t & aHostLen,
  uint16_t & aPort
)

解析包含主机或 IP 地址以及可选端口号(以“:”分隔)的人类可读字符串,支持以下格式:

  • :
  • :
  • []:

具体说明
参数
[in] aString
要解析的人类可解析字符串。
[in] aStringLen
aString 的长度(以字符为单位)。
[out] aHost
指向已解析字符串的主机名部分的指针。
[out] aHostLen
aHost 的长度(以字符为单位)。
[out] aPort
端口号(如果存在并成功解析);否则为 0。
返回值
INET_ERROR_INVALID_HOST_NAME:如果要解析的输入长度为零或格式有误。
返回值
INET_ERROR_HOST_NAME_TOO_LONG:如果主机名超过 253 个字符,
返回值
INET_NO_ERROR。如果成功,

ParseHostPortAndInterface

INET_ERROR ParseHostPortAndInterface(
  const char *aString,
  uint16_t aStringLen,
  const char *& aHost,
  uint16_t & aHostLen,
  uint16_t & aPort,
  const char *& aInterface,
  uint16_t & aInterfaceLen
)

解析一个人类可读的字符串,该字符串包含主机或 IP 地址、可选端口号(以“:”分隔)和可选接口名称(以“'”分隔),支持以下格式:

  • %
  • :
  • :%
  • %
  • :
  • :%
  • %
  • []:
  • []:%

具体说明
参数
[in] aString
要解析的人类可解析字符串。
[in] aStringLen
aString 的长度(以字符为单位)。
[out] aHost
指向已解析字符串的主机名部分的指针。
[out] aHostLen
aHost 的长度(以字符为单位)。
[out] aPort
端口号(如果存在并成功解析);否则为 0。
[out] aInterface
指向已解析字符串的接口部分的指针。
[out] aInterfaceLen
aInterface 的长度(以字符为单位)。
返回值
INET_ERROR_INVALID_HOST_NAME:如果要解析的输入长度为零或格式错误。
返回值
INET_ERROR_HOST_NAME_TOO_LONG:如果主机名超过 253 个字符,
返回值
INET_NO_ERROR。如果成功,

RegisterInetLayerErrorFormatter

void RegisterInetLayerErrorFormatter(
  void
)

针对 Inet 层错误注册文本错误格式设置工具。

SocketsIPv4JoinLeaveMulticastGroup

INET_ERROR SocketsIPv4JoinLeaveMulticastGroup(
  int aSocket,
  InterfaceId aInterfaceId,
  const IPAddress & aAddress,
  int aCommand
)

SocketsIPv6JoinLeaveMulticastGroup

INET_ERROR SocketsIPv6JoinLeaveMulticastGroup(
  int aSocket,
  InterfaceId aInterfaceId,
  const IPAddress & aAddress,
  int aCommand
)

SocketsSetMulticastLoopback

INET_ERROR SocketsSetMulticastLoopback(
  int aSocket,
  bool aLoopback,
  int aProtocol,
  int aOption
)

SocketsSetMulticastLoopback

INET_ERROR SocketsSetMulticastLoopback(
  int aSocket,
  IPVersion aIPVersion,
  bool aLoopback
)