From 76b7dce7fc758dba9114e80d8eb2b4dd05cc5f3c Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Wed, 21 Jun 2023 13:41:06 +0200 Subject: [PATCH] confd: ignore other end of veth pairs also when deleting interfaces Same as with creating veth pairs, we must not try to delete both ends since the kernel does that for us. Ensure we check skip in the current generation and not in the next. Signed-off-by: Joachim Wiberg --- src/confd/src/confd/dagger.c | 5 +++++ src/confd/src/confd/dagger.h | 1 + src/confd/src/confd/ietf-interfaces.c | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/confd/src/confd/dagger.c b/src/confd/src/confd/dagger.c index dfb22696..305eb81e 100644 --- a/src/confd/src/confd/dagger.c +++ b/src/confd/src/confd/dagger.c @@ -120,6 +120,11 @@ int dagger_should_skip(struct dagger *d, const char *ifname) return fexistf("%s/%d/skip/%s", d->path, d->next, ifname); } +int dagger_should_skip_current(struct dagger *d, const char *ifname) +{ + return fexistf("%s/%d/skip/%s", d->path, d->current, ifname); +} + int dagger_claim(struct dagger *d, const char *path) { diff --git a/src/confd/src/confd/dagger.h b/src/confd/src/confd/dagger.h index 8f23f533..70938204 100644 --- a/src/confd/src/confd/dagger.h +++ b/src/confd/src/confd/dagger.h @@ -24,6 +24,7 @@ int dagger_evolve_or_abandon(struct dagger *d); void dagger_skip_iface(struct dagger *d, const char *ifname); int dagger_should_skip(struct dagger *d, const char *ifname); +int dagger_should_skip_current(struct dagger *d, const char *ifname); int dagger_claim(struct dagger *d, const char *path); diff --git a/src/confd/src/confd/ietf-interfaces.c b/src/confd/src/confd/ietf-interfaces.c index 32369eaa..5321ee8c 100644 --- a/src/confd/src/confd/ietf-interfaces.c +++ b/src/confd/src/confd/ietf-interfaces.c @@ -805,6 +805,9 @@ static int netdag_gen_iface_del(struct dagger *net, struct lyd_node *dif, DEBUG_IFACE(dif, ""); + if (dagger_should_skip_current(net, ifname)) + return 0; + ip = dagger_fopen_current(net, "exit", ifname, 50, "exit.ip"); if (!ip) return -EIO;