blob: 28f41f414dd41a5b980224ec05697d6172680a7c [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Types for IPv4 and IPv6 network addresses."><meta name="keywords" content="rust, rustlang, rust-lang, ipnet"><title>ipnet - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="../crates.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc mod crate"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../ipnet/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../ipnet/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Crate ipnet</a></h2><div class="sidebar-elems"><ul class="block"><li class="version">Version 2.7.2</li><li><a id="all-types" href="all.html">All Items</a></li></ul><section><ul class="block"><li><a href="#structs">Structs</a></li><li><a href="#enums">Enums</a></li><li><a href="#traits">Traits</a></li><li><a href="#functions">Functions</a></li></ul></section></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Crate <a class="mod" href="#">ipnet</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/ipnet/lib.rs.html#1-98">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Types for IPv4 and IPv6 network addresses.</p>
<p>This module provides types and useful methods for working with IPv4
and IPv6 network addresses, commonly called IP prefixes. The new
<a href="enum.IpNet.html"><code>IpNet</code></a>, <a href="struct.Ipv4Net.html"><code>Ipv4Net</code></a>, and <a href="struct.Ipv6Net.html"><code>Ipv6Net</code></a> types build on the existing
<a href="https://doc.rust-lang.org/std/net/enum.IpAddr.html"><code>IpAddr</code></a>, <a href="https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html"><code>Ipv4Addr</code></a>, and <a href="https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html"><code>Ipv6Addr</code></a> types already provided in
Rust’s standard library and align to their design to stay
consistent.</p>
<p>The module also provides the <a href="enum.IpSubnets.html"><code>IpSubnets</code></a>, <a href="struct.Ipv4Subnets.html"><code>Ipv4Subnets</code></a>, and
<a href="struct.Ipv6Subnets.html"><code>Ipv6Subnets</code></a> types for iterating over the subnets contained in
an IP address range. The <a href="enum.IpAddrRange.html"><code>IpAddrRange</code></a>, <a href="struct.Ipv4AddrRange.html"><code>Ipv4AddrRange</code></a>, and
<a href="struct.Ipv6AddrRange.html"><code>Ipv6AddrRange</code></a> types for iterating over IP addresses in a range.
And traits that extend <code>Ipv4Addr</code> and <code>Ipv6Addr</code> with methods for
addition, subtraction, bitwise-and, and bitwise-or operations that
are missing in Rust’s standard library.</p>
<p>The module only uses stable features so it is guaranteed to compile
using the stable toolchain.</p>
<h2 id="organization"><a href="#organization">Organization</a></h2>
<ul>
<li><a href="enum.IpNet.html"><code>IpNet</code></a> represents an IP network address, either IPv4 or IPv6.</li>
<li><a href="struct.Ipv4Net.html"><code>Ipv4Net</code></a> and <a href="struct.Ipv6Net.html"><code>Ipv6Net</code></a> are respectively IPv4 and IPv6 network
addresses.</li>
<li><a href="enum.IpSubnets.html"><code>IpSubnets</code></a>, <a href="struct.Ipv4Subnets.html"><code>Ipv4Subnets</code></a>, and <a href="struct.Ipv6Subnets.html"><code>Ipv6Subnets</code></a> are iterators
that generate the smallest set of IP network addresses bound by an
IP address range and minimum prefix length. These can be created
using their constructors. They are also returned by the
<a href="enum.IpNet.html#method.subnets"><code>subnets()</code></a> methods and used within the <a href="enum.IpNet.html#method.aggregate"><code>aggregate()</code></a> methods.</li>
<li><a href="enum.IpAddrRange.html"><code>IpAddrRange</code></a>, <a href="struct.Ipv4AddrRange.html"><code>Ipv4AddrRange</code></a>, and <a href="struct.Ipv6AddrRange.html"><code>Ipv6AddrRange</code></a> are
iterators that generate IP addresses. These can be created using
their constructors. They are also returned by the <a href="enum.IpNet.html#method.hosts"><code>hosts()</code></a>
methods.</li>
<li>The <a href="trait.IpAdd.html"><code>IpAdd</code></a>, <a href="trait.IpSub.html"><code>IpSub</code></a>, <a href="trait.IpBitAnd.html"><code>IpBitAnd</code></a>, <a href="trait.IpBitOr.html"><code>IpBitOr</code></a> traits extend
the <a href="https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html"><code>Ipv4Addr</code></a> and <a href="https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html"><code>Ipv6Addr</code></a> types with methods to perform
these operations.</li>
</ul>
<h2 id="serde-support"><a href="#serde-support">Serde support</a></h2>
<p>This library comes with support for <a href="https://serde.rs">serde</a> but
it’s not enabled by default. Use the <code>serde</code> <a href="https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-section">feature</a> to enable.</p>
<div class="example-wrap"><pre class="language-toml"><code>[dependencies]
ipnet = { version = &quot;2&quot;, features = [&quot;serde&quot;] }</code></pre></div>
<p>For human readable formats (e.g. JSON) the <code>IpNet</code>, <code>Ipv4Net</code>, and
<code>Ipv6Net</code> types will serialize to their <code>Display</code> strings.</p>
<p>For compact binary formats (e.g. Bincode) the <code>Ipv4Net</code> and
<code>Ipv6Net</code> types will serialize to a string of 5 and 17 bytes that
consist of the network address octects followed by the prefix
length. The <code>IpNet</code> type will serialize to an Enum with the V4 or V6
variant index prepending the above string of 5 or 17 bytes.</p>
</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.AddrParseError.html" title="ipnet::AddrParseError struct">AddrParseError</a></div><div class="item-right docblock-short">An error which can be returned when parsing an IP network address.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Ipv4AddrRange.html" title="ipnet::Ipv4AddrRange struct">Ipv4AddrRange</a></div><div class="item-right docblock-short">An <code>Iterator</code> over a range of IPv4 addresses.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Ipv4Net.html" title="ipnet::Ipv4Net struct">Ipv4Net</a></div><div class="item-right docblock-short">An IPv4 network address.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Ipv4Subnets.html" title="ipnet::Ipv4Subnets struct">Ipv4Subnets</a></div><div class="item-right docblock-short">An <code>Iterator</code> that generates IPv4 network addresses.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Ipv6AddrRange.html" title="ipnet::Ipv6AddrRange struct">Ipv6AddrRange</a></div><div class="item-right docblock-short">An <code>Iterator</code> over a range of IPv6 addresses.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Ipv6Net.html" title="ipnet::Ipv6Net struct">Ipv6Net</a></div><div class="item-right docblock-short">An IPv6 network address.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Ipv6Subnets.html" title="ipnet::Ipv6Subnets struct">Ipv6Subnets</a></div><div class="item-right docblock-short">An <code>Iterator</code> that generates IPv6 network addresses.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.PrefixLenError.html" title="ipnet::PrefixLenError struct">PrefixLenError</a></div><div class="item-right docblock-short">An error which can be returned when the prefix length is invalid.</div></div></div><h2 id="enums" class="small-section-header"><a href="#enums">Enums</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.IpAddrRange.html" title="ipnet::IpAddrRange enum">IpAddrRange</a></div><div class="item-right docblock-short">An <code>Iterator</code> over a range of IP addresses, either IPv4 or IPv6.</div></div><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.IpNet.html" title="ipnet::IpNet enum">IpNet</a></div><div class="item-right docblock-short">An IP network address, either IPv4 or IPv6.</div></div><div class="item-row"><div class="item-left module-item"><a class="enum" href="enum.IpSubnets.html" title="ipnet::IpSubnets enum">IpSubnets</a></div><div class="item-right docblock-short">An <code>Iterator</code> that generates IP network addresses, either IPv4 or
IPv6.</div></div></div><h2 id="traits" class="small-section-header"><a href="#traits">Traits</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.IpAdd.html" title="ipnet::IpAdd trait">IpAdd</a></div><div class="item-right docblock-short">Provides a <code>saturating_add()</code> method for <code>Ipv4Addr</code> and <code>Ipv6Addr</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.IpBitAnd.html" title="ipnet::IpBitAnd trait">IpBitAnd</a></div><div class="item-right docblock-short">Provides a <code>bitand()</code> method for <code>Ipv4Addr</code> and <code>Ipv6Addr</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.IpBitOr.html" title="ipnet::IpBitOr trait">IpBitOr</a></div><div class="item-right docblock-short">Provides a <code>bitor()</code> method for <code>Ipv4Addr</code> and <code>Ipv6Addr</code>.</div></div><div class="item-row"><div class="item-left module-item"><a class="trait" href="trait.IpSub.html" title="ipnet::IpSub trait">IpSub</a></div><div class="item-right docblock-short">Provides a <code>saturating_sub()</code> method for <code>Ipv4Addr</code> and <code>Ipv6Addr</code>.</div></div></div><h2 id="functions" class="small-section-header"><a href="#functions">Functions</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.ip_mask_to_prefix.html" title="ipnet::ip_mask_to_prefix fn">ip_mask_to_prefix</a></div><div class="item-right docblock-short">Converts a <code>IpAddr</code> network mask into a prefix.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.ipv4_mask_to_prefix.html" title="ipnet::ipv4_mask_to_prefix fn">ipv4_mask_to_prefix</a></div><div class="item-right docblock-short">Converts a <code>Ipv4Addr</code> network mask into a prefix.</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.ipv6_mask_to_prefix.html" title="ipnet::ipv6_mask_to_prefix fn">ipv6_mask_to_prefix</a></div><div class="item-right docblock-short">Converts a <code>Ipv6Addr</code> network mask into a prefix.</div></div></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="ipnet" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>