mininet: init at 2.3.0d4 (#41261)
Mininet (https://github.com/mininet/mininet) is a popular network emulator that glues several components such as network namespaces, traffic control commands into a set of python bindings. It is then "easy" to describe a topology and run experiments on it.
This commit is contained in:
parent
494e290dce
commit
35f74c3608
@ -103,6 +103,7 @@
|
||||
./programs/less.nix
|
||||
./programs/light.nix
|
||||
./programs/mosh.nix
|
||||
./programs/mininet.nix
|
||||
./programs/mtr.nix
|
||||
./programs/nano.nix
|
||||
./programs/npm.nix
|
||||
|
39
nixos/modules/programs/mininet.nix
Normal file
39
nixos/modules/programs/mininet.nix
Normal file
@ -0,0 +1,39 @@
|
||||
# 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 ];
|
||||
};
|
||||
}
|
48
pkgs/tools/virtualization/mininet/default.nix
Normal file
48
pkgs/tools/virtualization/mininet/default.nix
Normal file
@ -0,0 +1,48 @@
|
||||
{ stdenv, lib, fetchFromGitHub
|
||||
, which
|
||||
, python
|
||||
, help2man
|
||||
}:
|
||||
|
||||
let
|
||||
pyEnv = python.withPackages(ps: [ ps.setuptools ]);
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mininet-${version}";
|
||||
version = "2.3.0d4";
|
||||
|
||||
outputs = [ "out" "py" ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mininet";
|
||||
repo = "mininet";
|
||||
rev = version;
|
||||
sha256 = "02hsqa7r5ykj8m1ycl32xwn1agjrw78wkq87xif0dl2vkzln41i4";
|
||||
};
|
||||
|
||||
buildFlags = [ "mnexec" ];
|
||||
makeFlags = [ "PREFIX=$(out)" ];
|
||||
|
||||
pythonPath = [ python.pkgs.setuptools ];
|
||||
buildInputs = [ python which help2man ];
|
||||
|
||||
installTargets = [ "install-mnexec" "install-manpages" ];
|
||||
|
||||
preInstall = ''
|
||||
mkdir -p $out $py
|
||||
# without --root, install fails
|
||||
${pyEnv.interpreter} setup.py install --root="/" --prefix=$py
|
||||
'';
|
||||
|
||||
doCheck = false;
|
||||
|
||||
|
||||
meta = with lib; {
|
||||
description = "Emulator for rapid prototyping of Software Defined Networks";
|
||||
license = {
|
||||
fullName = "Mininet 2.3.0d4 License";
|
||||
};
|
||||
homepage = https://github.com/mininet/mininet;
|
||||
maintainers = with maintainers; [ teto ];
|
||||
};
|
||||
}
|
@ -21734,6 +21734,8 @@ with pkgs;
|
||||
|
||||
scotch = callPackage ../applications/science/math/scotch { };
|
||||
|
||||
mininet = callPackage ../tools/virtualization/mininet { };
|
||||
|
||||
msieve = callPackage ../applications/science/math/msieve { };
|
||||
|
||||
weka = callPackage ../applications/science/math/weka { };
|
||||
|
@ -422,6 +422,8 @@ in {
|
||||
|
||||
monty = callPackage ../development/python-modules/monty { };
|
||||
|
||||
mininet-python = (toPythonModule (pkgs.mininet.override{ inherit python; })).py;
|
||||
|
||||
mpi4py = callPackage ../development/python-modules/mpi4py {
|
||||
mpi = pkgs.openmpi;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user