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.wip/yesman
parent
494e290dce
commit
35f74c3608
@ -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 ]; |
||||
}; |
||||
} |
@ -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 ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue