51 lines
1.0 KiB
Rust
51 lines
1.0 KiB
Rust
#![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<Ipv4Addr>,
|
|
}
|
|
|
|
pub struct IPv6Range {
|
|
pub subnet: Ipv6Cidr,
|
|
pub gateway: Ipv6Addr,
|
|
pub reserved_addrs: HashSet<Ipv6Addr>,
|
|
}
|
|
|
|
pub struct Interface {
|
|
pub driver: InterfaceType,
|
|
pub device: String,
|
|
pub ipv4: Vec<IPv4Range>,
|
|
pub ipv6: Vec<IPv6Range>,
|
|
}
|
|
|
|
// 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<Interface>,
|
|
pub volumes: Vec<Volume>,
|
|
pub public_port_range: Range<u16>,
|
|
pub max_ports_per_vm: u16,
|
|
}
|