40 lines
		
	
	
		
			974 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			974 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
|   | # Global configuration for mininet | ||
|  | # kernel must have NETNS/VETH/SCHED | ||
|  | { config, lib, pkgs, ... }: | ||
|  | 
 | ||
|  | with lib; | ||
|  | 
 | ||
|  | let | ||
|  |   cfg  = config.programs.mininet; | ||
|  | 
 | ||
|  |   generatedPath = with pkgs; makeSearchPath "bin"  [ | ||
|  |     iperf ethtool iproute socat | ||
|  |   ]; | ||
|  | 
 | ||
|  |   pyEnv = pkgs.python.withPackages(ps: [ ps.mininet-python ]); | ||
|  | 
 | ||
|  |   mnexecWrapped = pkgs.runCommand "mnexec-wrapper" | ||
|  |     { buildInputs = [ pkgs.makeWrapper pkgs.pythonPackages.wrapPython ]; } | ||
|  |     ''
 | ||
|  |       makeWrapper ${pkgs.mininet}/bin/mnexec \ | ||
|  |         $out/bin/mnexec \ | ||
|  |         --prefix PATH : "${generatedPath}" | ||
|  | 
 | ||
|  |       ln -s ${pyEnv}/bin/mn $out/bin/mn | ||
|  | 
 | ||
|  |       # mn errors out without a telnet binary | ||
|  |       # pkgs.telnet brings an undesired ifconfig into PATH see #43105 | ||
|  |       ln -s ${pkgs.telnet}/bin/telnet $out/bin/telnet | ||
|  |     '';
 | ||
|  | in | ||
|  | { | ||
|  |   options.programs.mininet.enable = mkEnableOption "Mininet"; | ||
|  | 
 | ||
|  |   config = mkIf cfg.enable { | ||
|  | 
 | ||
|  |     virtualisation.vswitch.enable = true; | ||
|  | 
 | ||
|  |     environment.systemPackages = [ mnexecWrapped ]; | ||
|  |   }; | ||
|  | } |