diff options
author | David Lamparter <equinox@diac24.net> | 2010-02-05 09:48:45 +0100 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2010-02-05 09:51:24 +0100 |
commit | 55d24e7f3dbc69db37781dbff325bda0779778df (patch) | |
tree | a2b2525677332fd92ccc66a4c6082c620ba27802 | |
parent | 647e8e064d8e5316fc89587714a056b1240fa298 (diff) | |
download | quagga-55d24e7f3dbc69db37781dbff325bda0779778df.tar.bz2 quagga-55d24e7f3dbc69db37781dbff325bda0779778df.tar.xz |
lib: get rid of extraneous output with vty_prepend
the vty_*prepend* family can be used to reduce the amount of output
produced by "show running-config" and "write ...". it buffers output in
struct vty->prepend (1024 bytes) and outputs it when vty_out is called.
if vty_out isn't called, it can be removed with vty_unprepend later.
applied on zebra and ospfd to get rid of empty interface blocks.
-rw-r--r-- | lib/vty.c | 25 | ||||
-rw-r--r-- | lib/vty.h | 7 | ||||
-rw-r--r-- | ospfd/ospf_vty.c | 5 | ||||
-rw-r--r-- | zebra/interface.c | 6 | ||||
-rw-r--r-- | zebra/rtadv.c | 7 |
5 files changed, 45 insertions, 5 deletions
@@ -90,6 +90,25 @@ static u_char restricted_mode = 0; char integrate_default[] = SYSCONFDIR INTEGRATE_DEFAULT_CONFIG; +void +vty_prepend (struct vty *vty, const char *format, ...) +{ + va_list args; + + va_start (args, format); + vsnprintf (vty->prepend + vty->prepend_pos, + sizeof(vty->prepend) - vty->prepend_pos, + format, args); + vty->prepend_pos = strlen (vty->prepend); + va_end (args); +} + +void +vty_unprepend (struct vty *vty) +{ + vty->prepend_pos = 0; +} + /* VTY standard output function. */ int vty_out (struct vty *vty, const char *format, ...) @@ -100,6 +119,12 @@ vty_out (struct vty *vty, const char *format, ...) char buf[1024]; char *p = NULL; + if (vty->prepend_pos) + { + vty->prepend_pos = 0; + vty_out (vty, "%s", vty->prepend); + } + if (vty_shell (vty)) { va_start (args, format); @@ -118,6 +118,10 @@ struct vty /* Timeout seconds and thread. */ unsigned long v_timeout; struct thread *t_timeout; + + /* Auto-prepending; any vty_out will print this buffer, then clear it: */ + int prepend_pos; + char prepend[1024]; }; /* Integrated configuration file. */ @@ -207,6 +211,9 @@ extern void vty_terminate (void); extern void vty_reset (void); extern struct vty *vty_new (void); extern int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3); +extern void vty_prepend (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3); +extern void vty_unprepend (struct vty *); +#define vty_prepending(v) ((v)->prepend_pos) extern void vty_read_config (char *, char *); extern void vty_time_print (struct vty *, int); extern void vty_serv_sock (const char *, unsigned short, const char *); diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index d024a2ac..c81d18d6 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -7431,8 +7431,8 @@ config_write_interface (struct vty *vty) if (memcmp (ifp->name, "VLINK", 5) == 0) continue; - vty_out (vty, "!%s", VTY_NEWLINE); - vty_out (vty, "interface %s%s", ifp->name, + vty_prepend (vty, "!%s", VTY_NEWLINE); + vty_prepend (vty, "interface %s%s", ifp->name, VTY_NEWLINE); if (ifp->desc) vty_out (vty, " description %s%s", ifp->desc, @@ -7613,6 +7613,7 @@ config_write_interface (struct vty *vty) #ifdef HAVE_OPAQUE_LSA ospf_opaque_config_write_if (vty, ifp); #endif /* HAVE_OPAQUE_LSA */ + vty_unprepend (vty); } return write; diff --git a/zebra/interface.c b/zebra/interface.c index e09ca41f..f385f8e6 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1699,7 +1699,7 @@ if_config_write (struct vty *vty) if_data = ifp->info; - vty_out (vty, "interface %s%s", ifp->name, + vty_prepend (vty, "interface %s%s", ifp->name, VTY_NEWLINE); if (ifp->desc) @@ -1764,7 +1764,9 @@ if_config_write (struct vty *vty) irdp_config_write (vty, ifp); #endif /* IRDP */ - vty_out (vty, "!%s", VTY_NEWLINE); + if (!vty_prepending (vty)) + vty_out (vty, "!%s", VTY_NEWLINE); + vty_unprepend (vty); } return 0; } diff --git a/zebra/rtadv.c b/zebra/rtadv.c index 8cc3c4cb..d66d4e42 100644 --- a/zebra/rtadv.c +++ b/zebra/rtadv.c @@ -1450,7 +1450,12 @@ rtadv_config_write (struct vty *vty, struct interface *ifp) if (zif->rtadv.AdvSendAdvertisements) vty_out (vty, " no ipv6 nd suppress-ra%s", VTY_NEWLINE); else - vty_out (vty, " ipv6 nd suppress-ra%s", VTY_NEWLINE); + { + if (vty_prepending (vty)) + vty_prepend (vty, " ipv6 nd suppress-ra%s", VTY_NEWLINE); + else + vty_out (vty, " ipv6 nd suppress-ra%s", VTY_NEWLINE); + } } |