blob: 3d93bdfd72a54465dd718b364781b956b49fa8bf [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
anyhow::{Context as _, Error},
dhcp_validity_lib::{configure_dhcp_server, verify_v4_addr_present, verify_v6_dns_servers},
dns_server_watcher::DEFAULT_DNS_PORT,
fidl_fuchsia_net as fnet, fidl_fuchsia_net_name as fnetname, fuchsia_async as fasync,
matches::assert_matches,
net_declare::{fidl_ip, fidl_ip_v6},
std::time::Duration,
};
#[fasync::run_singlethreaded]
async fn main() -> Result<(), Error> {
let () = configure_dhcp_server("debian_guest", "/bin/sh -c /root/input/dhcp_setup.sh")
.await
.context("configuring DHCP server on Debian guest")?;
// Configured in dhcpd.conf.
let want_v4_address = fidl_ip!("192.168.1.10");
// Configured in dhcpd6.conf.
let want_v6_dns_servers = vec![
fnetname::DnsServer_ {
address: Some(fnet::SocketAddress::Ipv6(fnet::Ipv6SocketAddress {
address: fidl_ip_v6!("1234::5:6"),
zone_index: 0,
port: DEFAULT_DNS_PORT,
})),
source: Some(fnetname::DnsServerSource::Dhcpv6(fnetname::Dhcpv6DnsServerSource {
source_interface: Some(2),
..fnetname::Dhcpv6DnsServerSource::EMPTY
})),
..fnetname::DnsServer_::EMPTY
},
fnetname::DnsServer_ {
address: Some(fnet::SocketAddress::Ipv6(fnet::Ipv6SocketAddress {
address: fidl_ip_v6!("7890::12:34"),
zone_index: 0,
port: DEFAULT_DNS_PORT,
})),
source: Some(fnetname::DnsServerSource::Dhcpv6(fnetname::Dhcpv6DnsServerSource {
source_interface: Some(2),
..fnetname::Dhcpv6DnsServerSource::EMPTY
})),
..fnetname::DnsServer_::EMPTY
},
fnetname::DnsServer_ {
address: Some(fnet::SocketAddress::Ipv6(fnet::Ipv6SocketAddress {
address: fidl_ip_v6!("fe80::1:2:3:4"),
zone_index: 2,
port: DEFAULT_DNS_PORT,
})),
source: Some(fnetname::DnsServerSource::Dhcpv6(fnetname::Dhcpv6DnsServerSource {
source_interface: Some(2),
..fnetname::Dhcpv6DnsServerSource::EMPTY
})),
..fnetname::DnsServer_::EMPTY
},
];
assert_matches!(
futures::join!(
verify_v4_addr_present(want_v4_address, Duration::from_secs(30)),
verify_v6_dns_servers(2 /* interface_id */, want_v6_dns_servers),
),
(Ok(()), Ok(()))
);
Ok(())
}