diff --git a/dialer.go b/dialer.go index a0ccdeb..8099520 100644 --- a/dialer.go +++ b/dialer.go @@ -151,6 +151,7 @@ func NewDialer(c Config) (Multidialer, error) { type iface struct { name string addrs []netip.Prefix + down bool } func processIface(info Interface) (iface, error) { @@ -168,7 +169,7 @@ func processIface(info Interface) (iface, error) { addrs = append(addrs, p) } - return iface{name: info.Name(), addrs: addrs}, nil + return iface{name: info.Name(), addrs: addrs, down: info.Down()}, nil } func processSubnet(subnet string, sources []iface) (Subnet, error) { @@ -185,6 +186,7 @@ func processSubnet(subnet string, sources []iface) (Subnet, error) { ifs = append(ifs, Source{ Name: source.name, LocalAddr: &net.TCPAddr{IP: net.IP(src.AsSlice())}, + Down: source.down, }) } } diff --git a/dialer_hostname_test.go b/dialer_hostname_test.go index 1df305c..58d90a5 100644 --- a/dialer_hostname_test.go +++ b/dialer_hostname_test.go @@ -114,10 +114,12 @@ func testInterfacesV6() ([]Interface, error) { type testInterface struct { name string addrs []net.Addr + down bool } func (i *testInterface) Name() string { return i.name } func (i *testInterface) Addrs() ([]net.Addr, error) { return i.addrs, nil } +func (i *testInterface) Down() bool { return i.down } type testAddr struct { network string diff --git a/interface.go b/interface.go index 0d9677a..87b0fb5 100644 --- a/interface.go +++ b/interface.go @@ -6,6 +6,7 @@ import "net" type Interface interface { Name() string Addrs() ([]net.Addr, error) + Down() bool } type netInterface struct { @@ -20,6 +21,10 @@ func (i *netInterface) Addrs() ([]net.Addr, error) { return i.iface.Addrs() } +func (i *netInterface) Down() bool { + return i.iface.Flags&net.FlagUp == 0 +} + func systemInterfaces() ([]Interface, error) { ifaces, err := net.Interfaces() if err != nil {