diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-14 11:32:24 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-14 11:32:24 +0100 |
commit | 8dc33835365a647f352f3b9b00b816763bc536d2 (patch) | |
tree | 548a45cb7ab218dd32298a6c6b7f72c2e2c39168 | |
parent | ee7897d5568535cbe03318debcb71632242f27e6 (diff) | |
download | pingu-8dc33835365a647f352f3b9b00b816763bc536d2.tar.bz2 pingu-8dc33835365a647f352f3b9b00b816763bc536d2.tar.xz |
pingu_adm: support route dumps
-rw-r--r-- | pingu_adm.c | 1 | ||||
-rw-r--r-- | pingu_iface.c | 11 | ||||
-rw-r--r-- | pingu_iface.h | 1 | ||||
-rw-r--r-- | pingu_route.c | 14 | ||||
-rw-r--r-- | pingu_route.h | 1 |
5 files changed, 28 insertions, 0 deletions
diff --git a/pingu_adm.c b/pingu_adm.c index b59b9b0..9062e6e 100644 --- a/pingu_adm.c +++ b/pingu_adm.c @@ -43,6 +43,7 @@ static struct { { "host-status", pingu_host_dump_status }, { "gateway-status", pingu_iface_dump_status }, { "pings", pingu_iface_dump_pings }, + { "routes", pingu_iface_dump_routes }, { NULL, NULL } }; diff --git a/pingu_iface.c b/pingu_iface.c index fa50de6..065eea3 100644 --- a/pingu_iface.c +++ b/pingu_iface.c @@ -269,6 +269,17 @@ void pingu_iface_dump_pings(int fd, char *filter) write(fd, "\n", 1); } +void pingu_iface_dump_routes(int fd, char *filter) +{ + struct pingu_iface *iface; + list_for_each_entry(iface, &iface_list, iface_list_entry) { + if (filter != NULL && strcmp(filter, iface->name) != 0) + continue; + pingu_route_dump(fd, &iface->route_list); + } + write(fd, "\n", 1); +} + int pingu_iface_init(struct ev_loop *loop) { struct pingu_iface *iface; diff --git a/pingu_iface.h b/pingu_iface.h index a87821f..56ac6d8 100644 --- a/pingu_iface.h +++ b/pingu_iface.h @@ -55,6 +55,7 @@ void pingu_iface_gw_action(struct pingu_iface *iface, void pingu_iface_dump_status(int fd, char *filter); void pingu_iface_dump_pings(int fd, char *filter); +void pingu_iface_dump_routes(int fd, char *filter); void pingu_iface_update_routes(struct pingu_iface *iface, int action); void pingu_iface_cleanup(struct ev_loop *loop); #endif diff --git a/pingu_route.c b/pingu_route.c index 2c96a8d..3a82f70 100644 --- a/pingu_route.c +++ b/pingu_route.c @@ -4,6 +4,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> #include "list.h" #include "log.h" @@ -145,6 +146,19 @@ struct pingu_route *pingu_route_first_default(struct list_head *route_list) return NULL; } +void pingu_route_dump(int fd, struct list_head *route_list) +{ + struct pingu_route *entry; + list_for_each_entry(entry, route_list, route_list_entry) { + char str[512] = ""; + pingu_route_to_string(entry, str, sizeof(str)); + if (str[0] != '\0') { + strncat(str, "\n", sizeof(str)); + write(fd, str, strlen(str)); + } + } +} + void pingu_route_cleanup(struct list_head *route_list) { struct pingu_route *entry, *n; diff --git a/pingu_route.h b/pingu_route.h index c416182..bd4abf9 100644 --- a/pingu_route.h +++ b/pingu_route.h @@ -28,6 +28,7 @@ void pingu_route_del(struct list_head *route_list, struct pingu_route *gw); int is_default_gw(struct pingu_route *route); struct pingu_route *pingu_route_first_default(struct list_head *route_list); +void pingu_route_dump(int fd, struct list_head *route_list); void pingu_route_cleanup(struct list_head *route_list); #endif |