exclude_prefix

Function exclude_prefix 

Source
pub fn exclude_prefix(source: IpNet, target: IpNet) -> Vec<IpNet>
Expand description

Splits a source IP network into multiple IP networks based on a target IP network.

It makes sure the returning IP networks are non-overlapping and does not include the target prefix.

§Arguments

  • source - The source IP network to split.
  • target - The target IP network used for splitting.

§Returns

A vector containing the split IP networks.

use std::net::{IpAddr, Ipv4Addr};
use ipnet::{IpNet, Ipv4Net};
use ipnet_trie::exclude_prefix;

let source: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 22).unwrap());
let target: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 24).unwrap());
let split_networks = exclude_prefix(source, target);
assert_eq!(split_networks.len(), 2);

let source: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 24).unwrap());
let target: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 24).unwrap());
let split_networks = exclude_prefix(source, target);
assert_eq!(split_networks.len(), 0);

let source: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 23).unwrap());
let target: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 24).unwrap());
let split_networks = exclude_prefix(source, target);
assert_eq!(split_networks.len(), 1);
assert_ne!(split_networks[0], source);

let source: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 24).unwrap());
let target: IpNet = IpNet::V4(Ipv4Net::new(Ipv4Addr::new(192, 168, 0, 0), 23).unwrap());
let split_networks = exclude_prefix(source, target);
assert_eq!(split_networks[0], source);
assert_eq!(split_networks.len(), 1);