summaryrefslogtreecommitdiffstats
path: root/ospfd
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2024-07-10 09:49:51 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2024-07-10 09:52:25 +0200
commit54b72028c6059c8c69ec77335a5e828884fffbfe (patch)
tree9b8ed95943891c88fd119ac883f60aab9b1f5d5c /ospfd
parentMerge pull request #16140 from donaldsharp/linklist_discouragement (diff)
downloadfrr-54b72028c6059c8c69ec77335a5e828884fffbfe.tar.xz
frr-54b72028c6059c8c69ec77335a5e828884fffbfe.zip
ospfd: fix state location mixup
In the "2x2 matrix" of these, I accidentally edited "row-wise" when I should've edited "column-wise"... *sigh* Reported-by: github.com/rbfnet Fixes: #16349 Fixes: 110945ba0d2 ("ospfd: fix GR state location") Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ospfd')
-rw-r--r--ospfd/ospf_main.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index fdb4e5c58..5c1102750 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -48,14 +48,20 @@
#include "ospfd/ospf_apiserver.h"
#define OSPFD_STATE_NAME "%s/ospfd.json", frr_libstatedir
-#define OSPFD_INST_STATE_NAME(i) "%s/ospfd-%d.json", frr_runstatedir, i
+#define OSPFD_INST_STATE_NAME(i) "%s/ospfd-%d.json", frr_libstatedir, i
/* this one includes the path... because the instance number was in the path
* before :( ... which totally didn't have a mkdir anywhere.
+ *
+ * ... and libstatedir & runstatedir got switched around while changing this;
+ * for non-instance it read the wrong path, for instance it wrote the wrong
+ * path. (There is no COMPAT2 for non-instance because it was writing to the
+ * right place, i.e. no extra path to check exists from reading a wrong path.)
*/
-#define OSPFD_COMPAT_STATE_NAME "%s/ospfd-gr.json", frr_libstatedir
-#define OSPFD_COMPAT_INST_STATE_NAME(i) \
+#define OSPFD_COMPAT_STATE_NAME "%s/ospfd-gr.json", frr_runstatedir
+#define OSPFD_COMPAT1_INST_STATE_NAME(i) \
"%s-%d/ospfd-gr.json", frr_runstatedir, i
+#define OSPFD_COMPAT2_INST_STATE_NAME(i) "%s/ospfd-%d.json", frr_runstatedir, i
/* ospfd privileges */
zebra_capabilities_t _caps_p[] = {ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
@@ -139,10 +145,12 @@ static const struct frr_yang_module_info *const ospfd_yang_modules[] = {
/* actual paths filled in main() */
static char state_path[512];
-static char state_compat_path[512];
+static char state_compat1_path[512];
+static char state_compat2_path[512];
static char *state_paths[] = {
state_path,
- state_compat_path,
+ state_compat1_path,
+ state_compat2_path, /* NULLed out if not needed */
NULL,
};
@@ -242,12 +250,18 @@ int main(int argc, char **argv)
if (ospf_instance) {
snprintf(state_path, sizeof(state_path),
OSPFD_INST_STATE_NAME(ospf_instance));
- snprintf(state_compat_path, sizeof(state_compat_path),
- OSPFD_COMPAT_INST_STATE_NAME(ospf_instance));
+ snprintf(state_compat1_path, sizeof(state_compat1_path),
+ OSPFD_COMPAT1_INST_STATE_NAME(ospf_instance));
+ snprintf(state_compat2_path, sizeof(state_compat2_path),
+ OSPFD_COMPAT2_INST_STATE_NAME(ospf_instance));
} else {
snprintf(state_path, sizeof(state_path), OSPFD_STATE_NAME);
- snprintf(state_compat_path, sizeof(state_compat_path),
+ snprintf(state_compat1_path, sizeof(state_compat1_path),
OSPFD_COMPAT_STATE_NAME);
+ /* no COMPAT2 here since it was reading that was broken,
+ * there is no additional path that would've been written
+ */
+ state_paths[2] = NULL;
}
/* OSPF master init. */