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 地址的对象。