Merge pull request #21 from aeber/fix_macos_ipv6

Fix macos ip/route setup for ipv6 nets
pull/31/head
Jake McGinty 2021-04-02 16:44:40 +09:00 committed by GitHub
commit d2bc2b3506
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 11 deletions

View File

@ -24,6 +24,8 @@ fn cmd(bin: &str, args: &[&str]) -> Result<process::Output, Error> {
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub fn set_addr(interface: &str, addr: IpNetwork) -> Result<(), Error> { pub fn set_addr(interface: &str, addr: IpNetwork) -> Result<(), Error> {
let real_interface = wgctrl::backends::userspace::resolve_tun(interface).with_str(interface)?; let real_interface = wgctrl::backends::userspace::resolve_tun(interface).with_str(interface)?;
if addr.is_ipv4() {
cmd( cmd(
"ifconfig", "ifconfig",
&[ &[
@ -34,6 +36,12 @@ pub fn set_addr(interface: &str, addr: IpNetwork) -> Result<(), Error> {
"alias", "alias",
], ],
)?; )?;
} else {
cmd(
"ifconfig",
&[&real_interface, "inet6", &addr.to_string(), "alias"],
)?;
}
cmd("ifconfig", &[&real_interface, "mtu", "1420"])?; cmd("ifconfig", &[&real_interface, "mtu", "1420"])?;
Ok(()) Ok(())
} }
@ -113,7 +121,7 @@ pub fn add_route(interface: &str, cidr: IpNetwork) -> Result<bool, Error> {
&[ &[
"-n", "-n",
"add", "add",
"-inet", if cidr.is_ipv4() { "-inet" } else { "-inet6" },
&cidr.to_string(), &cidr.to_string(),
"-interface", "-interface",
&real_interface, &real_interface,