mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-06 20:10:11 +02:00
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package wireguard
|
|
|
|
import (
|
|
"math/rand/v2"
|
|
"net/netip"
|
|
|
|
"github.com/qdm12/gluetun/internal/netlink"
|
|
)
|
|
|
|
func ptrTo[T any](x T) *T { return &x }
|
|
|
|
var rng = rand.New(rand.NewChaCha8([32]byte{})) //nolint:gosec,gochecknoglobals
|
|
|
|
func makeLinkName() string {
|
|
const alphabet = "abcdefghijklmnopqrstuvwxyz"
|
|
b := make([]byte, 8)
|
|
for i := range b {
|
|
b[i] = alphabet[rng.IntN(len(alphabet))]
|
|
}
|
|
return "test" + string(b)
|
|
}
|
|
|
|
func rulesAreEqual(a, b netlink.Rule) bool {
|
|
return ipPrefixesAreEqual(a.Src, b.Src) &&
|
|
ipPrefixesAreEqual(a.Dst, b.Dst) &&
|
|
ptrsEqual(a.Priority, b.Priority) &&
|
|
a.Table == b.Table &&
|
|
a.Family == b.Family &&
|
|
a.Flags == b.Flags &&
|
|
a.Action == b.Action &&
|
|
ptrsEqual(a.Mark, b.Mark)
|
|
}
|
|
|
|
func ipPrefixesAreEqual(a, b netip.Prefix) bool {
|
|
if !a.IsValid() && !b.IsValid() {
|
|
return true
|
|
}
|
|
if !a.IsValid() || !b.IsValid() {
|
|
return false
|
|
}
|
|
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
|
|
}
|