Merge pull request #182324 from snpschaaf/testdriver-vde-hub-mode

use vde switch in hubmode by default

authored by Jacek Galowicz and committed by GitHub 8429701c 2922becf

+46 -2
+6 -2
nixos/lib/test-driver/test_driver/vlan.py
··· 32 rootlog.info("start vlan") 33 pty_master, pty_slave = pty.openpty() 34 35 self.process = subprocess.Popen( 36 - ["vde_switch", "-s", self.socket_dir, "--dirmode", "0700"], 37 stdin=pty_slave, 38 stdout=subprocess.PIPE, 39 stderr=subprocess.PIPE, ··· 50 if not (self.socket_dir / "ctl").exists(): 51 rootlog.error("cannot start vde_switch") 52 53 - rootlog.info(f"running vlan (pid {self.pid})") 54 55 def __del__(self) -> None: 56 rootlog.info(f"kill vlan (pid {self.pid})")
··· 32 rootlog.info("start vlan") 33 pty_master, pty_slave = pty.openpty() 34 35 + # The --hub is required for the scenario determined by 36 + # nixos/tests/networking.nix vlan-ping. 37 + # VLAN Tagged traffic (802.1Q) seams to be blocked if a vde_switch is 38 + # used without the hub mode (flood packets to all ports). 39 self.process = subprocess.Popen( 40 + ["vde_switch", "-s", self.socket_dir, "--dirmode", "0700", "--hub"], 41 stdin=pty_slave, 42 stdout=subprocess.PIPE, 43 stderr=subprocess.PIPE, ··· 54 if not (self.socket_dir / "ctl").exists(): 55 rootlog.error("cannot start vde_switch") 56 57 + rootlog.info(f"running vlan (pid {self.pid}; ctl {self.socket_dir})") 58 59 def __del__(self) -> None: 60 rootlog.info(f"kill vlan (pid {self.pid})")
+40
nixos/tests/networking.nix
··· 682 client2.succeed("ip addr show dev vlan >&2") 683 ''; 684 }; 685 virtual = { 686 name = "Virtual"; 687 nodes.machine = {
··· 682 client2.succeed("ip addr show dev vlan >&2") 683 ''; 684 }; 685 + vlan-ping = let 686 + baseIP = number: "10.10.10.${number}"; 687 + vlanIP = number: "10.1.1.${number}"; 688 + baseInterface = "eth1"; 689 + vlanInterface = "vlan42"; 690 + node = number: {pkgs, ... }: with pkgs.lib; { 691 + virtualisation.vlans = [ 1 ]; 692 + networking = { 693 + #useNetworkd = networkd; 694 + useDHCP = false; 695 + vlans.${vlanInterface} = { id = 42; interface = baseInterface; }; 696 + interfaces.${baseInterface}.ipv4.addresses = mkOverride 0 [{ address = baseIP number; prefixLength = 24; }]; 697 + interfaces.${vlanInterface}.ipv4.addresses = mkOverride 0 [{ address = vlanIP number; prefixLength = 24; }]; 698 + }; 699 + }; 700 + 701 + serverNodeNum = "1"; 702 + clientNodeNum = "2"; 703 + 704 + in { 705 + name = "vlan-ping"; 706 + nodes.server = node serverNodeNum; 707 + nodes.client = node clientNodeNum; 708 + testScript = { ... }: 709 + '' 710 + start_all() 711 + 712 + with subtest("Wait for networking to be configured"): 713 + server.wait_for_unit("network.target") 714 + client.wait_for_unit("network.target") 715 + 716 + with subtest("Test ping on base interface in setup"): 717 + client.succeed("ping -I ${baseInterface} -c 1 ${baseIP serverNodeNum}") 718 + server.succeed("ping -I ${baseInterface} -c 1 ${baseIP clientNodeNum}") 719 + 720 + with subtest("Test ping on vlan subinterface in setup"): 721 + client.succeed("ping -I ${vlanInterface} -c 1 ${vlanIP serverNodeNum}") 722 + server.succeed("ping -I ${vlanInterface} -c 1 ${vlanIP clientNodeNum}") 723 + ''; 724 + }; 725 virtual = { 726 name = "Virtual"; 727 nodes.machine = {