]> xenbits.xensource.com Git - osstest.git/commitdiff
CXFabric: Use a vif script hook to (de)register guest mac address flight-25361 flight-25366 flight-25371 flight-25372 flight-25373 flight-25374 flight-25375 flight-25376 flight-25377 flight-25378 flight-25379 flight-25380 flight-25381 flight-25382 flight-25383 flight-25384 flight-25385 flight-25386 flight-25387 flight-25388 flight-25389 flight-25390 flight-25391 flight-25392 flight-25393 flight-25394 flight-25395 flight-25396 flight-25397 flight-25398 flight-25399 flight-25400 flight-25401 flight-25402 flight-25403 flight-25404 flight-25405 flight-25406 flight-25410 flight-25411 flight-25413 flight-25454 flight-25476 flight-25477 flight-25478 flight-25479 flight-25480 flight-25481 flight-25482 flight-25483 flight-25484 flight-25485 flight-25486 flight-25487 flight-25488 flight-25489 flight-25490 flight-25491 flight-25492 flight-25493 flight-25494 flight-25495 flight-25496 flight-25497 flight-25498 flight-25499 flight-25500 flight-25501 flight-25502 flight-25503 flight-25504 flight-25505 flight-25506 flight-25542 flight-25543 flight-25544 flight-25545 flight-25546 flight-25547 flight-25548 flight-25549 flight-25550 flight-25551 flight-25552 flight-25553 flight-25554 flight-25555 flight-25556 flight-25557 flight-25558 flight-25559 flight-25560 flight-25562
authorIan Campbell <ian.campbell@citrix.com>
Thu, 6 Mar 2014 14:12:45 +0000 (14:12 +0000)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Thu, 6 Mar 2014 14:38:58 +0000 (14:38 +0000)
Since mac table is apparently small this avoids filling it with mac addresses
which may never get used.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Osstest/CXFabric.pm

index 866aefee23a06f80d3141f5507fe61710af3e179..404c7a65d03f31af3538ff06e54c60e89eb98438 100644 (file)
@@ -43,10 +43,7 @@ sub setup_cxfabric($)
     # is unlikely to be anything other than exactly our marilith box.
     return unless $ho->{Flags}{'equiv-marilith'};
 
-    my $nr = 8;
-
-    my $prefix = ether_prefix($ho);
-    logm("Registering $nr MAC addresses with CX fabric using prefix $prefix");
+    logm("Setting up CX fabric hook script");
 
     if ( $ho->{Suite} =~ m/wheezy/ )
     {
@@ -61,24 +58,28 @@ sub setup_cxfabric($)
         target_install_packages($ho, qw(iproute2));
     }
 
-    my $banner = '# osstest: register potential guest MACs with CX fabric';
-    my $rclocal = "$banner\n";
-    # Osstest::TestSupport::select_ether allocates sequentially from $prefix:00:01
-    my $i = 0;
-    while ( $i++ < $nr ) {
-        $rclocal .= sprintf("bridge fdb add $prefix:%02x:%02x dev eth0\n",
-                            $i >> 8, $i & 0xff);
-    }
-
-    target_editfile_root($ho, '/etc/rc.local', sub {
-        my $had_banner = 0;
-        while (<::EI>) {
-            $had_banner = 1 if m/^$banner$/;
-            print ::EO $rclocal if m/^exit 0$/ && !$had_banner;
-            print ::EO;
-        }
-    });
+    target_cmd_root($ho, 'mkdir -p /etc/xen/scripts/vif-post.d');
+    target_putfilecontents_root_stash($ho,10,<<'END','/etc/xen/scripts/vif-post.d/cxfabric.hook');
+# (De)register the new device with the CX Fabric. Ignore errors from bridge fdb
+# since the MAC might already be present etc.
+cxfabric() {
+       local command=$1
+       local mac=$(xenstore_read "$XENBUS_PATH/mac")
+       case $command in
+       online|add)
+               log debug "Adding $mac to CXFabric fdb"
+               do_without_error bridge fdb add $mac dev eth0
+               ;;
+       offline)
+               log debug "Removing $mac from CXFabric fdb"
+               do_without_error bridge fdb del $mac dev eth0
+               ;;
+       esac
+}
+cxfabric $command
 
+END
+    target_cmd_root($ho, 'chmod +x /etc/xen/scripts/vif-post.d/cxfabric.hook');
 }
 
 1;