mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-15 06:34:03 +00:00
vc/network: skip existing endpoints when scanning for new ones
So that addAllEndpoints() becomes re-entrant and we can use it to scan netns changes. Signed-off-by: Peng Tao <bergwolf@hyper.sh>
This commit is contained in:
parent
d085389127
commit
8bb68a9f28
@ -252,6 +252,22 @@ func (n *LinuxNetwork) removeSingleEndpoint(ctx context.Context, s *Sandbox, idx
|
||||
return nil
|
||||
}
|
||||
|
||||
func (n *LinuxNetwork) endpointAlreadyAdded(netInfo *NetworkInfo) bool {
|
||||
for _, ep := range n.eps {
|
||||
// Existing endpoint
|
||||
if ep.Name() == netInfo.Iface.Name {
|
||||
return true
|
||||
}
|
||||
pair := ep.NetworkPair()
|
||||
// Existing virtual endpoints
|
||||
if pair != nil && (pair.TapInterface.Name == netInfo.Iface.Name || pair.TapInterface.TAPIface.Name == netInfo.Iface.Name || pair.VirtIface.Name == netInfo.Iface.Name) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// Scan the networking namespace through netlink and then:
|
||||
// 1. Create the endpoints for the relevant interfaces found there.
|
||||
// 2. Attach them to the VM.
|
||||
@ -292,6 +308,12 @@ func (n *LinuxNetwork) addAllEndpoints(ctx context.Context, s *Sandbox, hotplug
|
||||
continue
|
||||
}
|
||||
|
||||
// Skip any interfaces that are already added
|
||||
if n.endpointAlreadyAdded(&netInfo) {
|
||||
networkLogger().WithField("endpoint", netInfo.Iface.Name).Info("already added")
|
||||
continue
|
||||
}
|
||||
|
||||
if err := doNetNS(n.netNSPath, func(_ ns.NetNS) error {
|
||||
_, err = n.addSingleEndpoint(ctx, s, netInfo, hotplug)
|
||||
return err
|
||||
|
Loading…
Reference in New Issue
Block a user