summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vswitchd/bridge.c20
-rw-r--r--vswitchd/ovs-vswitchd.8.in2
2 files changed, 22 insertions, 0 deletions
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 48d02b383..6b7502bfe 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -2751,6 +2751,25 @@ bond_unixctl_disable_slave(struct unixctl_conn *conn, const char *args)
}
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)
{
unixctl_command_register("bond/list", bond_unixctl_list);
@@ -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"