]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Unix: Expand accepted ranges of iproute2 constants
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 7 Apr 2021 14:14:20 +0000 (16:14 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 7 Apr 2021 14:14:20 +0000 (16:14 +0200)
We support 32bit table and realm/flow ids, we should also accept them as
constants.

Thanks to Patrick Hemmer for the bugreport.

sysdep/unix/main.c

index 67e766553bce26f0e8f8a994d16e6a0b42b18975..76f92c5e8ab7155cd792bc8d776161f982238608 100644 (file)
@@ -125,11 +125,11 @@ add_num_const(char *name, int val, const char *file, const uint line)
 /* the code of read_iproute_table() is based on
    rtnl_tab_initialize() from iproute2 package */
 static void
-read_iproute_table(char *file, char *prefix, int max)
+read_iproute_table(char *file, char *prefix, uint max)
 {
   char buf[512], namebuf[512];
   char *name;
-  int val;
+  uint val;
   FILE *fp;
 
   strcpy(namebuf, prefix);
@@ -151,11 +151,11 @@ read_iproute_table(char *file, char *prefix, int max)
 
     if (sscanf(p, "0x%x %s\n", &val, name) != 2 &&
        sscanf(p, "0x%x %s #", &val, name) != 2 &&
-       sscanf(p, "%d %s\n", &val, name) != 2 &&
-       sscanf(p, "%d %s #", &val, name) != 2)
+       sscanf(p, "%u %s\n", &val, name) != 2 &&
+       sscanf(p, "%u %s #", &val, name) != 2)
       continue;
 
-    if (val < 0 || val > max)
+    if (val > max)
       continue;
 
     for(p = name; *p; p++)
@@ -191,10 +191,10 @@ sysdep_preconfig(struct config *c)
   c->watchdog_warning = UNIX_DEFAULT_WATCHDOG_WARNING;
 
 #ifdef PATH_IPROUTE_DIR
-  read_iproute_table(PATH_IPROUTE_DIR "/rt_protos", "ipp_", 256);
-  read_iproute_table(PATH_IPROUTE_DIR "/rt_realms", "ipr_", 256);
-  read_iproute_table(PATH_IPROUTE_DIR "/rt_scopes", "ips_", 256);
-  read_iproute_table(PATH_IPROUTE_DIR "/rt_tables", "ipt_", 256);
+  read_iproute_table(PATH_IPROUTE_DIR "/rt_protos", "ipp_", 255);
+  read_iproute_table(PATH_IPROUTE_DIR "/rt_realms", "ipr_", 0xffffffff);
+  read_iproute_table(PATH_IPROUTE_DIR "/rt_scopes", "ips_", 255);
+  read_iproute_table(PATH_IPROUTE_DIR "/rt_tables", "ipt_", 0xffffffff);
 #endif
 }