- Netlink linux tagged files - Netlink linux || darwin tagged files - Create non-implemented files for NOT linux - Create non-implemented files for NOT linux and NOT darwin - Specify wireguard netlink integration test as for linux only
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
//go:build linux
|
|
|
|
package netlink
|
|
|
|
import (
|
|
"github.com/vishvananda/netlink"
|
|
)
|
|
|
|
func NewRule() Rule {
|
|
// defaults found from netlink.NewRule() for fields we use,
|
|
// the rest of the defaults is set when converting from a `Rule`
|
|
// to a `netlink.Rule`
|
|
return Rule{
|
|
Priority: -1,
|
|
Mark: -1,
|
|
}
|
|
}
|
|
|
|
func (n *NetLink) RuleList(family int) (rules []Rule, err error) {
|
|
netlinkRules, err := netlink.RuleList(family)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
rules = make([]Rule, len(netlinkRules))
|
|
for i := range netlinkRules {
|
|
rules[i] = netlinkRuleToRule(netlinkRules[i])
|
|
}
|
|
return rules, nil
|
|
}
|
|
|
|
func (n *NetLink) RuleAdd(rule Rule) error {
|
|
netlinkRule := ruleToNetlinkRule(rule)
|
|
return netlink.RuleAdd(&netlinkRule)
|
|
}
|
|
|
|
func (n *NetLink) RuleDel(rule Rule) error {
|
|
netlinkRule := ruleToNetlinkRule(rule)
|
|
return netlink.RuleDel(&netlinkRule)
|
|
}
|
|
|
|
func ruleToNetlinkRule(rule Rule) (netlinkRule netlink.Rule) {
|
|
netlinkRule = *netlink.NewRule()
|
|
netlinkRule.Priority = rule.Priority
|
|
netlinkRule.Family = rule.Family
|
|
netlinkRule.Table = rule.Table
|
|
netlinkRule.Mark = rule.Mark
|
|
netlinkRule.Src = netipPrefixToIPNet(rule.Src)
|
|
netlinkRule.Dst = netipPrefixToIPNet(rule.Dst)
|
|
netlinkRule.Invert = rule.Invert
|
|
return netlinkRule
|
|
}
|
|
|
|
func netlinkRuleToRule(netlinkRule netlink.Rule) (rule Rule) {
|
|
return Rule{
|
|
Priority: netlinkRule.Priority,
|
|
Family: netlinkRule.Family,
|
|
Table: netlinkRule.Table,
|
|
Mark: netlinkRule.Mark,
|
|
Src: netIPNetToNetipPrefix(netlinkRule.Src),
|
|
Dst: netIPNetToNetipPrefix(netlinkRule.Dst),
|
|
Invert: netlinkRule.Invert,
|
|
}
|
|
}
|