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 <yamam...@valinux.co.jp> --- lib/ovs-router.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/ovs-router.c b/lib/ovs-router.c index b095f68..a121354 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); } -- 1.9.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev