From b6234b13a1198034facc1c42e6e369b5005e0f08 Mon Sep 17 00:00:00 2001 From: takt <oliver.herms@exaring.de> Date: Mon, 20 Jul 2020 17:36:59 +0200 Subject: [PATCH] RIS: Implement cleanup on BMP down event (#280) * RIS: Implement cleanup on BMP down event * Cleanup Co-authored-by: Maximilian Wilhelm <max@sdn.clinic> --- protocols/bgp/server/bmp_router.go | 7 +++++++ protocols/bgp/server/bmp_server.go | 2 +- routingtable/vrf/vrf_registry.go | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/protocols/bgp/server/bmp_router.go b/protocols/bgp/server/bmp_router.go index 31c8348a..5f93feb9 100644 --- a/protocols/bgp/server/bmp_router.go +++ b/protocols/bgp/server/bmp_router.go @@ -104,6 +104,8 @@ func (r *Router) Address() net.IP { } func (r *Router) serve(con net.Conn) error { + defer r.cleanup() + r.con = con r.runMu.Lock() defer r.con.Close() @@ -125,6 +127,11 @@ func (r *Router) serve(con net.Conn) error { } } +func (r *Router) cleanup() { + r.vrfRegistry.UnregisterAll() + r.neighborManager.disposeAll() +} + func (r *Router) processMsg(msg []byte) { bmpMsg, err := bmppkt.Decode(msg) if err != nil { diff --git a/protocols/bgp/server/bmp_server.go b/protocols/bgp/server/bmp_server.go index 99dfe141..5fb1bb9b 100644 --- a/protocols/bgp/server/bmp_server.go +++ b/protocols/bgp/server/bmp_server.go @@ -129,7 +129,7 @@ func (b *BMPServer) deleteRouter(addr net.IP) { func (b *BMPServer) RemoveRouter(addr net.IP) { id := addr.String() r := b.routers[id] - r.stop <- struct{}{} + close(r.stop) b.deleteRouter(addr) } diff --git a/routingtable/vrf/vrf_registry.go b/routingtable/vrf/vrf_registry.go index b8540888..8fe3893c 100644 --- a/routingtable/vrf/vrf_registry.go +++ b/routingtable/vrf/vrf_registry.go @@ -59,6 +59,16 @@ func (r *VRFRegistry) UnregisterVRF(v *VRF) { delete(r.vrfs, v.routeDistinguisher) } +// UnregisterAll unregisters all VRFs +func (r *VRFRegistry) UnregisterAll() { + r.mu.Lock() + defer r.mu.Unlock() + + for id := range r.vrfs { + delete(r.vrfs, id) + } +} + func (r *VRFRegistry) List() []*VRF { r.mu.Lock() defer r.mu.Unlock() -- GitLab