From: Ian Campbell Date: Thu, 17 Sep 2009 12:37:25 +0000 (+0100) Subject: vswitchd: implement bond/hash unixctl X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0644b6125e1d92923ecac1b2d71f9f07cdcc21b;p=openvswitch vswitchd: implement bond/hash unixctl Our test case automation has a requirement to know which hash value a given MAC address hashes to, in order to validate that balancing is happening as expect etc.. Rather than attempt to reimplement the hash algorithm used by vswitchd in python instead expose an appctl which returns this information. --- diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 48d02b38..6b7502bf 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -2750,6 +2750,25 @@ bond_unixctl_disable_slave(struct unixctl_conn *conn, const char *args) enable_slave(conn, args, false); } +static void +bond_unixctl_hash(struct unixctl_conn *conn, const char *args) +{ + uint8_t mac[ETH_ADDR_LEN]; + uint8_t hash; + char *hash_cstr; + + if (sscanf(args, ETH_ADDR_SCAN_FMT, ETH_ADDR_SCAN_ARGS(mac)) + == ETH_ADDR_SCAN_COUNT) { + hash = bond_hash(mac); + + hash_cstr = xasprintf("%u", hash); + unixctl_command_reply(conn, 200, hash_cstr); + free(hash_cstr); + } else { + unixctl_command_reply(conn, 501, "invalid mac"); + } +} + static void bond_init(void) { @@ -2760,6 +2779,7 @@ bond_init(void) bond_unixctl_set_active_slave); unixctl_command_register("bond/enable-slave", bond_unixctl_enable_slave); unixctl_command_register("bond/disable-slave", bond_unixctl_disable_slave); + unixctl_command_register("bond/hash", bond_unixctl_hash); } /* Port functions. */ diff --git a/vswitchd/ovs-vswitchd.8.in b/vswitchd/ovs-vswitchd.8.in index 788e2237..5c9a8c2c 100644 --- a/vswitchd/ovs-vswitchd.8.in +++ b/vswitchd/ovs-vswitchd.8.in @@ -136,6 +136,8 @@ updelay (or downdelay). .IP This setting is not permanent: it persists only until the carrier status of \fIslave\fR changes. +.IP "\fBbond/hash\fR \fImac\fR" +Returns the hash value which would be used for \fImac\fR. . .so lib/vlog-unixctl.man .SH "SEE ALSO"