nl::Inet::IPEndPointBasis

#include <src/inet/IPEndPointBasis.h>

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

摘要

继承

继承自nl::Inet::EndPointBasis
直接已知子类
nl::Inet::RawEndPoint
nl::Inet::UDPEndPoint

公共类型

@8{
  kState_Ready = kBasisState_Closed,
  kState_Bound = 1,
  kState_Listening = 2,
  kState_Closed = 3
}
枚举
底层端点的基本动态状态。
@9{
  kSendFlag_RetainBuffer = 0x0040
}
枚举
用于 SendMsg 方法的传输选项标志。
OnMessageReceivedFunct)(IPEndPointBasis *endPoint, Weave::System::PacketBuffer *msg, const IPPacketInfo *pktInfo) typedef
void(*
消息文本接收事件处理函数的类型。
OnReceiveErrorFunct)(IPEndPointBasis *endPoint, INET_ERROR err, const IPPacketInfo *pktInfo) typedef
void(*
接收错误事件处理函数的类型。

公共属性

OnMessageReceived
端点的消息接收事件处理函数委托。
OnReceiveError
端点会接收错误事件处理函数委托。
mState
enum nl::Inet::IPEndPointBasis::@8
底层端点的基本动态状态。

受保护的属性

mBoundIntfId
InterfaceId

公共函数

JoinMulticastGroup(InterfaceId aInterfaceId, const IPAddress & aAddress)
加入 IP 多播群组。
LeaveMulticastGroup(InterfaceId aInterfaceId, const IPAddress & aAddress)
退出 IP 多播群组。
SetMulticastLoopback(IPVersion aIPVersion, bool aLoopback)
设置是否应环回 IP 多播流量。

受保护的函数

Bind(IPAddressType aAddressType, IPAddress aAddress, uint16_t aPort, InterfaceId aInterfaceId)
BindInterface(IPAddressType aAddressType, InterfaceId aInterfaceId)
GetSocket(IPAddressType aAddressType, int aType, int aProtocol)
HandleDataReceived(Weave::System::PacketBuffer *aBuffer)
void
HandlePendingIO(uint16_t aPort)
void
Init(InetLayer *aInetLayer)
void
PrepareIO(void)
SendMsg(const IPPacketInfo *aPktInfo, Weave::System::PacketBuffer *aBuffer, uint16_t aSendFlags)

公共静态函数

FindNetifFromInterfaceId(InterfaceId aInterfaceId)
struct netif *

受保护的静态函数

GetPacketInfo(Weave::System::PacketBuffer *buf)
获取 LwIP IP 层来源和目标地址信息。

公共类型

@8

 @8

底层端点的基本动态状态。

在绑定到本地接口地址后,对象会初始化为“就绪”状态,在绑定到本地接口地址后继续进入“绑定”状态,然后在对象注册了继续处理事件以便继续接收 ICMP 消息的“监听”状态。

注意:出于历史二进制文件兼容性原因,kBasisState_Closed 状态枚举会映射到 kState_Ready。现有 kState_Closed 用于单独标识之前处于 kState_ReadykState_Closed 状态的“尚未打开”和“之前打开过现在已关闭”的区别。

属性
kState_Bound

已绑定端点,但不侦听。

kState_Closed

端点已关闭,可供发布。

kState_Listening

接收数据报的端点。

kState_Ready

端点已初始化,但没有打开。

@9

 @9

用于 SendMsg 方法的传输选项标志。

属性
kSendFlag_RetainBuffer

不要直接破坏消息。

将副本加入队列。

OnMessageReceivedFunct

void(* OnMessageReceivedFunct)(IPEndPointBasis *endPoint, Weave::System::PacketBuffer *msg, const IPPacketInfo *pktInfo)

消息文本接收事件处理函数的类型。

OnMessageReceived 代理成员提供此类型的函数,以在 endPoint 上处理消息文本接收事件,其中 msg 是从发送者 senderAddr 接收的消息文本。

详细信息
参数
[in] endPoint
与事件关联的端点。
[in] msg
收到的消息文本。
[in] senderAddr
发件人的 IP 地址。

OnReceiveErrorFunct

void(* OnReceiveErrorFunct)(IPEndPointBasis *endPoint, INET_ERROR err, const IPPacketInfo *pktInfo)

接收错误事件处理函数的类型。

OnReceiveError 代理成员提供此类型的函数,以便在 endPoint 上处理接收错误事件。err 参数用于提供有关错误类型的具体详细信息。

详细信息
参数
[in] endPoint
与事件关联的端点。
[in] err
出现错误的原因。

公共属性

OnMessageReceived

OnMessageReceivedFunct OnMessageReceived

端点的消息接收事件处理函数委托。

OnReceiveError

OnReceiveErrorFunct OnReceiveError

端点会接收错误事件处理函数委托。

mState

enum nl::Inet::IPEndPointBasis::@8 mState

底层端点的基本动态状态。

在绑定到本地接口地址后,对象会初始化为“就绪”状态,在绑定到本地接口地址后继续进入“绑定”状态,然后在对象注册了继续处理事件以便继续接收 ICMP 消息的“监听”状态。

注意:出于历史二进制文件兼容性原因,kBasisState_Closed 状态枚举会映射到 kState_Ready。现有 kState_Closed 用于单独标识之前处于 kState_ReadykState_Closed 状态的“尚未打开”和“之前打开过现在已关闭”的区别。

受保护的属性

mBoundIntfId

InterfaceId mBoundIntfId

公共函数

加入多播群组

INET_ERROR JoinMulticastGroup(
  InterfaceId aInterfaceId,
  const IPAddress & aAddress
)

加入 IP 多播群组。

将该端点加入指定接口上提供的多播组。

详细信息
参数
[in] aInterfaceId
要添加到多播群组的网络接口的指示符
[in] aAddress
添加接口的多播群组
返回值
INET_NO_ERROR
成功:移除了多播群组
INET_ERROR_UNKNOWN_INTERFACE
未知网络接口,aInterfaceId
INET_ERROR_WRONG_ADDRESS_TYPE
aAddress”既非 kIPAddressType_IPv4kIPAddressType_IPv6,也非多播
other
其他系统或平台错误

退出多播群组

INET_ERROR LeaveMulticastGroup(
  InterfaceId aInterfaceId,
  const IPAddress & aAddress
)

退出 IP 多播群组。

从指定接口上提供的多播组中移除端点。

详细信息
参数
[in] aInterfaceId
指示从多播群组中移除的网络接口的指示符
[in] aAddress
要从中移除接口的多播群组
返回值
INET_NO_ERROR
成功:移除了多播群组
INET_ERROR_UNKNOWN_INTERFACE
未知网络接口,aInterfaceId
INET_ERROR_WRONG_ADDRESS_TYPE
aAddress”既非 kIPAddressType_IPv4kIPAddressType_IPv6,也非多播
other
其他系统或平台错误

SetMulticastLoopback

INET_ERROR SetMulticastLoopback(
  IPVersion aIPVersion,
  bool aLoopback
)

设置是否应环回 IP 多播流量。

设置是否应将 IP 多播流量环回到此端点。

详细信息
参数
[in] aIPVersion
[in] aLoop
返回值
INET_NO_ERROR
成功:多播环回行为集
other
其他系统或平台错误

受保护的函数

绑定

INET_ERROR Bind(
  IPAddressType aAddressType,
  IPAddress aAddress,
  uint16_t aPort,
  InterfaceId aInterfaceId
)

bindInterface

INET_ERROR BindInterface(
  IPAddressType aAddressType,
  InterfaceId aInterfaceId
)

GetSocket

INET_ERROR GetSocket(
  IPAddressType aAddressType,
  int aType,
  int aProtocol
)

HandleDataReceived

void HandleDataReceived(
  Weave::System::PacketBuffer *aBuffer
)

HandlePendingIO

void HandlePendingIO(
  uint16_t aPort
)

Init

void Init(
  InetLayer *aInetLayer
)

准备 IO

SocketEvents PrepareIO(
  void
)

发送消息

INET_ERROR SendMsg(
  const IPPacketInfo *aPktInfo,
  Weave::System::PacketBuffer *aBuffer,
  uint16_t aSendFlags
)

公共静态函数

FindNetifFromInterfaceId

struct netif * FindNetifFromInterfaceId(
  InterfaceId aInterfaceId
)

受保护的静态函数

GetPacketInfo

IPPacketInfo * GetPacketInfo(
  Weave::System::PacketBuffer *buf
)

获取 LwIP IP 层来源和目标地址信息。

当使用有关数据包的 LwIP 信息时,在数据包缓冲区数据开始之前,会在预留空间中处于“隐藏”状态。这是必要的,因为系统层事件只有两个参数,在本例中,这两个参数用于传递指向端点和指针的缓冲区。

详细信息
参数
[in] aBuffer
包含 IP 消息的数据包缓冲区
返回值
指向成功地址信息的指针;否则,如果数据包中没有足够的地址容纳地址信息,则值为 NULL。

在大多数情况下,这种在数据运行之前存储信息的技巧,因为 LwIP IP 消息中的第一个缓冲区包含用于以太网/IP/UDP 标头的空间。不过,考虑到 IPPacketInfo 结构的当前大小(40 字节),因此在单个数据包缓冲区中没有足够的空间来存储该结构和载荷。在实践中,超大 IPv4 数据包只有在没有以太网标头的情况下才能收到。