diff options
| -rw-r--r-- | bfdd/bfd.c | 7 | ||||
| -rw-r--r-- | bfdd/ptm_adapter.c | 19 | 
2 files changed, 20 insertions, 6 deletions
diff --git a/bfdd/bfd.c b/bfdd/bfd.c index 9667ba8708..622b6ef396 100644 --- a/bfdd/bfd.c +++ b/bfdd/bfd.c @@ -313,6 +313,13 @@ int bfd_session_enable(struct bfd_session *bs)  		}  	} +	if (!vrf_is_backend_netns() && vrf && vrf->vrf_id != VRF_DEFAULT +	    && !if_lookup_by_name(vrf->name, vrf->vrf_id)) { +		zlog_err("session-enable: vrf interface %s not available yet", +			 vrf->name); +		return 0; +	} +  	if (bs->key.ifname[0]) {  		if (vrf)  			ifp = if_lookup_by_name(bs->key.ifname, vrf->vrf_id); diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c index 44519c47b5..26ff7bd188 100644 --- a/bfdd/ptm_adapter.c +++ b/bfdd/ptm_adapter.c @@ -669,17 +669,24 @@ static void bfdd_sessions_enable_interface(struct interface *ifp)  	struct bfd_session *bs;  	struct vrf *vrf; +	vrf = vrf_lookup_by_id(ifp->vrf_id); +	if (!vrf) +		return; +  	TAILQ_FOREACH(bso, &bglobal.bg_obslist, bso_entry) {  		bs = bso->bso_bs; -		/* Interface name mismatch. */ -		if (strcmp(ifp->name, bs->key.ifname)) -			continue; -		vrf = vrf_lookup_by_id(ifp->vrf_id); -		if (!vrf) -			continue; +		/* check vrf name */  		if (bs->key.vrfname[0] &&  		    strcmp(vrf->name, bs->key.vrfname))  			continue; + +		/* If Interface matches vrfname, then bypass iface check */ +		if (vrf_is_backend_netns() || strcmp(ifp->name, vrf->name)) { +			/* Interface name mismatch. */ +			if (strcmp(ifp->name, bs->key.ifname)) +				continue; +		} +  		/* Skip enabled sessions. */  		if (bs->sock != -1)  			continue;  | 
