diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-14 09:16:03 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-14 09:16:03 +0100 |
commit | 97456fa7bb23c22e2a06ca4a99e62e75529f8a91 (patch) | |
tree | 6958149286cb562d91ca0167eb8ffc3662442eb4 | |
parent | b29539a9bbe9f328ec0dedfad2cc8efe8b344550 (diff) | |
download | pingu-97456fa7bb23c22e2a06ca4a99e62e75529f8a91.tar.bz2 pingu-97456fa7bb23c22e2a06ca4a99e62e75529f8a91.tar.xz |
pingu_route: add helper function for generating route string
Use for logging.
-rw-r--r-- | pingu_netlink.c | 15 | ||||
-rw-r--r-- | pingu_route.c | 30 | ||||
-rw-r--r-- | pingu_route.h | 2 |
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); |