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 地址。
公共静态属性
公共函数
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 地址。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv4Broadcast
bool IsIPv4Broadcast( void ) const
测试地址是否为 IPv4 广播。
使用此方法检查地址是否为特殊用途的 IPv4 广播地址。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv4Multicast
bool IsIPv4Multicast( void ) const
测试地址是否为 IPv4 多播地址。
使用此方法检查地址是否为 IPv4 多播地址。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv6
bool IsIPv6( void ) const
测试地址是否与 IPv6 兼容。
使用此方法检查地址是否属于 IPv6 地址系列。请注意:未指定的地址不是 IPv6 地址。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv6GlobalUnicast
bool IsIPv6GlobalUnicast( void ) const
测试地址是否为 IPv6 全局单播地址。
使用此方法检查该地址是否属于 IPv6 地址系列以及是否具有全局单播地址前缀。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv6LinkLocal
bool IsIPv6LinkLocal( void ) const
测试地址是否为 IPv6 链路本地地址 (LL)。
使用此方法检查该地址是否属于 IPv6 地址系列以及是否具有预留的 IPv6 链路本地地址前缀。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv6Multicast
bool IsIPv6Multicast( void ) const
测试地址是否为 IPv6 多播地址。
使用此方法检查该地址是否属于 IPv6 地址系列以及是否具有预留的 IPv6 多播地址前缀。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
是 IPv6ULA
bool IsIPv6ULA( void ) const
测试地址是否为 IPv6 唯一本地地址 (ULA)。
使用此方法检查该地址是否属于 IPv6 地址系列以及是否具有预留的 IPv6 唯一本地地址前缀。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
IsMulticast
bool IsMulticast( void ) const
测试地址是 IPv4 还是 IPv6 多播。
使用此方法检查该地址是否属于 IPv4 或 IPv6 地址系列,以及是否具有预留的 IPv4 或 IPv6 多播地址前缀。
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
子网
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 终止字符。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
请注意:在某些平台上不符合 RFC 5952 标准。具体而言,根据第 4.2 节的规定,不得应用零压缩。
详细信息 | |
---|---|
返回值 |
如果没有格式错误,则为
buf ,否则为零。 |
类型
IPAddressType Type( void ) const
提取 IP 地址的类型。
使用此方法返回枚举类型 IPAddressType
的值,以指明 IP 地址的类型。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
返回值 |
|
WriteAddress
void WriteAddress( uint8_t *& p ) const
以标准网络表示法发出 IP 地址。
使用 WriteAddress(uint8_t *&p)
按照 RFC 4291 为 IPv6 地址定义的二进制格式对 IP 地址进行编码。IPv4 地址根据第 2.5.5.1 节“与 IPv4 兼容
IPv6 地址”(V4COMPAT)。
详细信息 | |||
---|---|---|---|
参数 |
|
operator!=
bool operator!=( const IPAddress & other ) const
将此 IP 地址与另一个 IP 地址进行比较,确保不等。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
operator=
IPAddress & operator=( const IPAddress & other )
传统的赋值运算符。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
对此对象的引用。
|
运算符==
bool operator==( const IPAddress & other ) const
将此 IP 地址与另一个 IP 地址进行比较,确保等效。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
公共静态函数
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 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 地址。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
详细信息 | |||||
---|---|---|---|---|---|
返回值 |
|
FromString
bool FromString( const char *str, size_t strLen, IPAddress & output )
从常规的演示文本中扫描 IP 地址。
使用 FromString(const char *str, size_t strLen, IPAddress& output)
扫描位于 str
的常规文本呈现方式,以覆盖 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
。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|