use ipnetwork::{Ipv4Network, Ipv6Network};
use std::net::{Ipv4Addr, Ipv6Addr};
use std::path::PathBuf;
use structopt::StructOpt;
#[derive(Debug, StructOpt)]
pub struct OptIpv4 {
#[structopt(name = "disable-ipv4", long = "disable-ipv4")]
pub disable: bool,
#[structopt(name = "net", long = "net", default_value = "10.0.2.0/24")]
pub net: Ipv4Network,
#[structopt(long, default_value = "10.0.2.2")]
pub host: Ipv4Addr,
#[structopt(
name = "dhcp-start",
long = "dhcp-start",
short,
default_value = "10.0.2.15"
)]
pub dhcp_start: Ipv4Addr,
#[structopt(long = "dhcp-dns", default_value = "10.0.2.3")]
pub dns: Ipv4Addr,
}
#[derive(Debug, StructOpt)]
pub struct OptIpv6 {
#[structopt(name = "disable-ipv6", long = "disable-ipv6")]
pub disable: bool,
#[structopt(name = "net6", long = "net6", default_value = "fec0::/64")]
pub net6: Ipv6Network,
#[structopt(name = "host-ipv6", long = "host-ipv6", default_value = "fec0::2")]
pub host: Ipv6Addr,
#[structopt(name = "dns-ipv6", long, default_value = "fec0::3")]
pub dns: Ipv6Addr,
}
#[derive(Debug, StructOpt)]
pub struct OptTftp {
#[structopt(name = "name", long = "tftp-name")]
pub name: Option<String>,
#[structopt(name = "root-path", parse(from_os_str), long = "tftp")]
pub root: Option<PathBuf>,
#[structopt(long = "dhcp-bootfile")]
pub bootfile: Option<String>,
}
#[derive(Debug, StructOpt)]
#[structopt(name = "slirp-opt")]
pub struct Opt {
#[structopt(long, short)]
pub restrict: bool,
#[structopt(long, default_value = "1500")]
pub mtu: usize,
#[structopt(long)]
pub disable_host_loopback: bool,
#[structopt(long)]
pub hostname: Option<String>,
#[structopt(long = "dns-suffixes")]
pub dns_suffixes: Vec<String>,
#[structopt(long)]
pub domainname: Option<String>,
#[structopt(flatten)]
pub ipv4: OptIpv4,
#[structopt(flatten)]
pub ipv6: OptIpv6,
#[structopt(flatten)]
pub tftp: OptTftp,
}