diff --git a/internal/wireguard/ipv6.go b/internal/wireguard/ipv6.go index 45ba2a31..dc1ef95c 100644 --- a/internal/wireguard/ipv6.go +++ b/internal/wireguard/ipv6.go @@ -12,16 +12,23 @@ func (w *Wireguard) isIPv6Supported() (supported bool, err error) { return false, fmt.Errorf("cannot list links: %w", err) } + w.logger.Debug("Checking for IPv6 support...") for _, link := range links { + linkName := link.Attrs().Name routes, err := w.netlink.RouteList(link, netlink.FAMILY_V6) if err != nil { - return false, fmt.Errorf("cannot list routes: %w", err) + return false, fmt.Errorf("cannot list routes for link %s: %w", linkName, err) } - if len(routes) > 0 { - return true, nil + if len(routes) == 0 { + w.logger.Debugf("Link %s has no IPv6 route", linkName) + continue } + + w.logger.Debugf("Link %s has IPv6 routes: %#v", + linkName, routes) + supported = true } - return false, nil + return supported, nil } diff --git a/internal/wireguard/log.go b/internal/wireguard/log.go index b56c5b84..69fd7603 100644 --- a/internal/wireguard/log.go +++ b/internal/wireguard/log.go @@ -1,8 +1,6 @@ package wireguard import ( - "fmt" - "golang.zx2c4.com/wireguard/device" ) @@ -10,17 +8,15 @@ import ( type Logger interface { Debug(s string) + Debugf(format string, args ...interface{}) Info(s string) Error(s string) + Errorf(format string, args ...interface{}) } func makeDeviceLogger(logger Logger) (deviceLogger *device.Logger) { return &device.Logger{ - Verbosef: func(format string, args ...interface{}) { - logger.Debug(fmt.Sprintf(format, args...)) - }, - Errorf: func(format string, args ...interface{}) { - logger.Error(fmt.Sprintf(format, args...)) - }, + Verbosef: logger.Debugf, + Errorf: logger.Errorf, } } diff --git a/internal/wireguard/log_mock_test.go b/internal/wireguard/log_mock_test.go index a7a40456..24b2878b 100644 --- a/internal/wireguard/log_mock_test.go +++ b/internal/wireguard/log_mock_test.go @@ -45,6 +45,23 @@ func (mr *MockLoggerMockRecorder) Debug(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Debug", reflect.TypeOf((*MockLogger)(nil).Debug), arg0) } +// Debugf mocks base method. +func (m *MockLogger) Debugf(arg0 string, arg1 ...interface{}) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0} + for _, a := range arg1 { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Debugf", varargs...) +} + +// Debugf indicates an expected call of Debugf. +func (mr *MockLoggerMockRecorder) Debugf(arg0 interface{}, arg1 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0}, arg1...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Debugf", reflect.TypeOf((*MockLogger)(nil).Debugf), varargs...) +} + // Error mocks base method. func (m *MockLogger) Error(arg0 string) { m.ctrl.T.Helper() @@ -57,6 +74,23 @@ func (mr *MockLoggerMockRecorder) Error(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Error", reflect.TypeOf((*MockLogger)(nil).Error), arg0) } +// Errorf mocks base method. +func (m *MockLogger) Errorf(arg0 string, arg1 ...interface{}) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0} + for _, a := range arg1 { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Errorf", varargs...) +} + +// Errorf indicates an expected call of Errorf. +func (mr *MockLoggerMockRecorder) Errorf(arg0 interface{}, arg1 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0}, arg1...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Errorf", reflect.TypeOf((*MockLogger)(nil).Errorf), varargs...) +} + // Info mocks base method. func (m *MockLogger) Info(arg0 string) { m.ctrl.T.Helper() diff --git a/internal/wireguard/log_test.go b/internal/wireguard/log_test.go index c35c3d37..1491dd34 100644 --- a/internal/wireguard/log_test.go +++ b/internal/wireguard/log_test.go @@ -15,9 +15,9 @@ func Test_makeDeviceLogger(t *testing.T) { deviceLogger := makeDeviceLogger(logger) - logger.EXPECT().Debug("test 1") + logger.EXPECT().Debugf("test %d", 1) deviceLogger.Verbosef("test %d", 1) - logger.EXPECT().Error("test 2") + logger.EXPECT().Errorf("test %d", 2) deviceLogger.Errorf("test %d", 2) } diff --git a/internal/wireguard/route.go b/internal/wireguard/route.go index d86bf290..1c63ef46 100644 --- a/internal/wireguard/route.go +++ b/internal/wireguard/route.go @@ -19,7 +19,9 @@ func (w *Wireguard) addRoute(link netlink.Link, dst *net.IPNet, err = w.netlink.RouteAdd(route) if err != nil { - return fmt.Errorf("cannot add route %s: %w", route, err) + return fmt.Errorf( + "cannot add route for link %s, destination %s and table %d: %w", + link.Attrs().Name, dst, firewallMark, err) } return err diff --git a/internal/wireguard/route_test.go b/internal/wireguard/route_test.go index dc9c7dea..f873c437 100644 --- a/internal/wireguard/route_test.go +++ b/internal/wireguard/route_test.go @@ -53,7 +53,7 @@ func Test_Wireguard_addRoute(t *testing.T) { Table: firewallMark, }, routeAddErr: errDummy, - err: errors.New("cannot add route {Ifindex: 88 Dst: 1.2.3.4/32 Src: Gw: Flags: [] Table: 51820 Realm: 0}: dummy"), //nolint:lll + err: errors.New("cannot add route for link a_bridge, destination 1.2.3.4/32 and table 51820: dummy"), //nolint:lll }, }