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

公共函数

JoinMulticastGroup

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
其他系统或平台错误

LeaveMulticastGroup

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
其他系统或平台错误

受保护的函数

Bind

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
)

PrepareIO

SocketEvents PrepareIO(
  void
)

SendMsg

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 数据包送达时没有以太网标头,这时才会出现这种情况。