[netstack] Remove package netiface
NET-1223 #done
Change-Id: Ieb632a2f7083ccfb689e12a06bdb75aed974f5d5
diff --git a/src/connectivity/network/netstack/fuchsia_net_stack.go b/src/connectivity/network/netstack/fuchsia_net_stack.go
index 8e7fa5e..c254edf 100644
--- a/src/connectivity/network/netstack/fuchsia_net_stack.go
+++ b/src/connectivity/network/netstack/fuchsia_net_stack.go
@@ -72,7 +72,7 @@
Mtu: uint32(ifs.endpoint.MTU()),
AdministrativeStatus: administrativeStatus,
PhysicalStatus: physicalStatus,
- Features: ifs.mu.nic.Features,
+ Features: ifs.features,
Addresses: addrs,
},
}
diff --git a/src/connectivity/network/netstack/netiface/netiface.go b/src/connectivity/network/netstack/netiface/netiface.go
deleted file mode 100644
index 4b0aca9..0000000
--- a/src/connectivity/network/netstack/netiface/netiface.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package netiface
-
-import (
- "netstack/routes"
-
- "github.com/google/netstack/tcpip"
-)
-
-// TODO(NET-1223):This should be moved into netstack.go.
-type NIC struct {
- IsDynamicAddr bool
- Name string
- Features uint32
- Metric routes.Metric // used as a default for routes that use this NIC
- DNSServers []tcpip.Address
-}
diff --git a/src/connectivity/network/netstack/netstack.go b/src/connectivity/network/netstack/netstack.go
index 3db5f82..c3879bc 100644
--- a/src/connectivity/network/netstack/netstack.go
+++ b/src/connectivity/network/netstack/netstack.go
@@ -18,7 +18,6 @@
"netstack/link"
"netstack/link/bridge"
"netstack/link/eth"
- "netstack/netiface"
"netstack/routes"
"netstack/util"
@@ -84,12 +83,17 @@
ns *Netstack
eth link.Controller
nicid tcpip.NICID
- mu struct {
+ // features can include any value that's valid in fuchsia.hardware.ethernet.Info.features.
+ features uint32
+ mu struct {
sync.Mutex
- state link.State
- // TODO(NET-1223): remove and replace with refs to stack via ns
- nic *netiface.NIC
- dhcp struct {
+ state link.State
+ hasDynamicAddr bool
+ name string
+ // metric is used by default for routes that originate from this NIC.
+ metric routes.Metric
+ dnsServers []tcpip.Address
+ dhcp struct {
*dhcp.Client
// running must not be nil.
running func() bool
@@ -176,7 +180,7 @@
enabled := ifs.mu.state == link.StateStarted
if metricTracksInterface {
- metric = ifs.mu.nic.Metric
+ metric = ifs.mu.metric
}
ns.mu.routeTable.AddRoute(r, metric, metricTracksInterface, dynamic, enabled)
@@ -350,28 +354,28 @@
func (ifs *ifState) updateMetric(metric routes.Metric) {
ifs.mu.Lock()
- ifs.mu.nic.Metric = metric
+ ifs.mu.metric = metric
ifs.mu.Unlock()
}
func (ifs *ifState) dhcpAcquired(oldAddr, newAddr tcpip.Address, config dhcp.Config) {
if oldAddr != "" && oldAddr != newAddr {
- syslog.Infof("NIC %s: DHCP IP %s expired", ifs.mu.nic.Name, oldAddr)
+ syslog.Infof("NIC %s: DHCP IP %s expired", ifs.mu.name, oldAddr)
}
if config.Error != nil {
syslog.Errorf("%v", config.Error)
return
}
if newAddr == "" {
- syslog.Errorf("NIC %s: DHCP could not acquire address", ifs.mu.nic.Name)
+ syslog.Errorf("NIC %s: DHCP could not acquire address", ifs.mu.name)
return
}
- syslog.Infof("NIC %s: DHCP acquired IP %s for %s", ifs.mu.nic.Name, newAddr, config.LeaseLength)
- syslog.Infof("NIC %s: Adding DNS servers: %v", ifs.mu.nic.Name, config.DNS)
+ syslog.Infof("NIC %s: DHCP acquired IP %s for %s", ifs.mu.name, newAddr, config.LeaseLength)
+ syslog.Infof("NIC %s: Adding DNS servers: %v", ifs.mu.name, config.DNS)
ifs.mu.Lock()
- ifs.mu.nic.IsDynamicAddr = true
- ifs.mu.nic.DNSServers = config.DNS
+ ifs.mu.hasDynamicAddr = true
+ ifs.mu.dnsServers = config.DNS
ifs.mu.Unlock()
// Add a default route and a route for the local subnet.
@@ -409,7 +413,7 @@
if c := ifs.mu.dhcp.Client; c != nil {
c.Run(ctx)
} else {
- panic(fmt.Sprintf("nil DHCP client on interface %s", ifs.mu.nic.Name))
+ panic(fmt.Sprintf("nil DHCP client on interface %s", ifs.mu.name))
}
}
@@ -427,16 +431,16 @@
delete(ifs.ns.mu.ifStates, ifs.nicid)
fallthrough
case link.StateDown:
- syslog.Infof("NIC %s: stopped", ifs.mu.nic.Name)
+ syslog.Infof("NIC %s: stopped", ifs.mu.name)
ifs.mu.dhcp.cancel()
// TODO(crawshaw): more cleanup to be done here:
// - remove link endpoint
// - reclaim NICID?
- if ifs.mu.nic.IsDynamicAddr || s == link.StateClosed {
+ if ifs.mu.hasDynamicAddr || s == link.StateClosed {
syslog.Infof("removing IP from NIC %d", ifs.nicid)
- ifs.mu.nic.DNSServers = nil
+ ifs.mu.dnsServers = nil
}
if s == link.StateClosed {
@@ -448,7 +452,7 @@
}
case link.StateStarted:
- syslog.Infof("NIC %s: starting", ifs.mu.nic.Name)
+ syslog.Infof("NIC %s: starting", ifs.mu.name)
// Re-enable static routes out this interface.
ifs.ns.UpdateRoutesByInterfaceLocked(ifs.nicid, routes.ActionEnableStatic)
if ifs.mu.dhcp.enabled {
@@ -483,20 +487,20 @@
refs := make([]*[]tcpip.Address, 0, len(ns.mu.ifStates))
for _, ifs := range ns.mu.ifStates {
ifs.mu.Lock()
- refs = append(refs, &ifs.mu.nic.DNSServers)
+ refs = append(refs, &ifs.mu.dnsServers)
ifs.mu.Unlock()
}
return refs
}
-func (ns *Netstack) getDNSServers() []tcpip.Address {
+func (ns *Netstack) getdnsServers() []tcpip.Address {
defaultServers := ns.dnsClient.GetDefaultServers()
uniqServers := make(map[tcpip.Address]struct{})
ns.mu.Lock()
for _, ifs := range ns.mu.ifStates {
ifs.mu.Lock()
- for _, server := range ifs.mu.nic.DNSServers {
+ for _, server := range ifs.mu.dnsServers {
uniqServers[server] = struct{}{}
}
ifs.mu.Unlock()
@@ -544,16 +548,13 @@
func (ns *Netstack) addLoopback() error {
ifs, err := ns.addEndpoint(func(tcpip.NICID) string {
return "lo"
- }, stack.FindLinkEndpoint(loopback.New()), link.NewLoopbackController(), false, defaultInterfaceMetric)
+ }, stack.FindLinkEndpoint(loopback.New()), link.NewLoopbackController(), false, defaultInterfaceMetric, ethernet.InfoFeatureLoopback)
if err != nil {
return err
}
ifs.mu.Lock()
- ifs.mu.nic.Features = ethernet.InfoFeatureLoopback
- ifs.mu.nic.Metric = defaultInterfaceMetric
ifs.mu.state = link.StateStarted
-
nicid := ifs.nicid
ifs.mu.Unlock()
@@ -604,7 +605,7 @@
b := bridge.New(links)
return ns.addEndpoint(func(nicid tcpip.NICID) string {
return fmt.Sprintf("br%d", nicid)
- }, b, b, false, defaultInterfaceMetric)
+ }, b, b, false, defaultInterfaceMetric, 0)
}
func (ns *Netstack) addEth(topological_path string, config netstack.InterfaceConfig, device ethernet.Device) (*ifState, error) {
@@ -613,19 +614,12 @@
return nil, err
}
- ifs, err := ns.addEndpoint(func(nicid tcpip.NICID) string {
+ return ns.addEndpoint(func(nicid tcpip.NICID) string {
if len(config.Name) == 0 {
return fmt.Sprintf("eth%d", nicid)
}
return config.Name
- }, eth.NewLinkEndpoint(client), client, true, routes.Metric(config.Metric))
- if err != nil {
- return nil, err
- }
- ifs.mu.Lock()
- ifs.mu.nic.Features = client.Info.Features
- ifs.mu.Unlock()
- return ifs, nil
+ }, eth.NewLinkEndpoint(client), client, true, routes.Metric(config.Metric), client.Info.Features)
}
func (ns *Netstack) addEndpoint(
@@ -634,15 +628,15 @@
controller link.Controller,
doFilter bool,
metric routes.Metric,
+ features uint32,
) (*ifState, error) {
ifs := &ifState{
- ns: ns,
- eth: controller,
+ ns: ns,
+ eth: controller,
+ features: features,
}
ifs.mu.state = link.StateUnknown
- ifs.mu.nic = &netiface.NIC{
- Metric: metric,
- }
+ ifs.mu.metric = metric
ifs.mu.dhcp.running = func() bool { return false }
ifs.mu.dhcp.cancel = func() {}
@@ -674,11 +668,11 @@
syslog.Infof("NIC %s added [sniff = %t]", name, ns.sniff)
if err := ns.mu.stack.CreateNIC(ifs.nicid, linkID); err != nil {
- return nil, fmt.Errorf("NIC %s: could not create NIC: %v", ifs.mu.nic.Name, err)
+ return nil, fmt.Errorf("NIC %s: could not create NIC: %v", ifs.mu.name, err)
}
if ep.Capabilities()&stack.CapabilityResolutionRequired > 0 {
if err := ns.mu.stack.AddAddress(ifs.nicid, arp.ProtocolNumber, arp.ProtocolAddress); err != nil {
- return nil, fmt.Errorf("NIC %s: adding arp address failed: %v", ifs.mu.nic.Name, err)
+ return nil, fmt.Errorf("NIC %s: adding arp address failed: %v", ifs.mu.name, err)
}
}
@@ -688,11 +682,11 @@
if linkAddr := ep.LinkAddress(); len(linkAddr) > 0 {
lladdr := header.LinkLocalAddr(linkAddr)
if err := ns.mu.stack.AddAddress(ifs.nicid, ipv6.ProtocolNumber, lladdr); err != nil {
- return nil, fmt.Errorf("NIC %s: adding link-local IPv6 %v failed: %v", ifs.mu.nic.Name, lladdr, err)
+ return nil, fmt.Errorf("NIC %s: adding link-local IPv6 %v failed: %v", ifs.mu.name, lladdr, err)
}
snaddr := header.SolicitedNodeAddr(lladdr)
if err := ns.mu.stack.AddAddress(ifs.nicid, ipv6.ProtocolNumber, snaddr); err != nil {
- return nil, fmt.Errorf("NIC %s: adding solicited-node IPv6 %v (link-local IPv6 %v) failed: %v", ifs.mu.nic.Name, snaddr, lladdr, err)
+ return nil, fmt.Errorf("NIC %s: adding solicited-node IPv6 %v (link-local IPv6 %v) failed: %v", ifs.mu.name, snaddr, lladdr, err)
}
ifs.mu.dhcp.Client = dhcp.NewClient(ns.mu.stack, ifs.nicid, linkAddr, ifs.dhcpAcquired)
@@ -700,7 +694,7 @@
syslog.Infof("NIC %s: link-local IPv6: %v", name, lladdr)
}
- ifs.mu.nic.Name = name
+ ifs.mu.name = name
return ifs, nil
}
diff --git a/src/connectivity/network/netstack/netstack_service.go b/src/connectivity/network/netstack/netstack_service.go
index 32348b9..68e2fdb 100644
--- a/src/connectivity/network/netstack/netstack_service.go
+++ b/src/connectivity/network/netstack/netstack_service.go
@@ -119,9 +119,9 @@
return netstack.NetInterface2{
Id: uint32(ifs.nicid),
Flags: flags,
- Features: ifs.mu.nic.Features,
- Metric: uint32(ifs.mu.nic.Metric),
- Name: ifs.mu.nic.Name,
+ Features: ifs.features,
+ Metric: uint32(ifs.mu.metric),
+ Name: ifs.mu.name,
Addr: fidlconv.ToNetIpAddress(addr),
Netmask: fidlconv.ToNetIpAddress(tcpip.Address(mask)),
Broadaddr: fidlconv.ToNetIpAddress(tcpip.Address(broadaddr)),
diff --git a/src/connectivity/network/netstack/netstack_test.go b/src/connectivity/network/netstack/netstack_test.go
index 8d8a7e0..c9a48d3 100644
--- a/src/connectivity/network/netstack/netstack_test.go
+++ b/src/connectivity/network/netstack/netstack_test.go
@@ -43,8 +43,8 @@
t.Fatal(err)
}
ifs.mu.Lock()
- if ifs.mu.nic.Name != testDeviceName {
- t.Errorf("ifs.mu.nic.Name = %v, want %v", ifs.mu.nic.Name, testDeviceName)
+ if ifs.mu.name != testDeviceName {
+ t.Errorf("ifs.mu.name = %v, want %v", ifs.mu.name, testDeviceName)
}
ifs.mu.Unlock()
}
@@ -165,7 +165,7 @@
if err != nil {
t.Fatal(err)
}
- if ifs1.mu.nic.Name == ifs2.mu.nic.Name {
+ if ifs1.mu.name == ifs2.mu.name {
t.Fatalf("got (%+v).Name == (%+v).Name, want non-equal", ifs1, ifs2)
}
}