From e0644b6125e1d92923ecac1b2d71f9f07cdcc21b Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Thu, 17 Sep 2009 13:37:25 +0100 Subject: [PATCH] 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. --- vswitchd/bridge.c | 20 ++++++++++++++++++++ vswitchd/ovs-vswitchd.8.in | 2 ++ 2 files changed, 22 insertions(+) diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 48d02b383..6b7502bfe 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 788e22372..5c9a8c2ce 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" -- 2.45.2