vswitchd: implement bond/hash unixctl
authorIan Campbell <Ian.Campbell@citrix.com>
Thu, 17 Sep 2009 12:37:25 +0000 (13:37 +0100)
committerBen Pfaff <blp@nicira.com>
Thu, 17 Sep 2009 16:29:53 +0000 (09:29 -0700)
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
vswitchd/ovs-vswitchd.8.in

index 48d02b38331017e043e1f20838cc073c88d79750..6b7502bfeeb7893a38574ac3518d24d80bd44daf 100644 (file)
@@ -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);
 }
 \f
 /* Port functions. */
index 788e2237255c79eb101452804e48a57c25384109..5c9a8c2ce11122ad6c2e97e7c5075a5cc68a91a5 100644 (file)
@@ -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"