mirror of
https://github.com/tailscale/tailscale.git
synced 2025-09-21 05:31:36 +02:00
appc,ipn/ipnlocal: make RouteAdvertiser optional; publish events
Tests need to be updated to actually exercise this, though Change-Id: Ib91e2debea481ae04cee9591acad72f3d891465a
This commit is contained in:
parent
16808bf297
commit
0a2b3430da
@ -189,7 +189,6 @@ type Config struct {
|
|||||||
EventBus *eventbus.Bus
|
EventBus *eventbus.Bus
|
||||||
|
|
||||||
// RouteAdvertiser allows the connector to update the set of advertised routes.
|
// RouteAdvertiser allows the connector to update the set of advertised routes.
|
||||||
// It must be non-nil.
|
|
||||||
RouteAdvertiser RouteAdvertiser
|
RouteAdvertiser RouteAdvertiser
|
||||||
|
|
||||||
// RouteInfo, if non-nil, use used as the initial set of routes for the
|
// RouteInfo, if non-nil, use used as the initial set of routes for the
|
||||||
@ -208,8 +207,6 @@ func NewAppConnector(c Config) *AppConnector {
|
|||||||
panic("missing logger")
|
panic("missing logger")
|
||||||
case c.EventBus == nil:
|
case c.EventBus == nil:
|
||||||
panic("missing event bus")
|
panic("missing event bus")
|
||||||
case c.RouteAdvertiser == nil:
|
|
||||||
panic("missing route advertiser")
|
|
||||||
}
|
}
|
||||||
ec := c.EventBus.Client("appc.AppConnector")
|
ec := c.EventBus.Client("appc.AppConnector")
|
||||||
|
|
||||||
@ -363,11 +360,13 @@ func (e *AppConnector) updateDomains(domains []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(toRemove) != 0 {
|
if len(toRemove) != 0 {
|
||||||
e.queue.Add(func() {
|
if ra := e.routeAdvertiser; ra != nil {
|
||||||
if err := e.routeAdvertiser.UnadvertiseRoute(toRemove...); err != nil {
|
e.queue.Add(func() {
|
||||||
e.logf("failed to unadvertise routes on domain removal: %v: %v: %v", slicesx.MapKeys(oldDomains), toRemove, err)
|
if err := e.routeAdvertiser.UnadvertiseRoute(toRemove...); err != nil {
|
||||||
}
|
e.logf("failed to unadvertise routes on domain removal: %v: %v: %v", slicesx.MapKeys(oldDomains), toRemove, err)
|
||||||
})
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
e.updatePub.Publish(RouteUpdate{Unadvertise: toRemove})
|
e.updatePub.Publish(RouteUpdate{Unadvertise: toRemove})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -411,14 +410,16 @@ nextRoute:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e.queue.Add(func() {
|
if e.routeAdvertiser != nil {
|
||||||
if err := e.routeAdvertiser.AdvertiseRoute(routes...); err != nil {
|
e.queue.Add(func() {
|
||||||
e.logf("failed to advertise routes: %v: %v", routes, err)
|
if err := e.routeAdvertiser.AdvertiseRoute(routes...); err != nil {
|
||||||
}
|
e.logf("failed to advertise routes: %v: %v", routes, err)
|
||||||
if err := e.routeAdvertiser.UnadvertiseRoute(toRemove...); err != nil {
|
}
|
||||||
e.logf("failed to unadvertise routes: %v: %v", toRemove, err)
|
if err := e.routeAdvertiser.UnadvertiseRoute(toRemove...); err != nil {
|
||||||
}
|
e.logf("failed to unadvertise routes: %v: %v", toRemove, err)
|
||||||
})
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
e.updatePub.Publish(RouteUpdate{
|
e.updatePub.Publish(RouteUpdate{
|
||||||
Advertise: routes,
|
Advertise: routes,
|
||||||
Unadvertise: toRemove,
|
Unadvertise: toRemove,
|
||||||
@ -624,9 +625,11 @@ func (e *AppConnector) isAddrKnownLocked(domain string, addr netip.Addr) bool {
|
|||||||
// associated with the given domain.
|
// associated with the given domain.
|
||||||
func (e *AppConnector) scheduleAdvertisement(domain string, routes ...netip.Prefix) {
|
func (e *AppConnector) scheduleAdvertisement(domain string, routes ...netip.Prefix) {
|
||||||
e.queue.Add(func() {
|
e.queue.Add(func() {
|
||||||
if err := e.routeAdvertiser.AdvertiseRoute(routes...); err != nil {
|
if e.routeAdvertiser != nil {
|
||||||
e.logf("failed to advertise routes for %s: %v: %v", domain, routes, err)
|
if err := e.routeAdvertiser.AdvertiseRoute(routes...); err != nil {
|
||||||
return
|
e.logf("failed to advertise routes for %s: %v: %v", domain, routes, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
e.updatePub.Publish(RouteUpdate{Advertise: routes})
|
e.updatePub.Publish(RouteUpdate{Advertise: routes})
|
||||||
e.mu.Lock()
|
e.mu.Lock()
|
||||||
|
@ -641,7 +641,12 @@ func (b *LocalBackend) consumeEventbusTopics() {
|
|||||||
case changeDelta := <-b.changeDeltaSub.Events():
|
case changeDelta := <-b.changeDeltaSub.Events():
|
||||||
b.linkChange(&changeDelta)
|
b.linkChange(&changeDelta)
|
||||||
case ru := <-b.routeUpdateSub.Events():
|
case ru := <-b.routeUpdateSub.Events():
|
||||||
b.logf("TODO: received route update: %+v", ru)
|
if err := b.AdvertiseRoute(ru.Advertise...); err != nil {
|
||||||
|
b.logf("appc: failed to advertise routes: %v: %v", ru.Advertise, err)
|
||||||
|
}
|
||||||
|
if err := b.UnadvertiseRoute(ru.Unadvertise...); err != nil {
|
||||||
|
b.logf("appc: failed to unadvertise routes: %v: %v", ru.Unadvertise, err)
|
||||||
|
}
|
||||||
case ri := <-b.storeRoutesSub.Events():
|
case ri := <-b.storeRoutesSub.Events():
|
||||||
b.logf("TODO: received store routes: %+v", ri)
|
b.logf("TODO: received store routes: %+v", ri)
|
||||||
}
|
}
|
||||||
@ -5077,7 +5082,6 @@ func (b *LocalBackend) reconfigAppConnectorLocked(nm *netmap.NetworkMap, prefs i
|
|||||||
b.appConnector = appc.NewAppConnector(appc.Config{
|
b.appConnector = appc.NewAppConnector(appc.Config{
|
||||||
Logf: b.logf,
|
Logf: b.logf,
|
||||||
EventBus: b.sys.Bus.Get(),
|
EventBus: b.sys.Bus.Get(),
|
||||||
RouteAdvertiser: b,
|
|
||||||
RouteInfo: ri,
|
RouteInfo: ri,
|
||||||
StoreRoutesFunc: storeFunc,
|
StoreRoutesFunc: storeFunc,
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user