bpf: use of nettest
To ensure tests never fail on IPv6-only kernels.
Change-Id: I40713d00ba6066da69c84f5cd506a2243360e057
Reviewed-on: https://go-review.googlesource.com/c/net/+/169577
Run-TryBot: Mikio Hara <mikioh.public.networking@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matt Layher <mdlayher@gmail.com>
diff --git a/bpf/vm_bpf_test.go b/bpf/vm_bpf_test.go
index 77fa8fe..137eea1 100644
--- a/bpf/vm_bpf_test.go
+++ b/bpf/vm_bpf_test.go
@@ -12,6 +12,8 @@
"golang.org/x/net/bpf"
"golang.org/x/net/ipv4"
+ "golang.org/x/net/ipv6"
+ "golang.org/x/net/nettest"
)
// A virtualMachine is a BPF virtual machine which can process an
@@ -137,7 +139,7 @@
// testOSVM creates a virtualMachine which uses the OS's BPF VM by injecting
// packets into a UDP listener with a BPF program attached to it.
func testOSVM(t *testing.T, filter []bpf.Instruction) (virtualMachine, func()) {
- l, err := net.ListenPacket("udp4", "127.0.0.1:0")
+ l, err := nettest.NewLocalPacketListener("udp")
if err != nil {
t.Fatalf("failed to open OS VM UDP listener: %v", err)
}
@@ -147,12 +149,17 @@
t.Fatalf("failed to compile BPF program: %v", err)
}
- p := ipv4.NewPacketConn(l)
- if err = p.SetBPF(prog); err != nil {
+ ip := l.LocalAddr().(*net.UDPAddr).IP
+ if ip.To4() != nil && ip.To16() == nil {
+ err = ipv4.NewPacketConn(l).SetBPF(prog)
+ } else {
+ err = ipv6.NewPacketConn(l).SetBPF(prog)
+ }
+ if err != nil {
t.Fatalf("failed to attach BPF program to listener: %v", err)
}
- s, err := net.Dial("udp4", l.LocalAddr().String())
+ s, err := net.Dial(l.LocalAddr().Network(), l.LocalAddr().String())
if err != nil {
t.Fatalf("failed to dial connection to listener: %v", err)
}