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:
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user