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

公共属性

Addr

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 网络前缀之后的 40 位,即 fd00::/8。也就是说,全局网络标识符位于地址中第 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
其他情况

是 IPv6ULA

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
对要用于写入的游标的引用。

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]) 为路由范围 scope 和群组标识符八位字节 groupId 构建具有 flags 的 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 的临时前缀 IPv6 多播地址,以长度为 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 和群组标识符八位字节 groupId

详细信息
返回值
构造的 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 地址的对象。