nl::Inet::RawEndPoint

#include <src/inet/RawEndPoint.h>

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

摘要

由于系统的配置,Nest Inet 层会封装与 IP 网络端点(Linux 和 BSD 派生系统中的 SOCK_RAW 套接字)或 LwIP 原始协议控制块交互的方法。

继承

继承自nl::Inet::IPEndPointBasis

公共属性

IPProto
IPProtocol
互联网控制消息协议 (ICMP) 版本
IPVer
IPVersion
互联网协议的版本。

公共函数

Bind(IPAddressType addrType, IPAddress addr, InterfaceId intfId)
将端点绑定到接口 IP 地址。
BindIPv6LinkLocal(InterfaceId intf, IPAddress addr)
将原始端点绑定到指定接口索引上的 IPv6 链路本地范围地址。
BindInterface(IPAddressType addrType, InterfaceId intf)
将端点绑定到网络接口。
Close(void)
void
关闭端点。
Free(void)
void
关闭端点并回收其内存。
GetBoundInterface(void)
InterfaceId
获取此端点上的绑定接口。
Listen(void)
准备端点以接收 ICMP 消息。
SendMsg(const IPPacketInfo *pktInfo, Weave::System::PacketBuffer *msg, uint16_t sendFlags)
向指定目的地发送 ICMP 消息。
SendTo(IPAddress addr, Weave::System::PacketBuffer *msg, uint16_t sendFlags)
SendTo(addr, INET_NULL_INTERFACEID, msg, sendFlags) 的同义词。
SendTo(IPAddress addr, InterfaceId intfId, Weave::System::PacketBuffer *msg, uint16_t sendFlags)
向指定的目标地址发送 ICMP 消息。
SetICMPFilter(uint8_t numICMPTypes, const uint8_t *aICMPTypes)
在网络堆栈中设置 ICMP6 过滤器参数。

公共属性

IP 协议

IPProtocol IPProto

互联网控制消息协议 (ICMP) 版本

虽然此字段是可变类变量,但它是未经修改的类的不变变量。

IPVER

IPVersion IPVer

互联网协议的版本。

虽然此字段是可变类变量,但它是未经修改的类的不变变量。

公共函数

绑定

INET_ERROR Bind(
  IPAddressType addrType,
  IPAddress addr,
  InterfaceId intfId
)

将端点绑定到接口 IP 地址。

将端点绑定到指定的网络接口 IP 地址。

详细信息
参数
[in] addrType
IP 地址的协议版本
[in] addr
IP 地址(必须是接口地址)
[in] intfId
可选的网络接口指示器
返回值
INET_NO_ERROR
成功:端点已绑定到地址
INET_ERROR_INCORRECT_STATE
端点之前绑定完毕
INET_NO_MEMORY
端点内存不足
INET_ERROR_UNKNOWN_INTERFACE
在某些平台上,可以选择指定的接口不存在。
INET_ERROR_WRONG_PROTOCOL_TYPE
addrTypeIPVer 不匹配。
INET_ERROR_WRONG_ADDRESS_TYPE
addrType”为“kIPAddressType_Any”或“addr”类型不是“addrType”。
other
其他系统或平台错误

在 LwIP 上,不得在已获取 LwIP 堆栈锁定的情况下调用此方法。

BindIPv6LinkLocal

INET_ERROR BindIPv6LinkLocal(
  InterfaceId intf,
  IPAddress addr
)

将原始端点绑定到指定接口索引上的 IPv6 链路本地范围地址。

还会设置各种适用于在链路目的地之间传输数据包的 IPv6 套接字选项。

将端点绑定到 intf 所指示的网络接口上的 IPv6 链路本地地址 addr

详细信息
参数
[in] intf
用于标识地址范围的 InterfaceId。
[in] addr
IPv6 链路本地范围 IPAddress 对象。
参数
[in] intf
网络接口的指示符
[in] addr
IP 地址(必须是接口地址)
返回值
INET_NO_ERROR
成功:端点已绑定到地址
INET_ERROR_INCORRECT_STATE
端点之前绑定完毕
INET_NO_MEMORY
端点内存不足
INET_ERROR_WRONG_PROTOCOL_TYPE
addrTypeIPVer 不匹配。
INET_ERROR_WRONG_ADDRESS_TYPE
addr 不是 IPv6 链路本地地址,或 intfINET_NULL_INTERFACEID
other
其他系统或平台错误
返回值
INET_NO_ERROR(如果成功)或映射的操作系统错误(如果失败)。参数列表无效可能会导致 INET_ERROR_WRONG_ADDRESS_TYPE。如果原始端点已绑定或正在侦听,则返回 INET_ERROR_INCORRECT_STATE。将端点绑定到接口 IPv6 链路本地地址。

在 LwIP 上,不得在已获取 LwIP 堆栈锁定的情况下调用此方法。

bindInterface

INET_ERROR BindInterface(
  IPAddressType addrType,
  InterfaceId intf
)

将端点绑定到网络接口。

将端点绑定到指定的网络接口 IP 地址。

详细信息
参数
[in] addrType
IP 地址的协议版本。
[in] intf
指示网络接口。
返回值
INET_NO_ERROR
成功:端点已绑定到地址
INET_NO_MEMORY
端点内存不足
INET_ERROR_NOT_IMPLEMENTED
系统实现尚未完成。
INET_ERROR_UNKNOWN_INTERFACE
在某些平台上,接口不存在。
other
其他系统或平台错误

在 LwIP 上,不得在已获取 LwIP 堆栈锁定的情况下调用此方法。

关闭

void Close(
  void
)

关闭端点。

如果为 mState != kState_Closed,则系统会关闭端点,将其从符合通信事件的端点集中移除。

在 LwIP 系统中,不得在已获取 LwIP 堆栈锁定的情况下调用此方法。

免费

void Free(
  void
)

关闭端点并回收其内存。

调用 Close 方法,然后调用 InetLayerBasis::Release 方法将对象返回到其内存池。

在 LwIP 系统中,不得在已获取 LwIP 堆栈锁定的情况下调用此方法。

GetBoundInterface 接口

InterfaceId GetBoundInterface(
  void
)

获取此端点上的绑定接口。

详细信息
返回值
InterfaceId。绑定的接口 ID。

听发音

INET_ERROR Listen(
  void
)

准备端点以接收 ICMP 消息。

如果 mState 已处于 kState_Listening 状态,则无需执行任何操作,否则 mState 会设置为 kState_Listening 并且端点会准备好接收 ICMPv6 消息(根据平台语义)。

详细信息
返回值
INET_NO_ERROR
始终返回。

在 LwIP 上,不得在已获取 LwIP 堆栈锁定的情况下调用此方法

发送消息

INET_ERROR SendMsg(
  const IPPacketInfo *pktInfo,
  Weave::System::PacketBuffer *msg,
  uint16_t sendFlags
)

向指定目的地发送 ICMP 消息。

 Send the ICMP message \c msg using the destination information given in \c addr.

 Where (sendFlags & kSendFlag_RetainBuffer) != 0, calls
 Weave::System::PacketBuffer::Free on behalf of the caller, otherwise this
 method deep-copies \c msg into a fresh object, and queues that for
 transmission, leaving the original \c msg available after return.

详细信息
参数
[in] pktInfo
消息的目的地信息
[in] msg
包含 UDP 消息的数据包缓冲区
[in] sendFlags
可选的传输选项标志
返回值
INET_NO_ERROR
成功:msg已排队等待传输。
INET_ERROR_NOT_SUPPORTED
系统不支持所请求的操作。
INET_ERROR_WRONG_ADDRESS_TYPE
目标地址和绑定接口地址的协议版本或地址类型不匹配。
INET_ERROR_MESSAGE_TOO_LONG
msg 不包含完整的 ICMP 消息。
INET_ERROR_OUTBOUND_MESSAGE_TRUNCATED
在某些平台上,只有被截断的 msg 部分会被加入队列等待传输。
other
其他系统或平台错误

发送到

INET_ERROR SendTo(
  IPAddress addr,
  Weave::System::PacketBuffer *msg,
  uint16_t sendFlags
)

SendTo(addr, INET_NULL_INTERFACEID, msg, sendFlags) 的同义词。

发送到

INET_ERROR SendTo(
  IPAddress addr,
  InterfaceId intfId,
  Weave::System::PacketBuffer *msg,
  uint16_t sendFlags
)

向指定的目标地址发送 ICMP 消息。

 Send the ICMP message in \c msg to the destination given in \c addr.

 Where (sendFlags & kSendFlag_RetainBuffer) != 0, calls
 Weave::System::PacketBuffer::Free on behalf of the caller, otherwise this
 method deep-copies \c msg into a fresh object, and queues that for
 transmission, leaving the original \c msg available after return.

详细信息
参数
[in] addr
目标 IP 地址
[in] intfId
可选的网络接口指示器
[in] msg
包含 UDP 消息的数据包缓冲区
[in] sendFlags
可选的传输选项标志
返回值
INET_NO_ERROR
成功:msg已排队等待传输。
INET_ERROR_NOT_SUPPORTED
系统不支持所请求的操作。
INET_ERROR_WRONG_ADDRESS_TYPE
目标地址和绑定接口地址的协议版本或地址类型不匹配。
INET_ERROR_MESSAGE_TOO_LONG
msg 不包含完整的 ICMP 消息。
INET_ERROR_OUTBOUND_MESSAGE_TRUNCATED
在某些平台上,只有被截断的 msg 部分会被加入队列等待传输。
other
其他系统或平台错误

SetICMPFilter

INET_ERROR SetICMPFilter(
  uint8_t numICMPTypes,
  const uint8_t *aICMPTypes
)

在网络堆栈中设置 ICMP6 过滤器参数。

aICMPTypes 中的代码的 ICMPv6 过滤参数应用于系统网络堆栈中的底层端点。

详细信息
参数
[in] numICMPTypes
aICMPTypes 中的数组长度
[in] aICMPTypes
要过滤的 ICMPv6 类型代码集。
返回值
INET_NO_ERROR
成功:设置过滤器参数
INET_ERROR_NOT_IMPLEMENTED
系统未实现
INET_ERROR_WRONG_ADDRESS_TYPE
端点不是 IPv6 类型
INET_ERROR_WRONG_PROTOCOL_TYPE
端点不是 ICMP6 类型
other
其他系统或平台错误