From 2f6483cd312ffd7ef055099ce801fb8f437d9abe Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Thu, 23 Jul 2009 16:06:25 +0200 Subject: [PATCH] Adds %R printf directive for Router ID. --- lib/printf.c | 15 ++++++++++++++- nest/a-set.c | 4 +--- nest/cmds.c | 1 + nest/rt-attr.c | 6 +----- 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);