From 8aee94b6ea4fe91d4120803c0d7ec0635bdd83bd Mon Sep 17 00:00:00 2001 From: Pavithra Ramesh Date: Tue, 28 May 2013 12:35:06 -0700 Subject: [PATCH] BFD: Reconfigure BFD on port deletion. Invoke the function to reconfigure BFD when a port/interface is deleted. Signed-off-by: Pavithra Ramesh Signed-off-by: Ethan Jackson --- lib/bfd.c | 5 +++-- ofproto/ofproto-dpif.c | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/bfd.c b/lib/bfd.c index 95dad2d4c..9f671f2e8 100644 --- a/lib/bfd.c +++ b/lib/bfd.c @@ -229,7 +229,8 @@ bfd_get_status(const struct bfd *bfd, struct smap *smap) /* Initializes, destroys, or reconfigures the BFD session 'bfd' (named 'name'), * according to the database configuration contained in 'cfg'. Takes ownership * of 'bfd', which may be NULL. Returns a BFD object which may be used as a - * handle for the session, or NULL if BFD is not enabled according to 'cfg'. */ + * handle for the session, or NULL if BFD is not enabled according to 'cfg'. + * Also returns NULL if cfg is NULL. */ struct bfd * bfd_configure(struct bfd *bfd, const char *name, const struct smap *cfg) @@ -246,7 +247,7 @@ bfd_configure(struct bfd *bfd, const char *name, init = true; } - if (!smap_get_bool(cfg, "enable", false)) { + if (!cfg || !smap_get_bool(cfg, "enable", false)) { if (bfd) { hmap_remove(&all_bfds, &bfd->node); free(bfd->name); diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 280fd577c..b5472982d 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -606,6 +606,7 @@ ofport_dpif_cast(const struct ofport *ofport) static void port_run(struct ofport_dpif *); static void port_run_fast(struct ofport_dpif *); static void port_wait(struct ofport_dpif *); +static int set_bfd(struct ofport *, const struct smap *); static int set_cfm(struct ofport *, const struct cfm_settings *); static void ofport_clear_priorities(struct ofport_dpif *); static void run_fast_rl(void); @@ -1869,6 +1870,7 @@ port_destruct(struct ofport *port_) ofproto->backer->need_revalidate = REV_RECONFIGURE; bundle_remove(port_); set_cfm(port_, NULL); + set_bfd(port_, NULL); if (ofproto->sflow) { dpif_sflow_del_port(ofproto->sflow, port->odp_port); } -- 2.43.0