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 地址。
公共静态属性
公共函数
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 地址。
具体说明 | |||||
---|---|---|---|---|---|
返回值 |
|
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 多播地址前缀。
具体说明 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv6ULA
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) 进行编码。
具体说明 | |||
---|---|---|---|
参数 |
|
运算符!=
bool operator!=( const IPAddress & other ) const
将此 IP 地址与另一个 IP 地址进行比较,看看是否存在不相等的情况。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
运算符=
IPAddress & operator=( const IPAddress & other )
传统赋值运算符。
具体说明 | |||
---|---|---|---|
参数 |
|
||
返回值 |
对此对象的引用。
|
运算符==
bool operator==( const IPAddress & other ) const
将此 IP 地址与另一个 IP 地址进行比较,以实现等效性。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
公共静态函数
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 地址。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|
具体说明 | |||||
---|---|---|---|---|---|
返回值 |
|
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])
通过 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
。
具体说明 | |||||
---|---|---|---|---|---|
参数 |
|