nl::Inet::RawEndPoint

#include <src/inet/RawEndPoint.h>

這個類別的物件代表原始 IP 網路端點。

摘要

Nest Inet Layer 會封裝與 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 篩選器參數。

公開屬性

IPProto

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
addrType與「IPVer」不相符。
INET_ERROR_WRONG_ADDRESS_TYPE
addrTypekIPAddressType_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
addrType與「IPVer」不相符。
INET_ERROR_WRONG_ADDRESS_TYPE
addr 不是 IPv6 連結本機位址,intf 則為 INET_NULL_INTERFACEID
other
其他系統或平台錯誤
傳回
成功時發出 INET_NO_ERROR,或失敗時對應的 OS 錯誤。無效參數清單可能會導致 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 堆疊鎖定時呼叫這個方法

SendMsg

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
其他系統或平台錯誤

SendTo

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

SendTo(addr, INET_NULL_INTERFACEID, msg, sendFlags) 的同義詞。

SendTo

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
其他系統或平台錯誤