Crate ipnet [] [src]

Types for IPv4 and IPv6 network addresses.

This module provides types and methods for working with IPv4 and IPv6 network addresses. It aims for alignment with the IpAddr, Ipv4Addr, and Ipv6Addr types in Rust's standard library.

The module also provides traits that extend Ipv4Addr and Ipv6Addr to support Add, Sub, BitAnd, and BitOr operations.

Organization

  • IpNet represents IP network addresses of either IPv4 or IPv6.
  • Ipv4Net and Ipv6Net are respectively IPv4 and IPv6 network addresses.
  • IpAddrIter provides iteration over a range of IP addresses. Ipv4NetIter and Ipv6NetIter does the same for IP network addresses. These are returned by methods on IpNet, Ipv4Net, and Ipv6Net.
  • The IpAdd, IpSub, IpBitAnd, IpBitOr traits extend the Ipv4Addr and Ipv6Addr types to include these operations.
  • Emu128 is an emulated 128 bit unsigned integer implemented in this module using a struct of two u64 types. This is necessary because Rust's u128 type is not yet marked stable. This can be replaced when u128 is stable.

TODO:

  • What's going on with AddrParseError(()) in parser.rs?
  • Should we convert subnets() and aggregate() methods to iterators?
  • Should new() truncate the input Ipv4Addr to the prefix_len and store that instead? Technically it doesn't matter, but users may expect one behavior over the other.
  • Should new() precompute the netmask, hostmask, network, and broadcast addresses and store these to avoid recomputing everytime the methods are called?
  • Can we implement the std::ops::{Add, Sub, BitAnd, BitOr} traits for Ipv4Addr and Ipv6Addr in the standard library? These are common operations on IP addresses.
  • Explore representing the results of methods such as hosts() and subnets() as a Range. This requires both the Add and Step traits be implemented on the target type. For the three IpAddr types implementing Add must be done through an enhancement to the standard library. For all types, using Step means we must use nightly because it is not yet stable. This crate only uses stable Rust features.

Structs

AddrParseError

An error which can be returned when parsing an IP network address.

Emu128

An emulated 128 bit unsigned integer.

IpAddrIter

An Iterator over a range of IPv4 or IPv6 addresses.

Ipv4Net

An IPv4 network address.

Ipv4NetIter

An Iterator over a range of IPv4 network addresses.

Ipv6Net

An IPv6 network address.

Ipv6NetIter

An Iterator over a range of IPv4 network addresses.

Enums

IpNet

An IP network address, either IPv4 or IPv6.

Traits

Contains

Provides a method to test if a network contains another network or address.

IpAdd

Provides a saturating_add() method for Ipv4Addr and Ipv6Addr.

IpBitAnd

Provides a bitand() method for Ipv4Addr and Ipv6Addr.

IpBitOr

Provides a bitor() method for Ipv4Addr and Ipv6Addr.

IpSub

Provides a saturating_sub() method for Ipv4Addr and Ipv6Addr.