@@ -26,6 +26,7 @@ import (
2626
2727	"gvisor.googlesource.com/gvisor/pkg/tcpip" 
2828	"gvisor.googlesource.com/gvisor/pkg/tcpip/buffer" 
29+ 	"gvisor.googlesource.com/gvisor/pkg/tcpip/header" 
2930	"gvisor.googlesource.com/gvisor/pkg/tcpip/link/channel" 
3031	"gvisor.googlesource.com/gvisor/pkg/tcpip/stack" 
3132)
@@ -643,6 +644,42 @@ func TestAddressSpoofing(t *testing.T) {
643644	}
644645}
645646
647+ func  TestBroadcastNeedsNoRoute (t  * testing.T ) {
648+ 	s  :=  stack .New ([]string {"fakeNet" }, nil , stack.Options {})
649+ 
650+ 	id , _  :=  channel .New (10 , defaultMTU , "" )
651+ 	if  err  :=  s .CreateNIC (1 , id ); err  !=  nil  {
652+ 		t .Fatalf ("CreateNIC failed: %v" , err )
653+ 	}
654+ 	s .SetRouteTable ([]tcpip.Route {})
655+ 
656+ 	// If there is no endpoint, it won't work. 
657+ 	if  _ , err  :=  s .FindRoute (1 , header .IPv4Any , header .IPv4Broadcast , fakeNetNumber ); err  !=  tcpip .ErrNoRoute  {
658+ 		t .Fatalf ("got FindRoute(1, %v, %v, %v) = %v, want = %v" , header .IPv4Any , header .IPv4Broadcast , fakeNetNumber , err , tcpip .ErrNoRoute )
659+ 	}
660+ 
661+ 	if  err  :=  s .AddAddress (1 , fakeNetNumber , header .IPv4Any ); err  !=  nil  {
662+ 		t .Fatalf ("AddAddress(%v, %v) failed: %v" , fakeNetNumber , header .IPv4Any , err )
663+ 	}
664+ 	r , err  :=  s .FindRoute (1 , header .IPv4Any , header .IPv4Broadcast , fakeNetNumber )
665+ 	if  err  !=  nil  {
666+ 		t .Fatalf ("FindRoute(1, %v, %v, %v) failed: %v" , header .IPv4Any , header .IPv4Broadcast , fakeNetNumber , err )
667+ 	}
668+ 
669+ 	if  r .LocalAddress  !=  header .IPv4Any  {
670+ 		t .Errorf ("Bad local address: got %v, want = %v" , r .LocalAddress , header .IPv4Any )
671+ 	}
672+ 
673+ 	if  r .RemoteAddress  !=  header .IPv4Broadcast  {
674+ 		t .Errorf ("Bad remote address: got %v, want = %v" , r .RemoteAddress , header .IPv4Broadcast )
675+ 	}
676+ 
677+ 	// If the NIC doesn't exist, it won't work. 
678+ 	if  _ , err  :=  s .FindRoute (2 , header .IPv4Any , header .IPv4Broadcast , fakeNetNumber ); err  !=  tcpip .ErrNoRoute  {
679+ 		t .Fatalf ("got FindRoute(2, %v, %v, %v) = %v want = %v" , header .IPv4Any , header .IPv4Broadcast , fakeNetNumber , err , tcpip .ErrNoRoute )
680+ 	}
681+ }
682+ 
646683// Set the subnet, then check that packet is delivered. 
647684func  TestSubnetAcceptsMatchingPacket (t  * testing.T ) {
648685	s  :=  stack .New ([]string {"fakeNet" }, nil , stack.Options {})
@@ -849,7 +886,7 @@ func TestGetMainNICAddressAddPrimaryNonPrimary(t *testing.T) {
849886								if  ! ok  {
850887									t .Fatalf ("GetMainNICAddress: got address = %v, wanted any in {%v}" , gotAddress , primaryAddrAdded )
851888								}
852- 								if  expectedSubnet  !=  gotSubnet  {
889+ 								if  gotSubnet  !=  expectedSubnet  {
853890									t .Fatalf ("GetMainNICAddress: got subnet = %v, wanted %v" , gotSubnet , expectedSubnet )
854891								}
855892							}
0 commit comments