- Move `Addr` and its `String` method to `types.go` - Move `IsWireguardSupported` to `wireguard.go` to have `family.go` OS independant - Remove dependency on vishvananda/netlink in `ipv6.go` - Move `Link` to `types.go` - Move `Route` to `types.go` - Move `Rule` and its `String` method to `types.go`
63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
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,
|
|
}
|
|
}
|