tailscale/prober/tun_darwin.go
Percy Wegmann 1ed9bd76d6 prober: perform DERP bandwidth probes over TUN device to mimic real client
Updates tailscale/corp#24635

Co-authored-by: Mario Minardi <mario@tailscale.com>
Signed-off-by: Percy Wegmann <percy@tailscale.com>
2024-12-13 15:50:47 -06:00

36 lines
823 B
Go

// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
//go:build darwin
package prober
import (
"fmt"
"net/netip"
"os/exec"
"go4.org/netipx"
)
const tunName = "utun"
func configureTUN(addr netip.Prefix, tunname string) error {
cmd := exec.Command("ifconfig", tunname, "inet", addr.String(), addr.Addr().String())
res, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("failed to add address: %w (%s)", err, string(res))
}
net := netipx.PrefixIPNet(addr)
nip := net.IP.Mask(net.Mask)
nstr := fmt.Sprintf("%v/%d", nip, addr.Bits())
cmd = exec.Command("route", "-q", "-n", "add", "-inet", nstr, "-iface", addr.Addr().String())
res, err = cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("failed to add route: %w (%s)", err, string(res))
}
return nil
}