3
0
Fork 0
forked from mirrors/nixpkgs

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:
Matthieu Coudron 2018-11-22 08:33:10 +09:00 committed by Jörg Thalheim
parent 494e290dce
commit 35f74c3608
5 changed files with 92 additions and 0 deletions

View file

@ -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

View 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 ];
};
}

View 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 ];
};
}

View file

@ -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 { };

View file

@ -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;
};