chore(netlink): debug log ip rule commands in netlink instead of routing package

This commit is contained in:
Quentin McGaw
2024-10-19 12:43:26 +00:00
parent 2388e0550b
commit 3dfb43e117
8 changed files with 100 additions and 181 deletions

View File

@@ -0,0 +1,8 @@
package netlink
import "net/netip"
func makeNetipPrefix(n byte) netip.Prefix {
const bits = 24
return netip.PrefixFrom(netip.AddrFrom4([4]byte{n, n, n, 0}), bits)
}

View File

@@ -3,6 +3,7 @@ package netlink
import "github.com/qdm12/log"
type DebugLogger interface {
Debug(message string)
Debugf(format string, args ...any)
Patch(options ...log.Option)
}

View File

@@ -3,6 +3,8 @@
package netlink
import (
"fmt"
"github.com/vishvananda/netlink"
)
@@ -17,6 +19,15 @@ func NewRule() Rule {
}
func (n *NetLink) RuleList(family int) (rules []Rule, err error) {
switch family {
case FamilyAll:
n.debugLogger.Debug("ip -4 rule list")
n.debugLogger.Debug("ip -6 rule list")
case FamilyV4:
n.debugLogger.Debug("ip -4 rule list")
case FamilyV6:
n.debugLogger.Debug("ip -6 rule list")
}
netlinkRules, err := netlink.RuleList(family)
if err != nil {
return nil, err
@@ -30,11 +41,13 @@ func (n *NetLink) RuleList(family int) (rules []Rule, err error) {
}
func (n *NetLink) RuleAdd(rule Rule) error {
n.debugLogger.Debug(ruleDbgMsg(true, rule))
netlinkRule := ruleToNetlinkRule(rule)
return netlink.RuleAdd(&netlinkRule)
}
func (n *NetLink) RuleDel(rule Rule) error {
n.debugLogger.Debug(ruleDbgMsg(false, rule))
netlinkRule := ruleToNetlinkRule(rule)
return netlink.RuleDel(&netlinkRule)
}
@@ -62,3 +75,31 @@ func netlinkRuleToRule(netlinkRule netlink.Rule) (rule Rule) {
Invert: netlinkRule.Invert,
}
}
func ruleDbgMsg(add bool, rule Rule) (debugMessage string) {
debugMessage = "ip rule"
if add {
debugMessage += " add"
} else {
debugMessage += " del"
}
if rule.Src.IsValid() {
debugMessage += " from " + rule.Src.String()
}
if rule.Dst.IsValid() {
debugMessage += " to " + rule.Dst.String()
}
if rule.Table != 0 {
debugMessage += " lookup " + fmt.Sprint(rule.Table)
}
if rule.Priority != -1 {
debugMessage += " pref " + fmt.Sprint(rule.Priority)
}
return debugMessage
}

View File

@@ -0,0 +1,50 @@
package netlink
import (
"testing"
"github.com/stretchr/testify/assert"
)
func Test_ruleDbgMsg(t *testing.T) {
t.Parallel()
testCases := map[string]struct {
add bool
rule Rule
dbgMsg string
}{
"default values": {
dbgMsg: "ip rule del pref 0",
},
"add rule": {
add: true,
rule: Rule{
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": {
rule: Rule{
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",
},
}
for name, testCase := range testCases {
t.Run(name, func(t *testing.T) {
t.Parallel()
dbgMsg := ruleDbgMsg(testCase.add, testCase.rule)
assert.Equal(t, testCase.dbgMsg, dbgMsg)
})
}
}