1
0
mirror of https://github.com/bgp/stayrtr.git synced 2024-05-06 15:54:54 +00:00

Use netip.MustParsePrefix() instead of some ugly kludge

This commit is contained in:
Claudio Jeker
2023-12-21 15:44:16 +01:00
parent 4dc8601652
commit d7c85e3a24

View File

@ -1,8 +1,7 @@
package rtrlib
import (
"encoding/binary"
"net"
"fmt"
"net/netip"
"runtime"
"testing"
@ -10,19 +9,14 @@ import (
"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/assert"
"go4.org/netipx"
)
func GenerateVrps(size uint32, offset uint32) []SendableData {
vrps := make([]SendableData, size)
for i := uint32(0); i < size; i++ {
ipFinal := make([]byte, 4)
binary.BigEndian.PutUint32(ipFinal, i+offset)
ipFinal := i+offset
vrps[i] = &VRP{
Prefix: synthIPNetToPrefix(
net.IP(append([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ipFinal...)),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix(fmt.Sprintf("fd00::%04x:%04x/128", ipFinal >> 16, ipFinal & 0xffff)),
MaxLen: 128,
ASN: 64496,
}
@ -53,36 +47,24 @@ func BenchmarkComputeDiff100000x1(b *testing.B) {
func TestComputeDiff(t *testing.T) {
newVrps := []VRP{
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::3/128"),
MaxLen: 128,
ASN: 65003,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::2/128"),
MaxLen: 128,
ASN: 65002,
},
}
prevVrps := []VRP{
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::1/128"),
MaxLen: 128,
ASN: 65001,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::2/128"),
MaxLen: 128,
ASN: 65002,
},
@ -108,46 +90,31 @@ func TestComputeDiff(t *testing.T) {
func TestApplyDiff(t *testing.T) {
diff := []VRP{
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::3/128"),
MaxLen: 128,
ASN: 65003,
Flags: FLAG_ADDED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::2/128"),
MaxLen: 128,
ASN: 65002,
Flags: FLAG_REMOVED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::4/128"),
MaxLen: 128,
ASN: 65004,
Flags: FLAG_REMOVED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::6/128"),
MaxLen: 128,
ASN: 65006,
Flags: FLAG_REMOVED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::7/128"),
MaxLen: 128,
ASN: 65007,
Flags: FLAG_ADDED,
@ -155,46 +122,31 @@ func TestApplyDiff(t *testing.T) {
}
prevVrps := []VRP{
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::1/128"),
MaxLen: 128,
ASN: 65001,
Flags: FLAG_ADDED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::2/128"),
MaxLen: 128,
ASN: 65002,
Flags: FLAG_ADDED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::5/128"),
MaxLen: 128,
ASN: 65005,
Flags: FLAG_REMOVED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::6/128"),
MaxLen: 128,
ASN: 65006,
Flags: FLAG_REMOVED,
},
{
Prefix: synthIPNetToPrefix(
net.IP([]byte{0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7}),
net.IPMask([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}),
),
Prefix: netip.MustParsePrefix("fd00::7/128"),
MaxLen: 128,
ASN: 65007,
Flags: FLAG_REMOVED,
@ -312,12 +264,3 @@ func TestVRPStructSize(t *testing.T) {
t.Fatalf("unexpected VRPs struct size (-want +got):\n%s", diff)
}
}
func synthIPNetToPrefix(ip net.IP, mask net.IPMask) netip.Prefix {
n := &net.IPNet{
IP: ip,
Mask: mask,
}
pfx, _ := netipx.FromStdIPNet(n)
return pfx
}