TSDuck v3.40-4034
MPEG Transport Stream Toolkit
|
A combination of IP address and network mask or prefix. More...
#include <tsIPAddressMask.h>
Public Types | |
using | Port = uint16_t |
The concept of port is used by TCP and UDP over IP networks. | |
Public Member Functions | |
IPAddressMask (const IPAddress &addr, const IPAddress &mask) | |
Constructor from a network mask. | |
IPAddressMask (const IPAddress &addr=IPAddress(), size_t prefix=0) | |
Default constructor. | |
uint32_t | address4 () const |
Get the IPv4 address as a 32-bit integer value in host byte order. | |
ByteBlock | address6 () const |
Get the IPv6 address as a byte block. | |
virtual size_t | binarySize () const override |
Get the maximum binary size in bytes for an address of that class. | |
IPAddress | broadcastAddress () const |
Get the associated broadcast address (IPv4 only). | |
virtual void | clear () |
Clear the object, address and port if there is any. | |
virtual void | clearAddress () override |
Clear the address field. | |
virtual void | clearPort () |
Clear the port. | |
bool | convert (IP gen) |
Convert an IP address to another generation, when possible. | |
virtual const UChar * | familyName () const override |
Get a human-readable family name for an address of that class. | |
IP | generation () const |
Get the current generation of IP addresses. | |
size_t | getAddress (::sockaddr_storage &a, Port port) const |
Copy the address into a system "struct sockaddr_storage" structure (socket API). | |
virtual size_t | getAddress (void *addr, size_t size) const override |
Get the network address as binary data. | |
bool | getAddress4 (::in_addr &a) const |
Copy the IPv4 address into a system "struct in_addr" structure (socket API). | |
bool | getAddress4 (::sockaddr_in &a, Port port) const |
Copy the IPv4 address into a system "struct sockaddr_in" structure (socket API). | |
bool | getAddress6 (::in6_addr &a) const |
Copy the IPv6 address into a system "struct in6_addr" structure (socket API). | |
bool | getAddress6 (::sockaddr_in6 &a, Port port) const |
Copy the IPv6 address into a system "struct sockaddr_in6" structure (socket API). | |
virtual bool | hasAddress () const override |
Check if this object is set to a valid address. | |
virtual bool | hasPort () const |
Check if a port is set. | |
uint16_t | hexlet6 (size_t i) const |
Get one of the 16-bit hexlets in the IPv6 address. | |
uint64_t | interfaceIdentifier6 () const |
Get the IPv6 interface identifier (64 least significant bits) of the IPv6 address. | |
bool | isIPv4Mapped () const |
Check if the address is an IPv6 address which is mapped to an IPv4 one. | |
virtual bool | isMulticast () const override |
Check if the address is a multicast address. | |
bool | isSSM () const |
Check if the address is a source specific multicast (SSM) address. | |
IPAddress | mask () const |
Get the associated address mask. | |
bool | match (const IPAddress &other) const |
Check if this address "matches" another one. | |
uint64_t | networkPrefix6 () const |
Get the IPv6 network prefix (64 most significant bits) of the IPv6 address. | |
bool | operator< (const IPAddress &other) const |
Comparison "less than" operator. | |
bool | operator== (const IPAddress &other) const |
Equality operator. | |
virtual Port | port () const |
Get the port if there is one. | |
size_t | prefixSize () const |
Get the prefix size or network mask size in bits. | |
virtual bool | resolve (const UString &name, Report &report) override |
Decode a string containing a network address in family-specific format. | |
virtual bool | resolve (const UString &name, Report &report, IP preferred) |
Decode a string containing a network address in family-specific format. | |
bool | setAddress (const ::sockaddr &a) |
Set the IP address from a system "struct sockaddr" structure (IPv4 or IPv6). | |
bool | setAddress (const ::sockaddr_in &a) |
Set the IPv4 address from a system "struct sockaddr_in" structure. | |
bool | setAddress (const ::sockaddr_in6 &a) |
Set the IPv6 address from a system "struct sockaddr_in6" structure. | |
bool | setAddress (const ::sockaddr_storage &a) |
Set the IP address from a system "struct sockaddr_storage" structure (IPv4 or IPv6). | |
bool | setAddress (const ByteBlock &bb) |
Set the IP address from an address in binary format. | |
void | setAddress (const IPAddress &other) |
Set the IP address from another IPAddress object. | |
virtual bool | setAddress (const void *addr, size_t size) override |
Set the network address from binary data. | |
void | setAddress4 (const ::in_addr &a) |
Set the IPv4 address from a system "struct in_addr" structure. | |
void | setAddress4 (uint32_t addr) |
Set the IP address from an IPv4 address as a 32-bit integer value in host byte order. | |
void | setAddress4 (uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4) |
Set the IP address from 4 bytes (classical IPv4 notation). | |
void | setAddress6 (const ::in6_addr &a) |
Set the IPv6 address from a system "struct in6_addr" structure. | |
void | setAddress6 (uint16_t h1, uint16_t h2, uint16_t h3, uint16_t h4, uint16_t h5, uint16_t h6, uint16_t h7, uint16_t h8) |
Set the IP address from an IPv6 address as 8 hexlets. | |
void | setAddress6 (uint64_t net, uint64_t ifid) |
Set the IP address from an IPv6 address as network prefix and interface identifier. | |
void | setMask (const IPAddress &mask) |
Set a new network mask. | |
virtual void | setPort (Port port) |
Set the port. | |
void | setPrefixSize (size_t prefix) |
Set a new prefix size. | |
virtual UString | toFullString () const override |
Convert to a string object in numeric format without the default compaction. | |
virtual UString | toString () const override |
Convert to a string object. | |
Static Public Member Functions | |
static size_t | AddressBits (IP gen) |
Get the address size in bits for a given generation of IP protocols. | |
static const IPAddress & | AnyAddress (IP gen) |
Get the "any address" template for a given generation of IP protocols. | |
static size_t | ComputePrefixSize (const IPAddress &mask) |
Compute the size of a prefix from a network mask. | |
static const IPAddress & | LocalHost (IP gen) |
Get the "local host" address for a given generation of IP protocols. | |
static bool | ResolveAllAddresses (IPAddressVector &addresses, const UString &name, Report &report, IP gen=IP::Any) |
Decode a host name and get all possible addresses for that host. | |
Static Public Attributes | |
static const IPAddress | AnyAddress4 |
Wildcard value for "any IPv4 address". | |
static const IPAddress | AnyAddress6 |
Wildcard value for "any IPv6 address". | |
static constexpr Port | AnyPort = 0 |
Wildcard integer value for "any port" or "no port". | |
static constexpr size_t | BITS4 = 32 |
Size in bits of an IPv4 address. | |
static constexpr size_t | BITS6 = 128 |
Size in bits of an IPv6 address. | |
static constexpr size_t | BYTES4 = 4 |
Size in bytes of an IPv4 address. | |
static constexpr size_t | BYTES6 = 16 |
Size in bytes of an IPv6 address. | |
static const IPAddress | LocalHost4 |
Local host IPv4 address ("localhost"). | |
static const IPAddress | LocalHost6 |
Local host IPv6 address (::1, "localhost"). | |
A combination of IP address and network mask or prefix.
Default constructor.
[in] | addr | IP address. |
[in] | prefix | Prefix size in bits. |
Constructor from a network mask.
[in] | addr | IP address. |
[in] | mask | Network mask. |
size_t ts::IPAddressMask::prefixSize | ( | ) | const |
Get the prefix size or network mask size in bits.
void ts::IPAddressMask::setPrefixSize | ( | size_t | prefix | ) |
Set a new prefix size.
[in] | prefix | Prefix size in bits. |
void ts::IPAddressMask::setMask | ( | const IPAddress & | mask | ) |
Set a new network mask.
[in] | mask | Network mask. |
IPAddress ts::IPAddressMask::mask | ( | ) | const |
Get the associated address mask.
IPAddress ts::IPAddressMask::broadcastAddress | ( | ) | const |
Get the associated broadcast address (IPv4 only).
|
overridevirtual |
Convert to a string object in numeric format without the default compaction.
The method toString() (inherited from StringifyInterface) returns a default representation of the string, with possible compaction of omitted defaults. This method returns a complete version of the address representation. The default implementation returns the same value as toString().
Reimplemented from ts::IPAddress.
|
overridevirtual |
Convert to a string object.
Reimplemented from ts::IPAddress.
|
static |
Compute the size of a prefix from a network mask.
[in] | mask | Network mask. |
Get the "any address" template for a given generation of IP protocols.
[in] | gen | Generation of IP protocols. |
Get the "local host" address for a given generation of IP protocols.
[in] | gen | Generation of IP protocols. |
|
inlinestaticinherited |
Get the address size in bits for a given generation of IP protocols.
[in] | gen | Generation of IP protocols. |
|
inherited |
Equality operator.
[in] | other | Another instance to compare with. |
|
inherited |
Comparison "less than" operator.
It does not really makes sense. Only defined to allow usage in containers.
[in] | other | Other instance to compare. |
|
inherited |
Check if this address "matches" another one.
[in] | other | Another instance to compare. |
|
inlineinherited |
Get the current generation of IP addresses.
|
inherited |
Check if the address is an IPv6 address which is mapped to an IPv4 one.
|
inherited |
Convert an IP address to another generation, when possible.
[in] | gen | New IP generation to apply. If gen is IP::Any or the same as the current generation, return true. A conversion from IPv4 to IPv6 always works (IPv4-mapped address). The conversion of an IPv6 address into IPv4 is only possible if it is an IPv4-mapped address. For convenience, the IPv4 and IPv6 ampty and loopback addressses are converted to each other. |
|
overridevirtualinherited |
Get the maximum binary size in bytes for an address of that class.
Implements ts::AbstractNetworkAddress.
|
overridevirtualinherited |
Get a human-readable family name for an address of that class.
This is typically something like "IPv4" or "IPv6".
Implements ts::AbstractNetworkAddress.
|
overridevirtualinherited |
Check if this object is set to a valid address.
Implements ts::AbstractNetworkAddress.
|
overridevirtualinherited |
Get the network address as binary data.
[out] | addr | Address of binary buffer to receive binary data. |
[in] | size | Size in bytes of buffer. |
Implements ts::AbstractNetworkAddress.
|
inherited |
Copy the address into a system "struct sockaddr_storage" structure (socket API).
Note: the structure "sockaddr" is deprecated because it cannot hold an IPv6 socket address. The structure "sockaddr_storage" should be used instead.
[out] | a | A system "struct sockaddr_storage" structure. This type of structure is large enough to hold a structure sockaddr_in or sockaddr_in6. |
[in] | port | Port number for the socket address. |
|
overridevirtualinherited |
Set the network address from binary data.
[in] | addr | Address of binary data. |
[in] | size | Size in bytes of binary data. |
Implements ts::AbstractNetworkAddress.
|
inherited |
Set the IP address from another IPAddress object.
Useful for subclasses to assign the address part only.
[in] | other | Another IP address. |
|
inlineinherited |
Set the IP address from an address in binary format.
Useful for subclasses to assign the address part only.
[in] | bb | Byte block containing the address in binary format. If the size is 4, this is an IPv4 address. If the size is 16, this is an IPv6 address. For all other sizes, the address is AnyAddress4. |
|
inherited |
Set the IP address from a system "struct sockaddr" structure (IPv4 or IPv6).
[in] | a | A system "struct sockaddr" structure. Note: the structure "sockaddr" is deprecated because it cannot hold an IPv6 socket address. The structure "sockaddr_storage" should be used instead. |
|
inlineinherited |
Set the IP address from a system "struct sockaddr_storage" structure (IPv4 or IPv6).
[in] | a | A system "struct sockaddr_storage" structure. |
|
inlineinherited |
Set the IPv4 address from a system "struct sockaddr_in" structure.
[in] | a | A system "struct sockaddr_in" structure. |
|
inlineinherited |
Set the IPv6 address from a system "struct sockaddr_in6" structure.
[in] | a | A system "struct sockaddr_in6" structure. |
|
overridevirtualinherited |
Clear the address field.
Implements ts::AbstractNetworkAddress.
|
overridevirtualinherited |
Check if the address is a multicast address.
Implements ts::AbstractNetworkAddress.
|
overridevirtualinherited |
Decode a string containing a network address in family-specific format.
[in] | name | A string containing either a host name or a numerical representation of the address. |
[in] | report | Where to report errors. |
Implements ts::AbstractNetworkAddress.
Reimplemented in ts::IPSocketAddress.
|
virtualinherited |
Decode a string containing a network address in family-specific format.
[in] | name | A string containing either a host name or a numerical representation of the address. |
[in] | report | Where to report errors. |
[in] | preferred | Preferred IP generation of the returned address. Return the first availabale address by default. If no address of that generation is available, return one from the other generation if available. |
Reimplemented in ts::IPSocketAddress.
|
inherited |
Check if the address is a source specific multicast (SSM) address.
|
inlineinherited |
Get the IPv4 address as a 32-bit integer value in host byte order.
|
inherited |
Get the IPv6 address as a byte block.
|
inherited |
Get the IPv6 network prefix (64 most significant bits) of the IPv6 address.
|
inherited |
Get the IPv6 interface identifier (64 least significant bits) of the IPv6 address.
|
inherited |
Get one of the 16-bit hexlets in the IPv6 address.
[in] | i | Hexlet index, from 0 to 7. |
|
inherited |
Set the IP address from an IPv4 address as a 32-bit integer value in host byte order.
[in] | addr | The IP v4 address as an integer in host byte order. |
|
inherited |
Set the IP address from 4 bytes (classical IPv4 notation).
[in] | b1 | First address byte. |
[in] | b2 | Second address byte. |
[in] | b3 | Third address byte. |
[in] | b4 | Fourth address byte. |
|
inherited |
Set the IPv4 address from a system "struct in_addr" structure.
[in] | a | A system "struct in_addr" structure. |
|
inherited |
Set the IP address from an IPv6 address as 8 hexlets.
[in] | h1 | First address hexlet. |
[in] | h2 | 2nd address hexlet. |
[in] | h3 | 3rd address hexlet. |
[in] | h4 | 4th address hexlet. |
[in] | h5 | 5th address hexlet. |
[in] | h6 | 6th address hexlet. |
[in] | h7 | 7th address hexlet. |
[in] | h8 | 8th address hexlet. |
|
inherited |
Set the IP address from an IPv6 address as network prefix and interface identifier.
[in] | net | Network prefix. |
[in] | ifid | Interface identifier. |
|
inherited |
Set the IPv6 address from a system "struct in6_addr" structure.
[in] | a | A system "struct in6_addr" structure. |
|
inherited |
Copy the IPv4 address into a system "struct sockaddr_in" structure (socket API).
[out] | a | A system "struct sockaddr_in" structure. |
[in] | port | Port number for the socket address. |
|
inherited |
Copy the IPv4 address into a system "struct in_addr" structure (socket API).
[out] | a | A system "struct in_addr" structure. |
|
inherited |
Copy the IPv6 address into a system "struct sockaddr_in6" structure (socket API).
[out] | a | A system "struct sockaddr_in6" structure. |
[in] | port | Port number for the socket address. |
|
inherited |
Copy the IPv6 address into a system "struct in6_addr" structure (socket API).
[out] | a | A system "struct in6_addr" structure. |
|
staticinherited |
Decode a host name and get all possible addresses for that host.
[out] | addresses | List of possible addresses for name. If name is a valid numerical addresse, only this one is returned. |
[in] | name | A string containing either a host name or a numerical representation of the address. |
[in,out] | report | Where to report errors. |
[in] | gen | IP generation of the returned address. Can be used to restrict the result to IPv4 or IPv6 addresses. Return all by default. |
|
virtualinherited |
Check if a port is set.
|
virtualinherited |
Get the port if there is one.
The default implementation returns AnyPort.
Reimplemented in ts::IPSocketAddress.
|
virtualinherited |
Set the port.
The default implementation does nothing.
[in] | port | The port number as an integer in host byte order. |
Reimplemented in ts::IPSocketAddress.
|
virtualinherited |
Clear the port.
The default implementatio sets the port to AnyPort