chore(all): use netip.Prefix for ip networks

- remove usage of `net.IPNet`
- remove usage of `netaddr.IPPrefix`
This commit is contained in:
Quentin McGaw
2023-04-27 13:41:05 +00:00
parent 801a7fd6fe
commit d21a943779
32 changed files with 344 additions and 315 deletions

View File

@@ -0,0 +1,33 @@
package routing
import (
"fmt"
"net"
"net/netip"
)
func NetipPrefixToIPNet(prefix *netip.Prefix) (ipNet *net.IPNet) {
if prefix == nil {
return nil
}
s := prefix.String()
ip, ipNet, err := net.ParseCIDR(s)
if err != nil {
panic(err)
}
ipNet.IP = ip
return ipNet
}
func netIPNetToNetipPrefix(ipNet net.IPNet) (prefix netip.Prefix) {
return netip.MustParsePrefix(ipNet.String())
}
func netIPToNetipAddress(ip net.IP) (address netip.Addr) {
address, ok := netip.AddrFromSlice(ip)
if !ok {
panic(fmt.Sprintf("converting %#v to netip.Addr failed", ip))
}
return address
}

View File

@@ -0,0 +1,52 @@
package routing
import (
"net"
"net/netip"
"testing"
"github.com/stretchr/testify/assert"
)
func Test_netIPToNetipAddress(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
ip net.IP
address netip.Addr
panicMessage string
}{
"nil ip": {
panicMessage: "converting net.IP(nil) to netip.Addr failed",
},
"IPv4": {
ip: net.IPv4(1, 2, 3, 4),
address: netip.AddrFrom4([4]byte{1, 2, 3, 4}),
},
"IPv6": {
ip: net.IPv6zero,
address: netip.AddrFrom16([16]byte{}),
},
"IPv4 prefixed with 0xffff": {
ip: net.IP{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 1, 2, 3, 4},
address: netip.AddrFrom4([4]byte{1, 2, 3, 4}),
},
}
for name, testCase := range testCases {
testCase := testCase
t.Run(name, func(t *testing.T) {
t.Parallel()
if testCase.panicMessage != "" {
assert.PanicsWithValue(t, testCase.panicMessage, func() {
netIPToNetipAddress(testCase.ip)
})
return
}
address := netIPToNetipAddress(testCase.ip)
assert.Equal(t, testCase.address, address)
})
}
}

View File

@@ -2,7 +2,7 @@ package routing
import (
"fmt"
"net"
"net/netip"
"github.com/qdm12/gluetun/internal/netlink"
)
@@ -17,8 +17,9 @@ func (r *Routing) routeInboundFromDefault(defaultRoutes []DefaultRoute) (err err
return fmt.Errorf("adding rule: %w", err)
}
defaultDestinationIPv4 := net.IPNet{IP: net.IPv4(0, 0, 0, 0), Mask: net.IPv4Mask(0, 0, 0, 0)}
defaultDestinationIPv6 := net.IPNet{IP: net.IPv6zero, Mask: net.IPMask(net.IPv6zero)}
const bits = 0
defaultDestinationIPv4 := netip.PrefixFrom(netip.AddrFrom4([4]byte{}), bits)
defaultDestinationIPv6 := netip.PrefixFrom(netip.AddrFrom16([16]byte{}), bits)
for _, defaultRoute := range defaultRoutes {
defaultDestination := defaultDestinationIPv4
@@ -36,8 +37,9 @@ func (r *Routing) routeInboundFromDefault(defaultRoutes []DefaultRoute) (err err
}
func (r *Routing) unrouteInboundFromDefault(defaultRoutes []DefaultRoute) (err error) {
defaultDestinationIPv4 := net.IPNet{IP: net.IPv4(0, 0, 0, 0), Mask: net.IPv4Mask(0, 0, 0, 0)}
defaultDestinationIPv6 := net.IPNet{IP: net.IPv6zero, Mask: net.IPMask(net.IPv6zero)}
const bits = 0
defaultDestinationIPv4 := netip.PrefixFrom(netip.AddrFrom4([4]byte{}), bits)
defaultDestinationIPv6 := netip.PrefixFrom(netip.AddrFrom16([16]byte{}), bits)
for _, defaultRoute := range defaultRoutes {
defaultDestination := defaultDestinationIPv4
@@ -60,9 +62,16 @@ func (r *Routing) unrouteInboundFromDefault(defaultRoutes []DefaultRoute) (err e
func (r *Routing) addRuleInboundFromDefault(table int, defaultRoutes []DefaultRoute) (err error) {
for _, defaultRoute := range defaultRoutes {
defaultIPMasked32 := netlink.NewIPNet(defaultRoute.AssignedIP)
ruleDstNet := (*net.IPNet)(nil)
err = r.addIPRule(defaultIPMasked32, ruleDstNet, table, inboundPriority)
assignedIP := netIPToNetipAddress(defaultRoute.AssignedIP)
bits := 32
if assignedIP.Is6() {
bits = 128
}
r.logger.Debug(fmt.Sprintf("ASSIGNED IP IS %#v -> %s, bits %d",
defaultRoute.AssignedIP, assignedIP, bits))
defaultIPMasked := netip.PrefixFrom(assignedIP, bits)
ruleDstNet := (*netip.Prefix)(nil)
err = r.addIPRule(&defaultIPMasked, ruleDstNet, table, inboundPriority)
if err != nil {
return fmt.Errorf("adding rule for default route %s: %w", defaultRoute, err)
}
@@ -73,9 +82,14 @@ func (r *Routing) addRuleInboundFromDefault(table int, defaultRoutes []DefaultRo
func (r *Routing) delRuleInboundFromDefault(table int, defaultRoutes []DefaultRoute) (err error) {
for _, defaultRoute := range defaultRoutes {
defaultIPMasked32 := netlink.NewIPNet(defaultRoute.AssignedIP)
ruleDstNet := (*net.IPNet)(nil)
err = r.deleteIPRule(defaultIPMasked32, ruleDstNet, table, inboundPriority)
assignedIP := netIPToNetipAddress(defaultRoute.AssignedIP)
bits := 32
if assignedIP.Is6() {
bits = 128
}
defaultIPMasked := netip.PrefixFrom(assignedIP, bits)
ruleDstNet := (*netip.Prefix)(nil)
err = r.deleteIPRule(&defaultIPMasked, ruleDstNet, table, inboundPriority)
if err != nil {
return fmt.Errorf("deleting rule for default route %s: %w", defaultRoute, err)
}

View File

@@ -22,6 +22,18 @@ func ipMatchesFamily(ip net.IP, family int) bool {
(family == netlink.FAMILY_V4 && ip.To4() != nil)
}
func ensureNoIPv6WrappedIPv4(candidateIP net.IP) (resultIP net.IP) {
const ipv4Size = 4
if candidateIP.To4() == nil || len(candidateIP) == ipv4Size { // ipv6 or ipv4
return candidateIP
}
// ipv6-wrapped ipv4
resultIP = make(net.IP, ipv4Size)
copy(resultIP, candidateIP[12:16])
return resultIP
}
func (r *Routing) assignedIP(interfaceName string, family int) (ip net.IP, err error) {
iface, err := net.InterfaceByName(interfaceName)
if err != nil {
@@ -34,14 +46,22 @@ func (r *Routing) assignedIP(interfaceName string, family int) (ip net.IP, err e
for _, address := range addresses {
switch value := address.(type) {
case *net.IPAddr:
if ipMatchesFamily(value.IP, family) {
return value.IP, nil
}
ip = value.IP
case *net.IPNet:
if ipMatchesFamily(value.IP, family) {
return value.IP, nil
}
ip = value.IP
default:
continue
}
if !ipMatchesFamily(ip, family) {
continue
}
// Ensure we don't return an IPv6-wrapped IPv4 address
// since netip.Address String method works differently than
// net.IP String method for this kind of addresses.
ip = ensureNoIPv6WrappedIPv4(ip)
return ip, nil
}
return nil, fmt.Errorf("%w: interface %s in %d addresses",
errInterfaceIPNotFound, interfaceName, len(addresses))

View File

@@ -96,3 +96,35 @@ func Test_IPIsPrivate(t *testing.T) {
})
}
}
func Test_ensureNoIPv6WrappedIPv4(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
candidateIP net.IP
resultIP net.IP
}{
"nil": {},
"ipv6": {
candidateIP: net.IPv6loopback,
resultIP: net.IPv6loopback,
},
"ipv4": {
candidateIP: net.IP{1, 2, 3, 4},
resultIP: net.IP{1, 2, 3, 4},
},
"ipv6_wrapped_ipv4": {
candidateIP: net.IPv4(1, 2, 3, 4),
resultIP: net.IP{1, 2, 3, 4},
},
}
for name, testCase := range testCases {
testCase := testCase
t.Run(name, func(t *testing.T) {
t.Parallel()
resultIP := ensureNoIPv6WrappedIPv4(testCase.candidateIP)
assert.Equal(t, testCase.resultIP, resultIP)
})
}
}

View File

@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"net"
"net/netip"
"github.com/qdm12/gluetun/internal/netlink"
)
@@ -15,7 +16,7 @@ var (
)
type LocalNetwork struct {
IPNet *net.IPNet
IPNet netip.Prefix
InterfaceName string
IP net.IP
}
@@ -55,7 +56,7 @@ func (r *Routing) LocalNetworks() (localNetworks []LocalNetwork, err error) {
var localNet LocalNetwork
localNet.IPNet = route.Dst
localNet.IPNet = netIPNetToNetipPrefix(*route.Dst)
r.logger.Info("local ipnet found: " + localNet.IPNet.String())
link, err := r.netLinker.LinkByIndex(route.LinkIndex)
@@ -66,7 +67,7 @@ func (r *Routing) LocalNetworks() (localNetworks []LocalNetwork, err error) {
localNet.InterfaceName = link.Attrs().Name
family := netlink.FAMILY_V6
if localNet.IPNet.IP.To4() != nil {
if localNet.IPNet.Addr().Is4() {
family = netlink.FAMILY_V4
}
ip, err := r.assignedIP(localNet.InterfaceName, family)
@@ -87,7 +88,7 @@ func (r *Routing) LocalNetworks() (localNetworks []LocalNetwork, err error) {
}
func (r *Routing) AddLocalRules(subnets []LocalNetwork) (err error) {
for _, net := range subnets {
for _, subnet := range subnets {
// The main table is a built-in value for Linux, see "man 8 ip-route"
const mainTable = 254
@@ -96,9 +97,9 @@ func (r *Routing) AddLocalRules(subnets []LocalNetwork) (err error) {
const localPriority = 98
// Main table was setup correctly by Docker, just need to add rules to use it
err = r.addIPRule(nil, net.IPNet, mainTable, localPriority)
err = r.addIPRule(nil, &subnet.IPNet, mainTable, localPriority)
if err != nil {
return fmt.Errorf("adding rule: %v: %w", net.IPNet, err)
return fmt.Errorf("adding rule: %v: %w", subnet.IPNet, err)
}
}
return nil

View File

@@ -2,7 +2,7 @@ package routing
import (
"fmt"
"net"
"net/netip"
"github.com/qdm12/gluetun/internal/subnet"
)
@@ -12,7 +12,7 @@ const (
outboundPriority = 99
)
func (r *Routing) SetOutboundRoutes(outboundSubnets []net.IPNet) error {
func (r *Routing) SetOutboundRoutes(outboundSubnets []netip.Prefix) error {
defaultRoutes, err := r.DefaultRoutes()
if err != nil {
return err
@@ -20,7 +20,7 @@ func (r *Routing) SetOutboundRoutes(outboundSubnets []net.IPNet) error {
return r.setOutboundRoutes(outboundSubnets, defaultRoutes)
}
func (r *Routing) setOutboundRoutes(outboundSubnets []net.IPNet,
func (r *Routing) setOutboundRoutes(outboundSubnets []netip.Prefix,
defaultRoutes []DefaultRoute) (err error) {
r.stateMutex.Lock()
defer r.stateMutex.Unlock()
@@ -45,7 +45,7 @@ func (r *Routing) setOutboundRoutes(outboundSubnets []net.IPNet,
return nil
}
func (r *Routing) removeOutboundSubnets(subnets []net.IPNet,
func (r *Routing) removeOutboundSubnets(subnets []netip.Prefix,
defaultRoutes []DefaultRoute) (warnings []string) {
for i, subNet := range subnets {
for _, defaultRoute := range defaultRoutes {
@@ -56,7 +56,7 @@ func (r *Routing) removeOutboundSubnets(subnets []net.IPNet,
}
}
ruleSrcNet := (*net.IPNet)(nil)
ruleSrcNet := (*netip.Prefix)(nil)
ruleDstNet := &subnets[i]
err := r.deleteIPRule(ruleSrcNet, ruleDstNet, outboundTable, outboundPriority)
if err != nil {
@@ -71,7 +71,7 @@ func (r *Routing) removeOutboundSubnets(subnets []net.IPNet,
return warnings
}
func (r *Routing) addOutboundSubnets(subnets []net.IPNet,
func (r *Routing) addOutboundSubnets(subnets []netip.Prefix,
defaultRoutes []DefaultRoute) (err error) {
for i, subnet := range subnets {
for _, defaultRoute := range defaultRoutes {
@@ -81,7 +81,7 @@ func (r *Routing) addOutboundSubnets(subnets []net.IPNet,
}
}
ruleSrcNet := (*net.IPNet)(nil)
ruleSrcNet := (*netip.Prefix)(nil)
ruleDstNet := &subnets[i]
err = r.addIPRule(ruleSrcNet, ruleDstNet, outboundTable, outboundPriority)
if err != nil {

View File

@@ -3,12 +3,13 @@ package routing
import (
"fmt"
"net"
"net/netip"
"strconv"
"github.com/qdm12/gluetun/internal/netlink"
)
func (r *Routing) addRouteVia(destination net.IPNet, gateway net.IP,
func (r *Routing) addRouteVia(destination netip.Prefix, gateway net.IP,
iface string, table int) error {
destinationStr := destination.String()
r.logger.Info("adding route for " + destinationStr)
@@ -23,7 +24,7 @@ func (r *Routing) addRouteVia(destination net.IPNet, gateway net.IP,
}
route := netlink.Route{
Dst: &destination,
Dst: NetipPrefixToIPNet(&destination),
Gw: gateway,
LinkIndex: link.Attrs().Index,
Table: table,
@@ -36,7 +37,7 @@ func (r *Routing) addRouteVia(destination net.IPNet, gateway net.IP,
return nil
}
func (r *Routing) deleteRouteVia(destination net.IPNet, gateway net.IP,
func (r *Routing) deleteRouteVia(destination netip.Prefix, gateway net.IP,
iface string, table int) (err error) {
destinationStr := destination.String()
r.logger.Info("deleting route for " + destinationStr)
@@ -51,7 +52,7 @@ func (r *Routing) deleteRouteVia(destination net.IPNet, gateway net.IP,
}
route := netlink.Route{
Dst: &destination,
Dst: NetipPrefixToIPNet(&destination),
Gw: gateway,
LinkIndex: link.Attrs().Index,
Table: table,

View File

@@ -1,7 +1,7 @@
package routing
import (
"net"
"net/netip"
"sync"
"github.com/qdm12/gluetun/internal/netlink"
@@ -48,7 +48,7 @@ type Linker interface {
type Routing struct {
netLinker NetLinker
logger Logger
outboundSubnets []net.IPNet
outboundSubnets []netip.Prefix
stateMutex sync.RWMutex
}

View File

@@ -4,17 +4,18 @@ import (
"bytes"
"fmt"
"net"
"net/netip"
"github.com/qdm12/gluetun/internal/netlink"
)
func (r *Routing) addIPRule(src, dst *net.IPNet, table, priority int) error {
func (r *Routing) addIPRule(src, dst *netip.Prefix, table, priority int) error {
const add = true
r.logger.Debug(ruleDbgMsg(add, src, dst, table, priority))
rule := netlink.NewRule()
rule.Src = src
rule.Dst = dst
rule.Src = NetipPrefixToIPNet(src)
rule.Dst = NetipPrefixToIPNet(dst)
rule.Priority = priority
rule.Table = table
@@ -35,13 +36,13 @@ func (r *Routing) addIPRule(src, dst *net.IPNet, table, priority int) error {
return nil
}
func (r *Routing) deleteIPRule(src, dst *net.IPNet, table, priority int) error {
func (r *Routing) deleteIPRule(src, dst *netip.Prefix, table, priority int) error {
const add = false
r.logger.Debug(ruleDbgMsg(add, src, dst, table, priority))
rule := netlink.NewRule()
rule.Src = src
rule.Dst = dst
rule.Src = NetipPrefixToIPNet(src)
rule.Dst = NetipPrefixToIPNet(dst)
rule.Priority = priority
rule.Table = table
@@ -60,7 +61,7 @@ func (r *Routing) deleteIPRule(src, dst *net.IPNet, table, priority int) error {
return nil
}
func ruleDbgMsg(add bool, src, dst *net.IPNet,
func ruleDbgMsg(add bool, src, dst *netip.Prefix,
table, priority int) (debugMessage string) {
debugMessage = "ip rule"

View File

@@ -3,6 +3,7 @@ package routing
import (
"errors"
"net"
"net/netip"
"testing"
"github.com/golang/mock/gomock"
@@ -11,20 +12,17 @@ import (
"github.com/stretchr/testify/require"
)
func makeIPNet(t *testing.T, n byte) *net.IPNet {
t.Helper()
return &net.IPNet{
IP: net.IPv4(n, n, n, 0),
Mask: net.IPv4Mask(255, 255, 255, 0),
}
func makeNetipPrefix(n byte) *netip.Prefix {
const bits = 24
prefix := netip.PrefixFrom(netip.AddrFrom4([4]byte{n, n, n, 0}), bits)
return &prefix
}
func makeIPRule(t *testing.T, src, dst *net.IPNet,
func makeIPRule(src, dst *netip.Prefix,
table, priority int) *netlink.Rule {
t.Helper()
rule := netlink.NewRule()
rule.Src = src
rule.Dst = dst
rule.Src = NetipPrefixToIPNet(src)
rule.Dst = NetipPrefixToIPNet(dst)
rule.Table = table
rule.Priority = priority
return rule
@@ -47,8 +45,8 @@ func Test_Routing_addIPRule(t *testing.T) {
}
testCases := map[string]struct {
src *net.IPNet
dst *net.IPNet
src *netip.Prefix
dst *netip.Prefix
table int
priority int
dbgMsg string
@@ -64,46 +62,46 @@ func Test_Routing_addIPRule(t *testing.T) {
err: errors.New("listing rules: dummy error"),
},
"rule already exists": {
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 99,
priority: 99,
dbgMsg: "ip rule add from 1.1.1.0/24 to 2.2.2.0/24 lookup 99 pref 99",
ruleList: ruleListCall{
rules: []netlink.Rule{
*makeIPRule(t, makeIPNet(t, 2), makeIPNet(t, 2), 99, 99),
*makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 99, 99),
*makeIPRule(makeNetipPrefix(2), makeNetipPrefix(2), 99, 99),
*makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 99, 99),
},
},
},
"add rule error": {
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 99,
priority: 99,
dbgMsg: "ip rule add from 1.1.1.0/24 to 2.2.2.0/24 lookup 99 pref 99",
ruleAdd: ruleAddCall{
expected: true,
ruleToAdd: makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 99, 99),
ruleToAdd: makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 99, 99),
err: errDummy,
},
err: errors.New("adding rule ip rule 99: from 1.1.1.0/24 to 2.2.2.0/24 table 99: dummy error"),
},
"add rule success": {
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 99,
priority: 99,
dbgMsg: "ip rule add from 1.1.1.0/24 to 2.2.2.0/24 lookup 99 pref 99",
ruleList: ruleListCall{
rules: []netlink.Rule{
*makeIPRule(t, makeIPNet(t, 2), makeIPNet(t, 2), 99, 99),
*makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 101, 101),
*makeIPRule(makeNetipPrefix(2), makeNetipPrefix(2), 99, 99),
*makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 101, 101),
},
},
ruleAdd: ruleAddCall{
expected: true,
ruleToAdd: makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 99, 99),
ruleToAdd: makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 99, 99),
},
},
}
@@ -160,8 +158,8 @@ func Test_Routing_deleteIPRule(t *testing.T) {
}
testCases := map[string]struct {
src *net.IPNet
dst *net.IPNet
src *netip.Prefix
dst *netip.Prefix
table int
priority int
dbgMsg string
@@ -177,50 +175,50 @@ func Test_Routing_deleteIPRule(t *testing.T) {
err: errors.New("listing rules: dummy error"),
},
"rule delete error": {
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 99,
priority: 99,
dbgMsg: "ip rule del from 1.1.1.0/24 to 2.2.2.0/24 lookup 99 pref 99",
ruleList: ruleListCall{
rules: []netlink.Rule{
*makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 99, 99),
*makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 99, 99),
},
},
ruleDel: ruleDelCall{
expected: true,
ruleToDel: makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 99, 99),
ruleToDel: makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 99, 99),
err: errDummy,
},
err: errors.New("deleting rule ip rule 99: from 1.1.1.0/24 to 2.2.2.0/24 table 99: dummy error"),
},
"rule deleted": {
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 99,
priority: 99,
dbgMsg: "ip rule del from 1.1.1.0/24 to 2.2.2.0/24 lookup 99 pref 99",
ruleList: ruleListCall{
rules: []netlink.Rule{
*makeIPRule(t, makeIPNet(t, 2), makeIPNet(t, 2), 99, 99),
*makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 99, 99),
*makeIPRule(makeNetipPrefix(2), makeNetipPrefix(2), 99, 99),
*makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 99, 99),
},
},
ruleDel: ruleDelCall{
expected: true,
ruleToDel: makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 99, 99),
ruleToDel: makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 99, 99),
},
},
"rule does not exist": {
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 99,
priority: 99,
dbgMsg: "ip rule del from 1.1.1.0/24 to 2.2.2.0/24 lookup 99 pref 99",
ruleList: ruleListCall{
rules: []netlink.Rule{
*makeIPRule(t, makeIPNet(t, 2), makeIPNet(t, 2), 99, 99),
*makeIPRule(t, makeIPNet(t, 1), makeIPNet(t, 2), 101, 101),
*makeIPRule(makeNetipPrefix(2), makeNetipPrefix(2), 99, 99),
*makeIPRule(makeNetipPrefix(1), makeNetipPrefix(2), 101, 101),
},
},
},
@@ -266,8 +264,8 @@ func Test_ruleDbgMsg(t *testing.T) {
testCases := map[string]struct {
add bool
src *net.IPNet
dst *net.IPNet
src *netip.Prefix
dst *netip.Prefix
table int
priority int
dbgMsg string
@@ -277,15 +275,15 @@ func Test_ruleDbgMsg(t *testing.T) {
},
"add rule": {
add: true,
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 100,
priority: 101,
dbgMsg: "ip rule add from 1.1.1.0/24 to 2.2.2.0/24 lookup 100 pref 101",
},
"del rule": {
src: makeIPNet(t, 1),
dst: makeIPNet(t, 2),
src: makeNetipPrefix(1),
dst: makeNetipPrefix(2),
table: 100,
priority: 101,
dbgMsg: "ip rule del from 1.1.1.0/24 to 2.2.2.0/24 lookup 100 pref 101",