From: YAMAMOTO Takashi Date: Mon, 17 Nov 2014 06:05:54 +0000 (+0900) Subject: ovs-router: Add "ovs/route/lookup" command X-Git-Tag: v2.4.0~794 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=bc786797628efb67fb5fda93203b60481f6907db ovs-router: Add "ovs/route/lookup" command This command is useful at least for testing. Example output: % ovs-appctl ovs/route/lookup '10.0.0.1' gateway 172.17.0.254 dev wm0 % Signed-off-by: YAMAMOTO Takashi Acked-by: Pravin B Shelar --- diff --git a/README-native-tunneling.md b/README-native-tunneling.md index 0ffd82b92..746d089c4 100644 --- a/README-native-tunneling.md +++ b/README-native-tunneling.md @@ -57,6 +57,8 @@ Tunnel routing table: ovs-appctl ovs/route/show To del route: ovs-appctl ovs/route/del / + To look up and display the route for a destination: + ovs-appctl ovs/route/lookup ARP: To see arp cache content: diff --git a/lib/ovs-router.c b/lib/ovs-router.c index b095f681e..a12135437 100644 --- a/lib/ovs-router.c +++ b/lib/ovs-router.c @@ -260,6 +260,31 @@ ovs_router_show(struct unixctl_conn *conn, int argc OVS_UNUSED, ds_destroy(&ds); } +static void +ovs_router_lookup_cmd(struct unixctl_conn *conn, int argc OVS_UNUSED, + const char *argv[], void *aux OVS_UNUSED) +{ + ovs_be32 ip; + unsigned int plen; + + if (scan_ipv4_route(argv[1], &ip, &plen) && plen == 32) { + char iface[IFNAMSIZ]; + ovs_be32 gw; + + if (ovs_router_lookup(ip, iface, &gw)) { + struct ds ds = DS_EMPTY_INITIALIZER; + + ds_put_format(&ds, "gateway " IP_FMT "\n", IP_ARGS(gw)); + ds_put_format(&ds, "dev %s\n", iface); + unixctl_command_reply(conn, ds_cstr(&ds)); + } else { + unixctl_command_reply(conn, "Not found"); + } + } else { + unixctl_command_reply(conn, "Invalid parameters"); + } +} + void ovs_router_flush(void) { @@ -289,4 +314,6 @@ ovs_router_init(void) unixctl_command_register("ovs/route/show", "", 0, 0, ovs_router_show, NULL); unixctl_command_register("ovs/route/del", "ipv4_addr/prefix_len", 1, 1, ovs_router_del, NULL); + unixctl_command_register("ovs/route/lookup", "ipv4_addr", 1, 1, + ovs_router_lookup_cmd, NULL); }