#![allow(dead_code)] use cidr::Ipv4Cidr; use cidr::Ipv6Cidr; use core::net::Ipv4Addr; use core::net::Ipv6Addr; use std::collections::HashSet; use std::ops::Range; pub struct Volume { path: String, // maximum allowed storage in GB max_reservation: u64, } pub struct IPv4Range { pub subnet: Ipv4Cidr, pub gateway: Ipv4Addr, pub reserved_addrs: HashSet, } pub struct IPv6Range { pub subnet: Ipv6Cidr, pub gateway: Ipv6Addr, pub reserved_addrs: HashSet, } pub struct Interface { pub driver: InterfaceType, pub device: String, pub ipv4: Vec, pub ipv6: Vec, } // TODO: create mechanic to autodetect interface type pub enum InterfaceType { MACVTAP, IPVTAP, Bridge, } pub struct Config { pub max_cores_per_vm: usize, pub max_vcpu_reservation: usize, pub max_mem_reservation: usize, pub network_interfaces: Vec, pub volumes: Vec, pub public_port_range: Range, pub max_ports_per_vm: u16, }