func (rb *HostgwBackend) Run() { rb.wg.Add(1) go func() { subnet.LeaseRenewer(rb.ctx, rb.sm, rb.network, rb.lease) rb.wg.Done() }() log.Info("Watching for new subnet leases") evts := make(chan []subnet.Event) rb.wg.Add(1) go func() { subnet.WatchLeases(rb.ctx, rb.sm, rb.network, rb.lease, evts) rb.wg.Done() }() rb.rl = make([]netlink.Route, 0, 10) rb.wg.Add(1) go func() { rb.routeCheck(rb.ctx) rb.wg.Done() }() defer rb.wg.Wait() for { select { case evtBatch := <-evts: rb.handleSubnetEvents(evtBatch) case <-rb.ctx.Done(): return } } }
func (vb *VXLANBackend) Run() { vb.wg.Add(1) go func() { subnet.LeaseRenewer(vb.ctx, vb.sm, vb.network, vb.lease) log.Info("LeaseRenewer exited") vb.wg.Done() }() log.Info("Watching for L3 misses") misses := make(chan *netlink.Neigh, 100) // Unfrtunately MonitorMisses does not take a cancel channel // as there's no wait to interrupt netlink socket recv go vb.dev.MonitorMisses(misses) log.Info("Watching for new subnet leases") evts := make(chan []subnet.Event) vb.wg.Add(1) go func() { subnet.WatchLeases(vb.ctx, vb.sm, vb.network, vb.lease, evts) log.Info("WatchLeases exited") vb.wg.Done() }() defer vb.wg.Wait() initialEvtsBatch := <-evts for { err := vb.handleInitialSubnetEvents(initialEvtsBatch) if err == nil { break } log.Error(err, " About to retry") time.Sleep(time.Second) } for { select { case miss := <-misses: vb.handleMiss(miss) case evtBatch := <-evts: vb.handleSubnetEvents(evtBatch) case <-vb.ctx.Done(): return } } }
func (n *Network) Run(ctx context.Context) { wg := sync.WaitGroup{} wg.Add(1) go func() { n.be.Run(ctx) wg.Done() }() wg.Add(1) go func() { subnet.LeaseRenewer(ctx, n.sm, n.Name, n.lease) wg.Done() }() <-ctx.Done() wg.Wait() }
func (n *Network) Run(extIface *backend.ExternalInterface, inited func(bn backend.Network)) { wg := sync.WaitGroup{} For: for { err := n.init() switch err { case nil: break For case context.Canceled: return default: log.Error(err) select { case <-n.ctx.Done(): return case <-time.After(time.Second): } } } inited(n.bn) wg.Add(1) go func() { n.bn.Run(n.ctx) wg.Done() }() wg.Add(1) go func() { subnet.LeaseRenewer(n.ctx, n.sm, n.Name, n.bn.Lease()) wg.Done() }() defer func() { if n.ipMasq { if err := teardownIPMasq(n.Config.Network); err != nil { log.Errorf("Failed to tear down IP Masquerade for network %v: %v", n.Name, err) } } }() wg.Wait() }
func (m *UdpBackend) Run() { // one for each goroutine below m.wg.Add(2) go func() { runCProxy(m.tun, m.conn, m.ctl2, m.tunNet.IP, m.mtu) m.wg.Done() }() go func() { subnet.LeaseRenewer(m.ctx, m.sm, m.network, m.lease) m.wg.Done() }() m.monitorEvents() m.wg.Wait() }
func (n *Network) Run() { wg := sync.WaitGroup{} wg.Add(1) go func() { n.be.Run(n.ctx) wg.Done() }() wg.Add(1) go func() { subnet.LeaseRenewer(n.ctx, n.sm, n.Name, n.lease) wg.Done() }() <-n.ctx.Done() n.be.UnregisterNetwork(n.ctx, n.Name) wg.Wait() }
func (m *AwsVpcBackend) Run() { subnet.LeaseRenewer(m.ctx, m.sm, m.network, m.lease) }
func (g *GCEBackend) Run() { log.Info("GCE backend running") subnet.LeaseRenewer(g.ctx, g.sm, g.network, g.lease) }