nl::Inet::IPAddress

#include <src/inet/IPAddress.h>

互联网协议地址。

摘要

Nest Inet 层使用此类的对象来表示互联网协议地址(与协议版本无关)。

公共属性

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 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 位全局网络标识符。

将此方法与 IPv6 唯一本地地址 (ULA) 结合使用以提取全局网络标识符,该标识符为紧跟在标识 ULA 网络前缀(即 fd00::/8)后面的 40 位。换句话说,全局网络标识符位于地址中第 2 个到第 6 个字节的 5 个字节内。

具体说明
返回值
40 位全局网络标识符,如果 IP 地址不是 IPv6 唯一的本地地址,则为零。

InterfaceId

uint64_t InterfaceId(
  void
) const 

提取 IPv6 ULA 地址的 IID。

结合使用以下方法与 IPv6 唯一本地地址 (ULA) 来提取标识符标识符 (IID),它是地址的最低有效 64 位。

具体说明
返回值
64 位接口标识符,如果 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 位子网标识符。

结合使用此方法与 IPv6 唯一本地地址 (ULA) 来提取子网标识符,这是网络前缀的最低有效位 16 位。网络前缀是地址的最高有效 64 位。换句话说,子网标识符位于 16 字节地址的第 7 个和第 8 个字节。

具体说明
返回值
16 位子网标识符,如果 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),以 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
否则

公共静态函数

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 为路由范围 scope 和组标识符八位字节 groupId 构建 IPv6 多播地址。

具体说明
返回值
构造的 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 为路由范围 scope 和组标识符 groupId 构造 IPv6 多播地址。

具体说明
返回值
构造的 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) 为路由范围 scope 和群组标识符八位字节 groupId(由长度为 prefixlen 位的前缀 prefix 限定)构建一个瞬时前缀 IPv6 多播地址。

具体说明
返回值
构造的 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 为路由范围 scope 和组标识符八位字节 groupId 构造瞬态 IPv6 多播地址。

具体说明
返回值
构造的 IP 地址。

MakeIPv6WellKnownMulticast

IPAddress MakeIPv6WellKnownMulticast(
  uint8_t aScope,
  uint32_t aGroupId
)

根据各个部分构造一个众所周知的 IPv6 多播地址。

使用 MakeIPv6WellKnownMulticast(uint8_t scope, uint32_t groupId) 为路由范围 scope 和组标识符 groupId 构造 IPv6 多播地址。

具体说明
返回值
构造的 IP 地址。

MakeLLA

IPAddress MakeLLA(
  uint64_t interfaceId
)

根据 IID 构造 IPv6 链路本地地址 (LL)。

使用 MakeLLA(uint64_t interfaceId) 构建具有接口标识符 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) 构建一个具有全局网络标识符 globalId、子网标识符 subnet 和接口标识符 (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 地址的对象。