Struct ipnet::Ipv4Net [] [src]

pub struct Ipv4Net { /* fields omitted */ }

An IPv4 network address.

See IpNet for a type encompassing both IPv4 and IPv6 network addresses.

Textual representation

Ipv4Net provides a FromStr implementation. This is represented using the FromStr implementation for Ipv4Addr followed by a / character and the prefix length in decimal. See [IETF RFC 4632] for the CIDR notation.

Examples

use std::net::Ipv4Addr;
use std::str::FromStr;
use ipnet::Ipv4Net;

let net_v4 = Ipv4Net::from_str("10.1.1.0/24").unwrap();
assert_eq!("10.1.1.0".parse(), Ok(net_v4.network()));

Methods

impl Ipv4Net
[src]

Creates a new IPv4 network address from an Ipv4Addr and prefix length.

If prefix_len is greater than 32 it will be clamped to 32.

Examples

let net = Ipv4Net::new(Ipv4Addr::new(10, 1, 1, 0), 24);

Returns the prefix length.

Returns the network mask.

Examples

let net = Ipv4Net::from_str("10.1.0.0/20").unwrap();
assert_eq!(net.netmask(), Ipv4Addr::from_str("255.255.240.0").unwrap());

Returns the host mask.

Examples

let net = Ipv4Net::from_str("10.1.0.0/20").unwrap();
assert_eq!(net.hostmask(), Ipv4Addr::from_str("0.0.15.255").unwrap());

Returns the network address.

Examples

let net = Ipv4Net::from_str("172.16.123.123/16").unwrap();
assert_eq!(net.network(), Ipv4Addr::from_str("172.16.0.0").unwrap());

Returns the broadcast address. Returns the provided Ipv4Addr with all bits after the prefix length set.

Examples

let net = Ipv4Net::from_str("172.16.0.0/22").unwrap();
assert_eq!(net.broadcast(), Ipv4Addr::from_str("172.16.3.255").unwrap());

Returns the Ipv4Net that contains this one.

Examples

let net = Ipv4Net::from_str("172.16.1.0/24").unwrap();
assert_eq!(net.supernet().network(), Ipv4Addr::from_str("172.16.0.0").unwrap());

Returns the subnets of this network at the given prefix length.

Examples

let net = Ipv4Net::from_str("10.1.0.0/16").unwrap();
assert_eq!(net.subnets(18), vec![
    Ipv4Net::from_str("10.1.0.0/18").unwrap(),
    Ipv4Net::from_str("10.1.64.0/18").unwrap(),
    Ipv4Net::from_str("10.1.128.0/18").unwrap(),
    Ipv4Net::from_str("10.1.192.0/18").unwrap(),
]);

Returns an Iterator over the subnets.

This might be deprecated and replaced with a generic implementation of Range when Range and it's required traits are stablized.

Examples

let i4 = Ipv4Net::from_str("10.0.0.0/24").unwrap().iter_subnets(26);
let v4 = vec![
    Ipv4Net::from_str("10.0.0.0/26").unwrap(),
    Ipv4Net::from_str("10.0.0.64/26").unwrap(),
    Ipv4Net::from_str("10.0.0.128/26").unwrap(),
    Ipv4Net::from_str("10.0.0.192/26").unwrap(),
];

assert_eq!(i4.collect::<Vec<Ipv4Net>>(), v4);

Return an Iterator over the host addresses in this network.

Returns true if this network contains the given network.

Examples

let net1 = Ipv4Net::from_str("10.1.0.0/16").unwrap();
let net2 = Ipv4Net::from_str("10.1.1.0/24").unwrap();
assert!(net1.contains(&net2));

Returns true if this network and the given network are both in the same supernet.

Examples

let net1 = Ipv4Net::from_str("10.1.0.0/24").unwrap();
let net2 = Ipv4Net::from_str("10.1.1.0/24").unwrap();
let net3 = Ipv4Net::from_str("10.1.2.0/24").unwrap();
assert!(net1.sibling_of(&net2));
assert!(!net2.sibling_of(&net3));

Experimental.

Methods from Deref<Target = Ipv4Addr>

Returns the four eight-bit integers that make up this address.

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::new(127, 0, 0, 1);
assert_eq!(addr.octets(), [127, 0, 0, 1]);

Returns true for the special 'unspecified' address (0.0.0.0).

This property is defined in UNIX Network Programming, Second Edition, W. Richard Stevens, p. 891; see also ip7.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(0, 0, 0, 0).is_unspecified(), true);
assert_eq!(Ipv4Addr::new(45, 22, 13, 197).is_unspecified(), false);

Returns true if this is a loopback address (127.0.0.0/8).

This property is defined by IETF RFC 1122.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(127, 0, 0, 1).is_loopback(), true);
assert_eq!(Ipv4Addr::new(45, 22, 13, 197).is_loopback(), false);

Returns true if this is a private address.

The private address ranges are defined in IETF RFC 1918 and include:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(10, 0, 0, 1).is_private(), true);
assert_eq!(Ipv4Addr::new(10, 10, 10, 10).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 16, 10, 10).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 29, 45, 14).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 32, 0, 2).is_private(), false);
assert_eq!(Ipv4Addr::new(192, 168, 0, 2).is_private(), true);
assert_eq!(Ipv4Addr::new(192, 169, 0, 2).is_private(), false);

Returns true if the address is link-local (169.254.0.0/16).

This property is defined by IETF RFC 3927.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(169, 254, 0, 0).is_link_local(), true);
assert_eq!(Ipv4Addr::new(169, 254, 10, 65).is_link_local(), true);
assert_eq!(Ipv4Addr::new(16, 89, 10, 65).is_link_local(), false);

🔬 This is a nightly-only experimental API. (ip)

extra functionality has not been scrutinized to the level that it should be stable

Returns true if the address appears to be globally routable. See iana-ipv4-special-registry.

The following return false:

  • private address (10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16)
  • the loopback address (127.0.0.0/8)
  • the link-local address (169.254.0.0/16)
  • the broadcast address (255.255.255.255/32)
  • test addresses used for documentation (192.0.2.0/24, 198.51.100.0/24 and 203.0.113.0/24)
  • the unspecified address (0.0.0.0)

Examples

#![feature(ip)]

use std::net::Ipv4Addr;

fn main() {
    assert_eq!(Ipv4Addr::new(10, 254, 0, 0).is_global(), false);
    assert_eq!(Ipv4Addr::new(192, 168, 10, 65).is_global(), false);
    assert_eq!(Ipv4Addr::new(172, 16, 10, 65).is_global(), false);
    assert_eq!(Ipv4Addr::new(0, 0, 0, 0).is_global(), false);
    assert_eq!(Ipv4Addr::new(80, 9, 12, 3).is_global(), true);
}

Returns true if this is a multicast address (224.0.0.0/4).

Multicast addresses have a most significant octet between 224 and 239, and is defined by IETF RFC 5771.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(224, 254, 0, 0).is_multicast(), true);
assert_eq!(Ipv4Addr::new(236, 168, 10, 65).is_multicast(), true);
assert_eq!(Ipv4Addr::new(172, 16, 10, 65).is_multicast(), false);

Returns true if this is a broadcast address (255.255.255.255).

A broadcast address has all octets set to 255 as defined in IETF RFC 919.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_broadcast(), true);
assert_eq!(Ipv4Addr::new(236, 168, 10, 65).is_broadcast(), false);

Returns true if this address is in a range designated for documentation.

This is defined in IETF RFC 5737:

  • 192.0.2.0/24 (TEST-NET-1)
  • 198.51.100.0/24 (TEST-NET-2)
  • 203.0.113.0/24 (TEST-NET-3)

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).is_documentation(), true);
assert_eq!(Ipv4Addr::new(198, 51, 100, 65).is_documentation(), true);
assert_eq!(Ipv4Addr::new(203, 0, 113, 6).is_documentation(), true);
assert_eq!(Ipv4Addr::new(193, 34, 17, 19).is_documentation(), false);

Converts this address to an IPv4-compatible IPv6 address.

a.b.c.d becomes ::a.b.c.d

Examples

use std::net::{Ipv4Addr, Ipv6Addr};

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).to_ipv6_compatible(),
           Ipv6Addr::new(0, 0, 0, 0, 0, 0, 49152, 767));

Converts this address to an IPv4-mapped IPv6 address.

a.b.c.d becomes ::ffff:a.b.c.d

Examples

use std::net::{Ipv4Addr, Ipv6Addr};

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).to_ipv6_mapped(),
           Ipv6Addr::new(0, 0, 0, 0, 0, 65535, 49152, 767));

Trait Implementations

impl Copy for Ipv4Net
[src]

impl Clone for Ipv4Net
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl Eq for Ipv4Net
[src]

impl PartialEq for Ipv4Net
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl Hash for Ipv4Net
[src]

Feeds this value into the given [Hasher]. Read more

Feeds a slice of this type into the given [Hasher]. Read more

impl PartialOrd for Ipv4Net
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl Ord for Ipv4Net
[src]

This method returns an Ordering between self and other. Read more

🔬 This is a nightly-only experimental API. (ord_max_min)

Compares and returns the maximum of two values. Read more

🔬 This is a nightly-only experimental API. (ord_max_min)

Compares and returns the minimum of two values. Read more

impl Deref for Ipv4Net
[src]

The resulting type after dereferencing

The method called to dereference a value

impl Debug for Ipv4Net
[src]

Formats the value using the given formatter.

impl Display for Ipv4Net
[src]

Formats the value using the given formatter. Read more

impl FromStr for Ipv4Net
[src]

The associated error which can be returned from parsing.

Parses a string s to return a value of this type. Read more