透過集合功能整理內容 你可以依據偏好儲存及分類內容。

NL::內網:: IP地址

#include <src/inet/IPAddress.h>

互聯網協議地址。

概括

Nest Inet 層使用此類的對象來表示 Internet 協議地址(與協議版本無關)。

公共屬性

Addr [4]
uint32_t
包含 IP 地址的不透明字數組(獨立於協議版本)

公共靜態屬性

Any
可區分的未指定 IP 地址對象。

公共職能

GlobalId (void) const
uint64_t
提取 IPv6 ULA 地址的 16 位全局網絡標識符。
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 位子網標識符。
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 IPv6地址struct sockaddr&
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 層的用戶不得對其進行修改。

公共職能

全局 ID

uint64_t GlobalId(
  void
) const 

提取 IPv6 ULA 地址的 16 位全局網絡標識符。

將此方法與 IPv6 唯一本地地址 (ULA) 結合使用以提取全局網絡標識符,該標識符是緊跟可區分的 ULA 網絡前綴的 40 位,即 fd00::/8。換句話說,全局網絡標識符位於地址中從第 2 個字節到第 6 個字節的五個字節中。

細節
退貨
40 位全球網絡標識符,如果 IP 地址不是 IPv6 唯一本地地址,則為零。

接口標識

uint64_t InterfaceId(
  void
) const 

提取 IPv6 ULA 地址的 IID。

將此方法與 IPv6 唯一本地地址 (ULA) 結合使用以提取標識符標識符 (IID),它是地址的最低有效 64 位。

細節
退貨
64 位接口標識符,如果 IP 地址不是 IPv6 唯一本地地址,則為零。

是IPv4

bool IsIPv4(
  void
) const 

測試地址是否兼容 IPv4。

使用此方法檢查地址是否屬於 IPv4 地址族。請注意:未指定的地址不是 IPv4 地址。

細節
返回值
true
該地址是 IPv4 而不是未指定的地址。
false
地址是 IPv6 或未指定的地址。

是IPv4廣播

bool IsIPv4Broadcast(
  void
) const 

測試地址是否為 IPv4 廣播。

使用此方法檢查地址是否為專用 IPv4 廣播地址。

細節
返回值
true
地址是 IPv4 廣播
false
除此以外

是IPv4組播

bool IsIPv4Multicast(
  void
) const 

測試地址是否為 IPv4 組播。

使用此方法檢查地址是否為 IPv4 多播地址。

細節
返回值
true
地址是 IPv4 多播
false
除此以外

是IPv6

bool IsIPv6(
  void
) const 

測試地址是否兼容 IPv6。

使用此方法檢查地址是否屬於 IPv6 地址族。請注意:未指定的地址不是 IPv6 地址。

細節
返回值
true
該地址是 IPv6 而不是未指定的地址。
false
地址是 IPv4 或未指定的地址。

IsIPv6全球單播

bool IsIPv6GlobalUnicast(
  void
) const 

測試地址是否為IPv6全球單播地址。

使用此方法檢查地址是否屬於 IPv6 地址族並具有全局單播地址前綴。

細節
返回值
true
地址為 IPv6 全球單播
false
除此以外

IsIPv6LinkLocal

bool IsIPv6LinkLocal(
  void
) const 

測試地址是否為 IPv6 鏈路本地地址 (LL)。

使用此方法檢查地址是否屬於 IPv6 地址族並具有保留的 IPv6 鏈路本地地址前綴。

細節
返回值
true
地址是 IPv6 鏈路本地
false
除此以外

是IPv6組播

bool IsIPv6Multicast(
  void
) const 

測試地址是否為IPv6組播。

使用此方法檢查地址是否屬於 IPv6 地址族並具有保留的 IPv6 組播地址前綴。

細節
返回值
true
地址是 IPv6 組播
false
除此以外

是IPv6ULA

bool IsIPv6ULA(
  void
) const 

測試地址是否為 IPv6 唯一本地地址 (ULA)。

使用此方法檢查地址是否屬於 IPv6 地址族並具有保留的 IPv6 唯一本地地址前綴。

細節
返回值
true
地址是 IPv6 unique-local
false
除此以外

是多播

bool IsMulticast(
  void
) const 

測試地址是 IPv4 還是 IPv6 組播。

使用此方法檢查地址是否屬於 IPv4 或 IPv6 地址族並具有保留的 IPv4 或 IPv6 組播地址前綴。

細節
返回值
true
地址是 IPv4 或 IPv6 多播
false
除此以外

子網

uint16_t Subnet(
  void
) const 

提取 IPv6 ULA 地址的 16 位子網標識符。

將此方法與 IPv6 唯一本地地址 (ULA) 結合使用以提取子網標識符,它是網絡前綴的最低 16 位。網絡前綴是地址的最高 64 位。換句話說,子網標識符位於 16 字節地址的第 7 個和第 8 個字節中。

細節
退貨
16 位子網標識符,如果 IP 地址不是 IPv6 唯一本地地址,則為零。

到IPv4

ip4_addr_t ToIPv4(
  void
) const 

提取 IPv4 地址作為平台數據結構。

使用ToIPv4() const提取內容作為IPv4地址,如果可能的話。 IPv6地址和非指定地址被提取為0.0.0.0

其結果是類型的任一struct in_addr (上POSIX)或ip4_addr_t (上LwIP的)。

細節
退貨
封裝的IPv4地址,或者0.0.0.0如果地址是未指定的或不是IPv4地址。

到IPv4

struct in_addr ToIPv4(
  void
) const 

到IPv6

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.

到IPv6

struct in6_addr ToIPv6(
  void
) const 

字符串

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
地址是未指定的地址。

寫地址

void WriteAddress(
  uint8_t *& p
) const 

以標準網絡表示形式發出 IP 地址。

使用WriteAddress(uint8_t *&p)以在由RFC 4291為IPv6地址定義的二進制格式編碼的IP地址。 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
除此以外

公共靜態函數

來自IPv4

IPAddress FromIPv4(
  const ip4_addr_t & addr
)

這是一個重載的成員函數,為方便起見而提供。它與上述函數的不同之處僅在於它接受的參數。

來自IPv4

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 地址。

來自IPv6

IPAddress FromIPv6(
  const ip6_addr_t & addr
)

這是一個重載的成員函數,為方便起見而提供。它與上述函數的不同之處僅在於它接受的參數。

來自IPv6

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 地址。

從襪子地址

IPAddress FromSockAddr(
  const struct sockaddr & sockaddr
)

注射從POSIX IPv6地址struct sockaddr&

使用FromSockAddr(const struct sockaddr& sockaddr)注入sockaddr.sa_addr作為IPv6地址。

細節
退貨
構造的 IP 地址。

從字符串

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

從其傳統的演示文本中掃描 IP 地址。

使用FromString(const char *str, IPAddress& output)通過掃描位於傳統的文本呈現覆蓋IP地址的str

細節
參數
[in] str
發出的文本的地址。
[out] output
要設置為掃描地址的對象。

細節
返回值
true
演示文稿格式有效
false
除此以外

從字符串

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

從其傳統的演示文本中掃描 IP 地址。

使用FromString(const char *str, size_t strLen, IPAddress& output)通過掃描位於傳統的文本呈現覆蓋IP地址的str

細節
參數
[in] str
指向要掃描的文本的指針。
[in] strLen
要掃描的文本的長度。
[out] output
要設置為掃描地址的對象。

細節
返回值
true
演示文稿格式有效
false
除此以外

製作IPv4廣播

IPAddress MakeIPv4Broadcast(
  void
)

構造一個 IPv4 廣播地址。

細節
退貨
構造的 IP 地址。

製作IPv6組播

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])與構造IPv6多點地址flags用於路由範圍scope和組標識符八位位組groupId

細節
退貨
構造的 IP 地址。

製作IPv6組播

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

從它的部分構造一個 IPv6 多播地址。

使用MakeIPv6Multicast(uint8_t flags, uint8_t scope, uint32_t groupId)與構建一個IPv6多點地址flags用於路由範圍scope和組標識符groupId

細節
退貨
構造的 IP 地址。

製作IPv6前綴組播

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和組標識符八位位組groupId ,由前綴合格prefix長度的prefixlen比特。

細節
退貨
構造的 IP 地址。

使IPv6瞬態多播

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和組標識符八位位組groupId

細節
退貨
構造的 IP 地址。

使IPv6成為眾所周知的多播

IPAddress MakeIPv6WellKnownMulticast(
  uint8_t aScope,
  uint32_t aGroupId
)

從它的部分構造一個眾所周知的 IPv6 多播地址。

使用MakeIPv6WellKnownMulticast(uint8_t scope, uint32_t groupId)構建一個IPv6多點地址用於路由範圍scope和組標識符groupId

細節
退貨
構造的 IP 地址。

製造商協會

IPAddress MakeLLA(
  uint64_t interfaceId
)

從其 IID 構造 IPv6 鏈路本地地址 (LL)。

使用MakeLLA(uint64_t interfaceId)構建的IPv6鏈路本地地址(LL)與接口標識符interfaceId

細節
退貨
構造的 IP 地址。

製造ULA

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

從其部分構造 IPv6 唯一本地地址 (ULA)。

使用MakeULA(uint64_t globalId, uint16_t subnet, uint64_t interfaceId)構建一個獨特的本地地址(ULA)與全球網絡標識符globalId ,子網標識subnet和接口標識符(IID) interfaceId

細節
退貨
構造的 IP 地址。

讀取地址

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

以標準網絡表示形式發出 IP 地址。

使用ReadAddress(uint8_t *&p, IPAddress &output)到IP地址在解碼p對象output

細節
參數
[in,out] p
引用用於閱讀的光標。
[out] output
接收解碼 IP 地址的對象。