[netstack] Fix failing UDP tests

Test UDP writes to an IPv6 network layer were leading to the incorrect
destination network address to be written to the link layer. This
behavior did not manifest in IPv4 write. Since IPv6 does not need ARP to
resolve link addresses, but IPv4 does, the IPv6 writes were causing a
Solicit-Node packet, with a Solicit-Node destination network address, to
be written before the data packet, leading to failing tests. This change
fixes this problem by adding test link address mappings to the
LinkResolverCache, obviating the need for IPv6 to attempt a link address
resolution.

test: go test passes

NET-555

Change-Id: Ic81f7aa4d691fbfe5d4eb66ae7513092bb1d226a
diff --git a/tcpip/transport/udp/endpoint.go b/tcpip/transport/udp/endpoint.go
index 4c706ff..d896b2d 100644
--- a/tcpip/transport/udp/endpoint.go
+++ b/tcpip/transport/udp/endpoint.go
@@ -280,7 +280,10 @@
 		ttl = e.multicastTTL
 	}
 
-	sendUDP(route, v, e.id.LocalPort, dstPort, ttl)
+	err := sendUDP(route, v, e.id.LocalPort, dstPort, ttl)
+	if err != nil {
+		return 0, err
+	}
 	return uintptr(len(v)), nil
 }
 
diff --git a/tcpip/transport/udp/udp_test.go b/tcpip/transport/udp/udp_test.go
index 6c48327..3bc29ff 100644
--- a/tcpip/transport/udp/udp_test.go
+++ b/tcpip/transport/udp/udp_test.go
@@ -24,6 +24,7 @@
 )
 
 const (
+	testLinkAddr          = "\x00\x00\x00\x00\x00\x02"
 	stackV6Addr           = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
 	testV6Addr            = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"
 	stackV4MappedAddr     = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff" + stackAddr
@@ -92,6 +93,10 @@
 		},
 	})
 
+	// Add test IP -> MAC mappings to LinkResolverCache
+	s.AddLinkAddress(1, testV6Addr, testLinkAddr)
+	s.AddLinkAddress(1, testV4MappedAddr, testLinkAddr)
+
 	return &testContext{
 		t:      t,
 		s:      s,
@@ -719,7 +724,7 @@
 
 	testDualWrite(c)
 
-	var want uint64 = 1
+	var want uint64 = 2
 	if got := c.s.Stats().UDP.PacketsSent; got != want {
 		c.t.Fatalf("Write did not increment PacketsSent: got %v, want %v", got, want)
 	}