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

公開屬性

Addr

uint32_t Addr[4]

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

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

公開的靜態屬性

不限

IPAddress Any

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

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

公開函式

GlobalId

uint64_t GlobalId(
  void
) const 

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

這個方法搭配 IPv6 專屬本機位址 (ULA) 使用,即可擷取全域網路 ID,即辨識 ULA 網路前置字元後的 40 位元,也就是 fd00::/8。換句話說,全球網路 ID 是來自位址第 2、2 到第 6 個位元組的五個位元組。

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

InterfaceId

uint64_t InterfaceId(
  void
) const 

擷取 IPv6 ULA 位址的 IID。

這個方法可搭配 IPv6 專屬本機位址 (ULA) 使用,以擷取 ID 識別碼 (IID),也就是位址的最小有效 64 位元。

詳細資料
傳回
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
其他情況

IsIPv6ULA

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 位址。依據第 2.5.5.1 節「IPv4 相容」一節的 IPv4 位址編碼 IPv6 位址」(V4COMPAT)。

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

operator!=

bool operator!=(
  const IPAddress & other
) const 

比較這個 IP 位址和其他不等式的 IP 位址。

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

operator=

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

引數 addrconst 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 位址。

引數 addrconst 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]) 建構含有 flags 的暫時性 IPv6 多點傳播位址,用於轉送範圍 scope 和群組 ID 八位元次 groupId

詳細資料
傳回
建構的 IP 位址。

MakeIPv6WellKnownMulticast

IPAddress MakeIPv6WellKnownMulticast(
  uint8_t aScope,
  uint32_t aGroupId
)

從零件中建構已知的 IPv6 多點傳送位址。

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

詳細資料
傳回
建構的 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 位址的物件。