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);