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 地址。
公共静态属性
公共职能
全局 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 地址。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
是IPv4广播
bool IsIPv4Broadcast( void ) const
测试地址是否为 IPv4 广播。
使用此方法检查地址是否为专用 IPv4 广播地址。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
是IPv4组播
bool IsIPv4Multicast( void ) const
测试地址是否为 IPv4 组播。
使用此方法检查地址是否为 IPv4 多播地址。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
是IPv6
bool IsIPv6( void ) const
测试地址是否兼容 IPv6。
使用此方法检查地址是否属于 IPv6 地址族。请注意:未指定的地址不是 IPv6 地址。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv6全球单播
bool IsIPv6GlobalUnicast( void ) const
测试地址是否为IPv6全球单播地址。
使用此方法检查地址是否属于 IPv6 地址族并具有全局单播地址前缀。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
IsIPv6LinkLocal
bool IsIPv6LinkLocal( void ) const
测试地址是否为 IPv6 链路本地地址 (LL)。
使用此方法检查地址是否属于 IPv6 地址族并具有保留的 IPv6 链路本地地址前缀。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
是IPv6组播
bool IsIPv6Multicast( void ) const
测试地址是否为 IPv6 组播。
使用此方法检查地址是否属于 IPv6 地址族并具有保留的 IPv6 组播地址前缀。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
是IPv6ULA
bool IsIPv6ULA( void ) const
测试地址是否为 IPv6 唯一本地地址 (ULA)。
使用此方法检查地址是否属于 IPv6 地址族并具有保留的 IPv6 唯一本地地址前缀。
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
是多播
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 唯一本地地址,则为零。 |
到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终止符。
细节 | |||||
---|---|---|---|---|---|
参数 |
|
注意:在某些平台上不符合 RFC 5952。具体来说,根据第 4.2 节可能不应用零压缩。
细节 | |
---|---|
退货 | 这个论点 buf 如果没有格式错误,或否则为零。 |
类型
IPAddressType Type( void ) const
提取 IP 地址的类型。
使用此方法返回的枚举类型的值IPAddressType
指示IP地址的类型。
细节 | |||||||
---|---|---|---|---|---|---|---|
返回值 |
|
写地址
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 地址进行比较是否不等价。
细节 | |||||
---|---|---|---|---|---|
参数 |
| ||||
返回值 |
|
运算符==
bool operator==( const IPAddress & other ) const
将此 IP 地址与另一个 IP 地址进行比较以获取等效性。
细节 | |||||
---|---|---|---|---|---|
参数 |
| ||||
返回值 |
|
公共静态函数
来自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 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
。
细节 | |||||
---|---|---|---|---|---|
参数 |
|
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
从字符串
bool FromString( const char *str, size_t strLen, IPAddress & output )
从其传统的演示文本中扫描 IP 地址。
使用FromString(const char *str, size_t strLen, IPAddress& output)
通过扫描位于传统的文本呈现覆盖IP地址的str
。
细节 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
细节 | |||||
---|---|---|---|---|---|
返回值 |
|
制作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
。
细节 | |||||
---|---|---|---|---|---|
参数 |
|