nl::Inet::IPAddress

#include <src/inet/IPAddress.h>

網際網路通訊協定位址。

摘要

Nest Inet Layer 會使用這個類別的物件來代表網際網路通訊協定位址 (與通訊協定版本無關)。

公開屬性

Addr[4]
uint32_t
包含 IP 位址的不透明文字陣列 (與通訊協定版本無關)

公開靜態屬性

Any
辨別的未指定 IP 位址物件。

公用函式

GlobalId(void) const
uint64_t
擷取 IPv6 ULA 位址的 16 位元全域網路 ID。
InterfaceId(void) const
uint64_t
擷取 IPv6 ULA 位址的 IID。
IsIPv4(void) const
bool
測試位址是否與 IPv4 相容。
IsIPv4Broadcast(void) const
bool
測試位址是否為 IPv4 廣播。
IsIPv4Multicast(void) const
bool
測試位址是否為 IPv4 多播。
IsIPv6(void) const
bool
測試位址是否與 IPv6 相容。
IsIPv6GlobalUnicast(void) const
bool
測試位址是否為 IPv6 全域單點傳播位址。
IsIPv6LinkLocal(void) const
bool
測試位址是否為 IPv6 連結本機位址 (LL)。
IsIPv6Multicast(void) const
bool
測試位址是否為 IPv6 多播。
IsIPv6ULA(void) const
bool
測試位址是否為 IPv6 專屬本機位址 (ULA)。
IsMulticast(void) const
bool
測試位址為 IPv4 或 IPv6 多播。
Subnet(void) const
uint16_t
擷取 IPv6 ULA 位址的 16 位元子網路 ID。
ToIPv4(void) const
擷取 IPv4 位址做為平台資料結構。
ToIPv4(void) const
struct in_addr
ToIPv6(void) const
ip6_addr_t
擷取 IPv6 位址做為平台資料結構。
ToIPv6(void) const
struct in6_addr
ToString(char *buf, uint32_t bufSize) const
char *
依據傳統文字呈現格式提供 IP 位址。
Type(void) const
IPAddressType
擷取 IP 位址的類型。
WriteAddress(uint8_t *& p) const
void
以標準網路表示法發出 IP 位址。
operator!=(const IPAddress & other) const
bool
將此 IP 位址與另一個相等的 IP 位址進行比較。
operator=(const IPAddress & other)
傳統指派運算子。
operator==(const IPAddress & other) const
bool
將這個 IP 位址與其他 IP 位址進行比較,以表示相等。

公開的靜態函式

FromIPv4(const ip4_addr_t & addr)
FromIPv4(const struct in_addr & addr)
從平台資料結構插入 IPv4 位址。
FromIPv6(const ip6_addr_t & addr)
FromIPv6(const struct in6_addr & addr)
從平台資料結構插入 IPv6 位址。
FromSockAddr(const struct sockaddr & sockaddr)
從 POSIX struct sockaddr& 插入 IPv6 位址
FromString(const char *str, IPAddress & output)
bool
從常見呈現文字掃描 IP 位址。
FromString(const char *str, size_t strLen, IPAddress & output)
bool
從常見呈現文字掃描 IP 位址。
MakeIPv4Broadcast(void)
建構 IPv4 廣播位址。
MakeIPv6Multicast(uint8_t aFlags, uint8_t aScope, const uint8_t aGroupId[NL_INET_IPV6_MCAST_GROUP_LEN_IN_BYTES])
從這些部分建構 IPv6 多點傳播位址,
MakeIPv6Multicast(uint8_t aFlags, uint8_t aScope, uint32_t aGroupId)
從這些部分建構 IPv6 多點傳播位址,
MakeIPv6PrefixMulticast(uint8_t aScope, uint8_t aPrefixLength, const uint64_t & aPrefix, uint32_t aGroupId)
從分部建構一個暫時性的 IPv6 多點傳播位址,
MakeIPv6TransientMulticast(uint8_t aFlags, uint8_t aScope, const uint8_t aGroupId[NL_INET_IPV6_MCAST_GROUP_LEN_IN_BYTES])
從零件建構暫時性 IPv6 多點傳播位址。
MakeIPv6WellKnownMulticast(uint8_t aScope, uint32_t aGroupId)
從零件建構一個知名的 IPv6 多點傳播位址。
MakeLLA(uint64_t interfaceId)
根據 IID 建構 IPv6 連結本機位址 (LL)。
MakeULA(uint64_t globalId, uint16_t subnet, uint64_t interfaceId)
從其部分建構 IPv6 專屬本機位址 (ULA)。
ReadAddress(const uint8_t *& p, IPAddress & output)
void
以標準網路表示法發出 IP 位址。

公開屬性

加長器

uint32_t Addr[4]

包含 IP 位址的不透明文字陣列 (與通訊協定版本無關)

IPv6 位址會使用全部 128 位元,分為四個 32 位元網路位元組已排序的無正負號整數。IPv4 位址為 V4COMPAT,也就是說,前三個字為零,而第四個字詞包含以網路位元組順序排列的 IPv4 位址。

公開靜態屬性

任何檔案

IPAddress Any

辨別的未指定 IP 位址物件。

這個物件可用做等價比較的常數。不得由 Nest Inet 圖層的使用者修改。

公用函式

GlobalId

uint64_t GlobalId(
  void
) const 

擷取 IPv6 ULA 位址的 16 位元全域網路 ID。

請搭配 IPv6 專屬本機位址 (ULA) 使用這個方法,擷取全域網路 ID,即緊接在 ULA 網路前置字元後的 40 位元,例如「fd00::/8」。換句話說,全域網路 ID 就是從位址中的第 2 個到第 6 個位元組 (共 2 個) 的五個位元組。

詳細說明
傳回
40 位元全域網路 ID;如果 IP 位址不是 IPv6 專屬本機位址,則為零。

InterfaceId

uint64_t InterfaceId(
  void
) const 

擷取 IPv6 ULA 位址的 IID。

這個方法搭配 IPv6 專屬本機位址 (ULA) 來擷取 ID (IID),這是最低位址的 64 位元 ID。

詳細說明
傳回
64 位元介面 ID;如果 IP 位址不是 IPv6 專屬本機位址,則為零。

IsIPv4

bool IsIPv4(
  void
) const 

測試位址是否與 IPv4 相容。

使用此方法檢查此位址是否屬於 IPv4 位址系列。注意:未指定的位址不是 IPv4 位址。

詳細說明
傳回值
true
位址是 IPv4,而非未指定的位址。
false
位址是 IPv6 或未指定的位址。

IsIPv4Broadcast

bool IsIPv4Broadcast(
  void
) const 

測試位址是否為 IPv4 廣播。

使用這個方法即可檢查該位址是否為特殊用途的 IPv4 廣播位址。

詳細說明
傳回值
true
位址為 IPv4 廣播訊息
false
其他情況

IsIPv4Multicast

bool IsIPv4Multicast(
  void
) const 

測試位址是否為 IPv4 多播。

請使用這個方法檢查該位址是否為 IPv4 多點傳送位址。

詳細說明
傳回值
true
位址為 IPv4 多點傳送
false
其他情況

IsIPv6

bool IsIPv6(
  void
) const 

測試位址是否與 IPv6 相容。

請使用這個方法檢查該位址是否屬於 IPv6 位址系列。注意:未指定的位址並非 IPv6 位址。

詳細說明
傳回值
true
位址是 IPv6,而非未指定的位址。
false
位址是 IPv4 或未指定的位址。

IsIPv6GlobalUnicast

bool IsIPv6GlobalUnicast(
  void
) const 

測試位址是否為 IPv6 全域單點傳播位址。

請使用這個方法檢查該位址是否屬於 IPv6 位址系列,且具備全域單點傳播位址前置字串。

詳細說明
傳回值
true
位址為 IPv6 全球單點傳播
false
其他情況

IsIPv6LinkLocal

bool IsIPv6LinkLocal(
  void
) const 

測試位址是否為 IPv6 連結本機位址 (LL)。

請使用這個方法檢查該位址是否屬於 IPv6 位址系列,且有預留的 IPv6 連結本機位址前置字串。

詳細說明
傳回值
true
位址為 IPv6 連結本機
false
其他情況

IsIPv6Multicast

bool IsIPv6Multicast(
  void
) const 

測試位址是否為 IPv6 多播。

請使用這個方法檢查該位址是否屬於 IPv6 位址系列,且是否具有預留的 IPv6 多點傳播位址前置字串。

詳細說明
傳回值
true
位址為 IPv6 多播
false
其他情況

伊塞凡.6ULA

bool IsIPv6ULA(
  void
) const 

測試位址是否為 IPv6 專屬本機位址 (ULA)。

請使用這個方法檢查該位址是否屬於 IPv6 位址系列,且具備預留的 IPv6 專屬本機位址前置字串。

詳細說明
傳回值
true
位址是 IPv6 專屬本機位址
false
其他情況

IsMulticast

bool IsMulticast(
  void
) const 

測試位址為 IPv4 或 IPv6 多播。

請使用這個方法檢查該位址是否屬於 IPv4 或 IPv6 位址系列,且具備預留的 IPv4 或 IPv6 多點傳播位址前置字串。

詳細說明
傳回值
true
位址為 IPv4 或 IPv6 多播
false
其他情況

子網路

uint16_t Subnet(
  void
) const 

擷取 IPv6 ULA 位址的 16 位元子網路 ID。

搭配 IPv6 專屬本機位址 (ULA) 使用這個方法,即可擷取子網路 ID,這個 ID 是網路前置字串最低的 16 位元。網路前置字串是位址最重要的 64 位元。換句話說,子網路 ID 位於 16 位元組位址的第 7 和 8 個位元組中。

詳細說明
傳回
16 位元子網路 ID;如果 IP 位址不是 IPv6 專屬本機位址,則為零。

ToIPv4

ip4_addr_t ToIPv4(
  void
) const 

擷取 IPv4 位址做為平台資料結構。

如果可以,請使用 ToIPv4() const 將內容擷取為 IPv4 位址。系統會將 IPv6 位址和未指定的位址擷取為 0.0.0.0

結果可能是 struct in_addr (在 POSIX 上) 或 ip4_addr_t (LwIP) 類型。

詳細說明
傳回
封裝的 IPv4 位址;如果是未指定或非 IPv4 位址,則為 0.0.0.0

ToIPv4

struct in_addr ToIPv4(
  void
) const 

ToIPv6

ip6_addr_t ToIPv6(
  void
) const 

擷取 IPv6 位址做為平台資料結構。

如果可以,請使用 ToIPv6() const 將內容擷取為 IPv6 位址。系統會將 IPv4 位址和未指定的位址擷取為 [::]

結果可能是 struct in6_addr (在 POSIX 上) 或 ip6_addr_t (LwIP) 類型。

詳細說明
傳回
封裝的 IPv4 位址,或 [::] if the address is either unspecified or not an IPv4 address.

ToIPv6

struct in6_addr ToIPv6(
  void
) const 

ToString

char * ToString(
  char *buf,
  uint32_t bufSize
) const 

依據傳統文字呈現格式提供 IP 位址。

使用 ToString(char *buf, uint32_t bufSize) const 將 IP 位址的傳統文字呈現形式寫入位於 buf 的記憶體,並擴充至 bufSize 位元組 (包括 NUL 終止字元)。

詳細說明
參數
[out] buf
發出的文字地址。
[in] bufSize
發出的文字的緩衝區大小。

注意:部分平台不符合 RFC 5952 規範。具體而言,根據第 4.2 節,系統可能無法套用零壓縮。

詳細說明
傳回
沒有格式錯誤時引數 buf,否則傳回零。

類型

IPAddressType Type(
  void
) const 

擷取 IP 位址的類型。

請使用這個方法傳回列舉類型 IPAddressType 的值,表示 IP 位址的類型。

詳細說明
傳回值
kIPAddressType_IPv4
位址為 IPv4。
kIPAddressType_IPv6
位址為 IPv6。
kIPAddressType_Any
地址是未指定的地址。

WriteAddress

void WriteAddress(
  uint8_t *& p
) const 

以標準網路表示法發出 IP 位址。

使用 WriteAddress(uint8_t *&p) 將 IP 位址編碼為 RFC 4291 針對 IPv6 位址定義的二進位格式。IPv4 位址編碼依據為第 2.5.5.1 節「IPv4-相容的 IPv6 位址」(V4COMPAT)。

詳細說明
參數
[in,out] p
用於寫入的遊標參照。

運算子!=

bool operator!=(
  const IPAddress & other
) const 

將此 IP 位址與另一個相等的 IP 位址進行比較。

詳細說明
參數
[in] other
要比較的地址。
傳回值
true
如果等於 other
false
其他情況

運算子=

IPAddress & operator=(
  const IPAddress & other
)

傳統指派運算子。

詳細說明
參數
[in] other
要複製的地址。
傳回
對這個物件的參照。

運算子==

bool operator==(
  const IPAddress & other
) const 

將這個 IP 位址與其他 IP 位址進行比較,以表示相等。

詳細說明
參數
[in] other
要比較的地址。
傳回值
true
如果等於 other
false
其他情況

公開的靜態函式

FromIPv4

IPAddress FromIPv4(
  const ip4_addr_t & addr
)

這是為方便起見而提供的超載成員函式。這個函式與上述函式不同,僅限於它接受的引數。

FromIPv4

IPAddress FromIPv4(
  const struct in_addr & addr
)

從平台資料結構插入 IPv4 位址。

使用 FromIPv4(const ip4_addr_t &addr)addr 插入為 IPv4 位址。

引數 addr 不是類型 const struct in_addr& (在 POSIX 上) 或 const ip4_addr_t& (LwIP)。

詳細說明
傳回
建構的 IP 位址。

FromIPv6

IPAddress FromIPv6(
  const ip6_addr_t & addr
)

這是為方便起見而提供的超載成員函式。這個函式與上述函式不同,僅限於它接受的引數。

FromIPv6

IPAddress FromIPv6(
  const struct in6_addr & addr
)

從平台資料結構插入 IPv6 位址。

使用 FromIPv6(const ip6_addr_t &addr)addr 插入為 IPv6 位址。

引數 addr 不是類型 const struct in6_addr& (在 POSIX 上) 或 const ip6_addr_t& (LwIP)。

詳細說明
傳回
建構的 IP 位址。

FromSockAddr

IPAddress FromSockAddr(
  const struct sockaddr & sockaddr
)

從 POSIX struct sockaddr& 插入 IPv6 位址

使用 FromSockAddr(const struct sockaddr& sockaddr)sockaddr.sa_addr 插入為 IPv6 位址。

詳細說明
傳回
建構的 IP 位址。

FromString

bool FromString(
  const char *str,
  IPAddress & output
)

從常見呈現文字掃描 IP 位址。

使用 FromString(const char *str, IPAddress& output) 掃描 str 中的傳統文字呈現方式,藉此覆寫 IP 位址。

詳細說明
參數
[in] str
發出的文字地址。
[out] output
要設定為掃描地址的物件。

詳細說明
傳回值
true
此呈現格式有效
false
其他情況

FromString

bool FromString(
  const char *str,
  size_t strLen,
  IPAddress & output
)

從常見呈現文字掃描 IP 位址。

使用 FromString(const char *str, size_t strLen, IPAddress& output) 掃描 str 中的傳統文字呈現方式,藉此覆寫 IP 位址。

詳細說明
參數
[in] str
指向要掃描文字的指標。
[in] strLen
要掃描的文字長度。
[out] output
要設定為掃描地址的物件。

詳細說明
傳回值
true
此呈現格式有效
false
其他情況

MakeIPv4Broadcast

IPAddress MakeIPv4Broadcast(
  void
)

建構 IPv4 廣播位址。

詳細說明
傳回
建構的 IP 位址。

MakeIPv6Multicast

IPAddress MakeIPv6Multicast(
  uint8_t aFlags,
  uint8_t aScope,
  const uint8_t aGroupId[NL_INET_IPV6_MCAST_GROUP_LEN_IN_BYTES]
)

從這些部分建構 IPv6 多點傳播位址,

使用 MakeIPv6Multicast(uint8_t flags, uint8_t scope, uint8_t groupId[14]) 透過 flags 建構 IPv6 多點傳送位址,用於轉送範圍 scope 和群組 ID 八位元 groupId

詳細說明
傳回
建構的 IP 位址。

MakeIPv6Multicast

IPAddress MakeIPv6Multicast(
  uint8_t aFlags,
  uint8_t aScope,
  uint32_t aGroupId
)

從這些部分建構 IPv6 多點傳播位址,

使用 MakeIPv6Multicast(uint8_t flags, uint8_t scope, uint32_t groupId) 透過 flags 建構 IPv6 多點傳送位址,用於轉送範圍 scope 和群組 ID groupId

詳細說明
傳回
建構的 IP 位址。

MakeIPv6PrefixMulticast

IPAddress MakeIPv6PrefixMulticast(
  uint8_t aScope,
  uint8_t aPrefixLength,
  const uint64_t & aPrefix,
  uint32_t aGroupId
)

從分部建構一個暫時性的 IPv6 多點傳播位址,

使用 MakeIPv6PrefixMulticast(uint8_t scope, uint8_t prefixlen, const uint64_t prefix, uint32_t groupId) 建構暫時性的 IPv6 多點傳送位址,該位址用於轉送範圍 scope 和群組 ID 八位元 groupId,並通過長度為 prefixlen 位元的前置字串 prefix

詳細說明
傳回
建構的 IP 位址。

MakeIPv6TransientMulticast

IPAddress MakeIPv6TransientMulticast(
  uint8_t aFlags,
  uint8_t aScope,
  const uint8_t aGroupId[NL_INET_IPV6_MCAST_GROUP_LEN_IN_BYTES]
)

從零件建構暫時性 IPv6 多點傳播位址。

使用 MakeIPv6TransientMulticast(uint8_t flags, uint8_t scope, uint8_t groupId[14]) 建立暫時性 IPv6 多點傳送位址,搭配 flags 用於轉送範圍 scope 和群組 ID 八位元 groupId

詳細說明
傳回
建構的 IP 位址。

MakeIPv6WellKnownMulticast

IPAddress MakeIPv6WellKnownMulticast(
  uint8_t aScope,
  uint32_t aGroupId
)

從零件建構一個知名的 IPv6 多點傳播位址。

使用 MakeIPv6WellKnownMulticast(uint8_t scope, uint32_t groupId) 建構 IPv6 多點傳送位址,以便用於轉送範圍 scope 和群組 ID groupId

詳細說明
傳回
建構的 IP 位址。

MakeLLA

IPAddress MakeLLA(
  uint64_t interfaceId
)

根據 IID 建構 IPv6 連結本機位址 (LL)。

使用 MakeLLA(uint64_t interfaceId) 建構含有介面 ID interfaceId 的 IPv6 連結本機位址 (LL)。

詳細說明
傳回
建構的 IP 位址。

MakeULA

IPAddress MakeULA(
  uint64_t globalId,
  uint16_t subnet,
  uint64_t interfaceId
)

從其部分建構 IPv6 專屬本機位址 (ULA)。

使用 MakeULA(uint64_t globalId, uint16_t subnet, uint64_t interfaceId) 以全域網路 ID globalId、子網路 ID subnet 和介面 ID (IID) interfaceId 建立專屬本機位址 (ULA)。

詳細說明
傳回
建構的 IP 位址。

ReadAddress

void ReadAddress(
  const uint8_t *& p,
  IPAddress & output
)

以標準網路表示法發出 IP 位址。

使用 ReadAddress(uint8_t *&p, IPAddress &output) 將位於 p 的 IP 位址解碼為 output 物件。

詳細說明
參數
[in,out] p
參照要用於閱讀的遊標。
[out] output
要接收已解碼 IP 位址的物件。