| 32 | } |
| 33 | |
| 34 | fn validate(ip: Ipv4Net, reserved_net: &[Ipv4Net], client_ip_range: Ipv4Net) -> Result<()> { |
| 35 | // The reserved net must be in the network |
| 36 | for net in reserved_net { |
| 37 | if !ip.contains(net) { |
| 38 | bail!("Reserved net is not in the network"); |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | // The ip must be in one of the reserved net |
| 43 | if !reserved_net.iter().any(|net| net.contains(&ip.addr())) { |
| 44 | bail!("Wg peer IP is not in the reserved net"); |
| 45 | } |
| 46 | |
| 47 | // The client ip range must be in the network |
| 48 | if !ip.trunc().contains(&client_ip_range) { |
| 49 | bail!("Client IP range is not in the network"); |
| 50 | } |
| 51 | Ok(()) |
| 52 | } |
| 53 | |
| 54 | #[derive(Debug, Clone, Deserialize)] |
| 55 | pub enum CryptoProvider { |