aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2012-03-14 11:32:24 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2012-03-14 11:32:24 +0100
commit8dc33835365a647f352f3b9b00b816763bc536d2 (patch)
tree548a45cb7ab218dd32298a6c6b7f72c2e2c39168
parentee7897d5568535cbe03318debcb71632242f27e6 (diff)
downloadpingu-8dc33835365a647f352f3b9b00b816763bc536d2.tar.bz2
pingu-8dc33835365a647f352f3b9b00b816763bc536d2.tar.xz
pingu_adm: support route dumps
-rw-r--r--pingu_adm.c1
-rw-r--r--pingu_iface.c11
-rw-r--r--pingu_iface.h1
-rw-r--r--pingu_route.c14
-rw-r--r--pingu_route.h1
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