From 0269077ebf7e8a54c64cc8db269db98a48542d26 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Wed, 24 Nov 2021 16:59:18 +0100 Subject: [PATCH] virtcontainers: Remove the netlink package dependency from network.go Move the netlink dependent code into network_linux.go. Other OSes will have to provide the same functions. Signed-off-by: Samuel Ortiz --- src/runtime/virtcontainers/network.go | 15 +++++++-------- src/runtime/virtcontainers/network_linux.go | 9 +++++++++ src/runtime/virtcontainers/network_test.go | 8 ++++---- src/runtime/virtcontainers/utils/utils.go | 10 +++++----- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/runtime/virtcontainers/network.go b/src/runtime/virtcontainers/network.go index ee1e927d9a..2b4fa41772 100644 --- a/src/runtime/virtcontainers/network.go +++ b/src/runtime/virtcontainers/network.go @@ -249,13 +249,13 @@ func generateVCNetworkStructures(ctx context.Context, network Network) ([]*pbTyp netMask, _ := addr.Mask.Size() ipAddress := pbTypes.IPAddress{ - Family: utils.ConvertNetlinkFamily(netlink.FAMILY_V4), + Family: pbTypes.IPFamily_v4, Address: addr.IP.String(), Mask: fmt.Sprintf("%d", netMask), } if addr.IP.To4() == nil { - ipAddress.Family = utils.ConvertNetlinkFamily(netlink.FAMILY_V6) + ipAddress.Family = pbTypes.IPFamily_v6 } ipAddresses = append(ipAddresses, &ipAddress) } @@ -275,7 +275,7 @@ func generateVCNetworkStructures(ctx context.Context, network Network) ([]*pbTyp for _, route := range endpoint.Properties().Routes { var r pbTypes.Route - if route.Protocol == unix.RTPROT_KERNEL { + if !validGuestRoute(route) { continue } @@ -294,15 +294,14 @@ func generateVCNetworkStructures(ctx context.Context, network Network) ([]*pbTyp r.Device = endpoint.Name() r.Scope = uint32(route.Scope) - r.Family = utils.ConvertNetlinkFamily((int32)(route.Family)) + r.Family = utils.ConvertAddressFamily((int32)(route.Family)) routes = append(routes, &r) } for _, neigh := range endpoint.Properties().Neighbors { var n pbTypes.ARPNeighbor - // We add only static ARP entries - if neigh.State != netlink.NUD_PERMANENT { + if !validGuestNeighbor(neigh) { continue } @@ -315,11 +314,11 @@ func generateVCNetworkStructures(ctx context.Context, network Network) ([]*pbTyp } n.ToIPAddress = &pbTypes.IPAddress{ - Family: utils.ConvertNetlinkFamily(netlink.FAMILY_V4), + Family: pbTypes.IPFamily_v4, Address: neigh.IP.String(), } if neigh.IP.To4() == nil { - n.ToIPAddress.Family = netlink.FAMILY_V6 + n.ToIPAddress.Family = pbTypes.IPFamily_v6 } neighs = append(neighs, &n) diff --git a/src/runtime/virtcontainers/network_linux.go b/src/runtime/virtcontainers/network_linux.go index 0e8429a2e3..378cd02e00 100644 --- a/src/runtime/virtcontainers/network_linux.go +++ b/src/runtime/virtcontainers/network_linux.go @@ -1397,3 +1397,12 @@ func removeTxRateLimiter(endpoint Endpoint, networkNSPath string) error { return nil } + +func validGuestRoute(route netlink.Route) bool { + return route.Protocol != unix.RTPROT_KERNEL +} + +func validGuestNeighbor(neigh netlink.Neigh) bool { + // We add only static ARP entries + return neigh.State == netlink.NUD_PERMANENT +} diff --git a/src/runtime/virtcontainers/network_test.go b/src/runtime/virtcontainers/network_test.go index a0dfc0a70c..bff91a0626 100644 --- a/src/runtime/virtcontainers/network_test.go +++ b/src/runtime/virtcontainers/network_test.go @@ -83,9 +83,9 @@ func TestGenerateInterfacesAndRoutes(t *testing.T) { // Build expected results: // expectedAddresses := []*pbTypes.IPAddress{ - {Family: utils.ConvertNetlinkFamily(netlink.FAMILY_V4), Address: "172.17.0.2", Mask: "16"}, - {Family: utils.ConvertNetlinkFamily(netlink.FAMILY_V4), Address: "182.17.0.2", Mask: "16"}, - {Family: utils.ConvertNetlinkFamily(netlink.FAMILY_V6), Address: "2001:db8:1::242:ac11:2", Mask: "64"}, + {Family: utils.ConvertAddressFamily(netlink.FAMILY_V4), Address: "172.17.0.2", Mask: "16"}, + {Family: utils.ConvertAddressFamily(netlink.FAMILY_V4), Address: "182.17.0.2", Mask: "16"}, + {Family: utils.ConvertAddressFamily(netlink.FAMILY_V6), Address: "2001:db8:1::242:ac11:2", Mask: "64"}, } expectedInterfaces := []*pbTypes.Interface{ @@ -104,7 +104,7 @@ func TestGenerateInterfacesAndRoutes(t *testing.T) { Device: "eth0", State: netlink.NUD_PERMANENT, Lladdr: "6a:92:3a:59:70:aa", - ToIPAddress: &pbTypes.IPAddress{Address: "192.168.0.101", Family: utils.ConvertNetlinkFamily(netlink.FAMILY_V4)}, + ToIPAddress: &pbTypes.IPAddress{Address: "192.168.0.101", Family: utils.ConvertAddressFamily(netlink.FAMILY_V4)}, }, } diff --git a/src/runtime/virtcontainers/utils/utils.go b/src/runtime/virtcontainers/utils/utils.go index 3a6a55e42a..f03a5aa259 100644 --- a/src/runtime/virtcontainers/utils/utils.go +++ b/src/runtime/virtcontainers/utils/utils.go @@ -16,7 +16,7 @@ import ( "time" "github.com/sirupsen/logrus" - "github.com/vishvananda/netlink" + "golang.org/x/sys/unix" pbTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/agent/protocols" ) @@ -290,11 +290,11 @@ const ( GiB = MiB << 10 ) -func ConvertNetlinkFamily(netlinkFamily int32) pbTypes.IPFamily { - switch netlinkFamily { - case netlink.FAMILY_V6: +func ConvertAddressFamily(family int32) pbTypes.IPFamily { + switch family { + case unix.AF_INET6: return pbTypes.IPFamily_v6 - case netlink.FAMILY_V4: + case unix.AF_INET: fallthrough default: return pbTypes.IPFamily_v4