]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Adds %R printf directive for Router ID.
authorOndrej Zajicek <santiago@crfreenet.org>
Thu, 23 Jul 2009 14:06:25 +0000 (16:06 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Thu, 23 Jul 2009 14:06:25 +0000 (16:06 +0200)
lib/printf.c
nest/a-set.c
nest/cmds.c
nest/rt-attr.c

index 0e3b4d933106f1c151d7206f8b49ac33d782fe3a..c3f7074d38f6d2249079d238fa951fdd98ed8003 100644 (file)
@@ -120,7 +120,8 @@ static char * number(char * str, long num, int base, int size, int precision,
  * available space to avoid buffer overflows and it allows some more
  * format specifiers: |%I| for formatting of IP addresses (any non-zero
  * width is automatically replaced by standard IP address width which
- * depends on whether we use IPv4 or IPv6; |%#I| gives hexadecimal format)
+ * depends on whether we use IPv4 or IPv6; |%#I| gives hexadecimal format),
+ * |%R| for Router / Network ID (u32 value printed as IPv4 address)
  * and |%m| resp. |%M| for error messages (uses strerror() to translate @errno code to
  * message text). On the other hand, it doesn't support floating
  * point numbers.
@@ -133,6 +134,7 @@ int bvsnprintf(char *buf, int size, const char *fmt, va_list args)
        int len;
        unsigned long num;
        int i, base;
+       u32 x;
        char *str, *start;
        const char *s;
        char ipbuf[STD_ADDRESS_P_LENGTH+1];
@@ -277,6 +279,17 @@ int bvsnprintf(char *buf, int size, const char *fmt, va_list args)
                        s = ipbuf;
                        goto str;
 
+               /* Router/Network ID - essentially IPv4 address in u32 value */
+               case 'R':
+                       x = va_arg(args, u32);
+                       bsprintf(ipbuf, "%d.%d.%d.%d",
+                                ((x >> 24) & 0xff),
+                                ((x >> 16) & 0xff),
+                                ((x >> 8) & 0xff),
+                                (x & 0xff));
+                       s = ipbuf;
+                       goto str;
+
                /* integer number formats - set up the flags and "break" */
                case 'o':
                        base = 8;
index 505c0e51fefe11251039d15e07c5327946323923..fad4481f5e56fa737fce5100def48a104e7abe77 100644 (file)
@@ -34,9 +34,7 @@ int_set_format(struct adata *set, int way, byte *buf, unsigned int size)
       if (way)
        buf += bsprintf(buf, "(%d,%d)", *z >> 16, *z & 0xffff);
       else
-       buf += bsprintf(buf, "%d.%d.%d.%d",
-                       (*z >> 24) & 0xff, (*z >> 16) & 0xff,
-                       (*z >> 8) & 0xff, *z & 0xff);
+       buf += bsprintf(buf, "%R", *z);
 
       z++;
       sp = 0;
index ac537c88ec6a1feeed7d177ca1d451e78a0d43f2..faed870c782e38b617efb89c68e4fd4d3378b3cf 100644 (file)
@@ -19,6 +19,7 @@ cmd_show_status(void)
 
   cli_msg(-1000, "BIRD " BIRD_VERSION);
   tm_format_datetime(tim, now);
+  cli_msg(-1011, "Router ID is %R", config->router_id);
   cli_msg(-1011, "Current server time is %s", tim);
   tm_format_datetime(tim, boot_time);
   cli_msg(-1011, "Last reboot on %s", tim);
index 2318f801b8afbd321e1a91aac5d6aebe70eb9f3e..de63198ee57982b95d9a284a4178a217e3c45f2a 100644 (file)
@@ -419,11 +419,7 @@ ea_format(eattr *e, byte *buf)
          bsprintf(buf, "%I", *(ip_addr *) ad->data);
          break;
        case EAF_TYPE_ROUTER_ID:
-         bsprintf(buf, "%d.%d.%d.%d",
-                  (e->u.data >> 24) & 0xff,
-                  (e->u.data >> 16) & 0xff,
-                  (e->u.data >> 8) & 0xff,
-                  e->u.data & 0xff);
+         bsprintf(buf, "%R", e->u.data);
          break;
        case EAF_TYPE_AS_PATH:
          as_path_format(ad, buf, end - buf);