mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-16 21:50:22 +02:00
chore(all): replace netlink library for more flexibility (#3107)
This commit is contained in:
+39
-13
@@ -7,12 +7,19 @@ import (
|
||||
"github.com/qdm12/gluetun/internal/netlink"
|
||||
)
|
||||
|
||||
func (r *Routing) addIPRule(src, dst netip.Prefix, table, priority int) error {
|
||||
rule := netlink.NewRule()
|
||||
rule.Src = src
|
||||
rule.Dst = dst
|
||||
rule.Priority = priority
|
||||
rule.Table = table
|
||||
func (r *Routing) addIPRule(src, dst netip.Prefix, table, priority uint32) error {
|
||||
family := netlink.FamilyV4
|
||||
if (src.IsValid() && src.Addr().Is6()) || (dst.IsValid() && dst.Addr().Is6()) {
|
||||
family = netlink.FamilyV6
|
||||
}
|
||||
rule := netlink.Rule{
|
||||
Priority: &priority,
|
||||
Family: family,
|
||||
Table: table,
|
||||
Src: src,
|
||||
Dst: dst,
|
||||
Action: netlink.ActionToTable,
|
||||
}
|
||||
|
||||
existingRules, err := r.netLinker.RuleList(netlink.FamilyAll)
|
||||
if err != nil {
|
||||
@@ -31,12 +38,19 @@ func (r *Routing) addIPRule(src, dst netip.Prefix, table, priority int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Routing) deleteIPRule(src, dst netip.Prefix, table, priority int) error {
|
||||
rule := netlink.NewRule()
|
||||
rule.Src = src
|
||||
rule.Dst = dst
|
||||
rule.Priority = priority
|
||||
rule.Table = table
|
||||
func (r *Routing) deleteIPRule(src, dst netip.Prefix, table uint32, priority uint32) error {
|
||||
family := netlink.FamilyV4
|
||||
if (src.IsValid() && src.Addr().Is6()) || (dst.IsValid() && dst.Addr().Is6()) {
|
||||
family = netlink.FamilyV6
|
||||
}
|
||||
rule := netlink.Rule{
|
||||
Priority: &priority,
|
||||
Family: family,
|
||||
Table: table,
|
||||
Src: src,
|
||||
Dst: dst,
|
||||
Action: netlink.ActionToTable,
|
||||
}
|
||||
|
||||
existingRules, err := r.netLinker.RuleList(netlink.FamilyAll)
|
||||
if err != nil {
|
||||
@@ -53,10 +67,12 @@ func (r *Routing) deleteIPRule(src, dst netip.Prefix, table, priority int) error
|
||||
return nil
|
||||
}
|
||||
|
||||
// rulesAreEqual checks whether two rules are equal
|
||||
// only according to src, dst, priority and table.
|
||||
func rulesAreEqual(a, b netlink.Rule) bool {
|
||||
return ipPrefixesAreEqual(a.Src, b.Src) &&
|
||||
ipPrefixesAreEqual(a.Dst, b.Dst) &&
|
||||
a.Priority == b.Priority &&
|
||||
ptrsEqual(a.Priority, b.Priority) &&
|
||||
a.Table == b.Table
|
||||
}
|
||||
|
||||
@@ -70,3 +86,13 @@ func ipPrefixesAreEqual(a, b netip.Prefix) bool {
|
||||
return a.Bits() == b.Bits() &&
|
||||
a.Addr().Compare(b.Addr()) == 0
|
||||
}
|
||||
|
||||
func ptrsEqual(a, b *uint32) bool {
|
||||
if a == nil && b == nil {
|
||||
return true
|
||||
}
|
||||
if a == nil || b == nil {
|
||||
return false
|
||||
}
|
||||
return *a == *b
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user