summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2009-07-23 16:06:25 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2009-07-23 16:06:25 +0200
commit2f6483cd312ffd7ef055099ce801fb8f437d9abe (patch)
treedd4d468a17017a5b1372057be9bcc40536089a3c
parentf0333f44a5a4bec9f3978a90cf7eda1b0a2ec151 (diff)
Adds %R printf directive for Router ID.
-rw-r--r--lib/printf.c15
-rw-r--r--nest/a-set.c4
-rw-r--r--nest/cmds.c1
-rw-r--r--nest/rt-attr.c6
4 files changed, 17 insertions, 9 deletions
diff --git a/lib/printf.c b/lib/printf.c
index 0e3b4d93..c3f7074d 100644
--- a/lib/printf.c
+++ b/lib/printf.c
@@ -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;
diff --git a/nest/a-set.c b/nest/a-set.c
index 505c0e51..fad4481f 100644
--- a/nest/a-set.c
+++ b/nest/a-set.c
@@ -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;
diff --git a/nest/cmds.c b/nest/cmds.c
index ac537c88..faed870c 100644
--- a/nest/cmds.c
+++ b/nest/cmds.c
@@ -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);
diff --git a/nest/rt-attr.c b/nest/rt-attr.c
index 2318f801..de63198e 100644
--- a/nest/rt-attr.c
+++ b/nest/rt-attr.c
@@ -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);