aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2012-03-14 09:16:03 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2012-03-14 09:16:03 +0100
commit97456fa7bb23c22e2a06ca4a99e62e75529f8a91 (patch)
tree6958149286cb562d91ca0167eb8ffc3662442eb4
parentb29539a9bbe9f328ec0dedfad2cc8efe8b344550 (diff)
downloadpingu-97456fa7bb23c22e2a06ca4a99e62e75529f8a91.tar.bz2
pingu-97456fa7bb23c22e2a06ca4a99e62e75529f8a91.tar.xz
pingu_route: add helper function for generating route string
Use for logging.
-rw-r--r--pingu_netlink.c15
-rw-r--r--pingu_route.c30
-rw-r--r--pingu_route.h2
3 files changed, 30 insertions, 17 deletions
diff --git a/pingu_netlink.c b/pingu_netlink.c
index 0c0ff0e..1dec0c0 100644
--- a/pingu_netlink.c
+++ b/pingu_netlink.c
@@ -643,21 +643,14 @@ static struct pingu_route *gw_from_rtmsg(struct pingu_route *gw,
static void log_route_change(struct pingu_route *route, int table,
int action)
{
- char deststr[64] = "", gwstr[64] = "", viastr[68] = "";
- char ifname[IF_NAMESIZE] = "";
- char devstr[IF_NAMESIZE + 5] = "";
+ char routestr[512] = "";
char *actionstr = "New";
if (action == RTM_DELROUTE)
actionstr = "Delete";
- if (if_indextoname(route->dev_index, ifname) != NULL)
- snprintf(devstr, sizeof(devstr), "dev %s ", ifname);
- sockaddr_to_string(&route->dest, deststr, sizeof(deststr));
- sockaddr_to_string(&route->gw_addr, gwstr, sizeof(gwstr));
- if (gwstr[0] != '\0')
- snprintf(viastr, sizeof(viastr), "via %s ", gwstr);
- log_info("%s route to %s/%i %s%stable %i", actionstr,
- deststr, route->dst_len, viastr, devstr, table);
+ log_info("%s route to %s table %i", actionstr,
+ pingu_route_to_string(route, routestr, sizeof(routestr)),
+ table);
}
void route_changed_for_iface(struct pingu_iface *iface,
diff --git a/pingu_route.c b/pingu_route.c
index 2099dbc..2c96a8d 100644
--- a/pingu_route.c
+++ b/pingu_route.c
@@ -1,4 +1,7 @@
+#include <net/if.h>
+
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -39,14 +42,29 @@ static struct pingu_route *pingu_route_clone(struct pingu_route *gw)
return new_gw;
}
+char *pingu_route_to_string(struct pingu_route *route,
+ char *buf, size_t bufsize)
+{
+ char deststr[64] = "", gwstr[64] = "", viastr[68] = "";
+ char ifname[IF_NAMESIZE] = "", devstr[IF_NAMESIZE + 5] = "";
+
+ sockaddr_to_string(&route->dest, deststr, sizeof(deststr));
+ sockaddr_to_string(&route->gw_addr, gwstr, sizeof(gwstr));
+ if (gwstr[0] != '\0')
+ snprintf(viastr, sizeof(viastr), "via %s ", gwstr);
+ if (if_indextoname(route->dev_index, ifname) != NULL)
+ snprintf(devstr, sizeof(devstr), "dev %s ", ifname);
+
+ snprintf(buf, bufsize, "%s/%i %s%smetric %i", deststr,
+ route->dst_len, viastr, devstr, route->metric);
+ return buf;
+}
+
static void log_debug_gw(char *msg, struct pingu_route *gw)
{
- char destbuf[64], gwaddrbuf[64];
- log_debug("%s: %s/%i via %s metric %i", msg,
- sockaddr_to_string(&gw->dest, destbuf, sizeof(destbuf)),
- gw->dst_len,
- sockaddr_to_string(&gw->gw_addr, gwaddrbuf, sizeof(gwaddrbuf)),
- gw->metric);
+ char routestr[512] = "";
+ log_debug("%s: %s", msg,
+ pingu_route_to_string(gw, routestr, sizeof(routestr)));
}
static int gateway_cmp(struct pingu_route *a, struct pingu_route *b)
diff --git a/pingu_route.h b/pingu_route.h
index 9be6f21..c416182 100644
--- a/pingu_route.h
+++ b/pingu_route.h
@@ -19,6 +19,8 @@ struct pingu_route {
struct list_head route_list_entry;
};
+char *pingu_route_to_string(struct pingu_route *route,
+ char *buf, size_t bufsize);
void pingu_route_del_all(struct list_head *head);
void pingu_route_add(struct list_head *route_list,
struct pingu_route *gw);