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
}
枚举
IP 地址系列。
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

IP 地址系列。

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。
返回值
false 如果提供的错误不是 Inet 层错误。

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
Host 的长度(以字符为单位)。
[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
Host 的长度(以字符为单位)。
[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
)