Hi all, I have one more follow-up to add back a missing switchd(8) config file, and to remove a bash invocation that I'd missed earlier.
Thanks, Ayaka Index: Makefile =================================================================== RCS file: /cvs/ports/net/mininet/Makefile,v retrieving revision 1.5 diff -u -p -u -r1.5 Makefile --- Makefile 16 Sep 2017 06:03:05 -0000 1.5 +++ Makefile 28 Nov 2017 20:02:13 -0000 @@ -3,7 +3,7 @@ COMMENT = emulator for rapid prototyping of software defined networks DISTNAME = mininet-0.0.20170813 -REVISION = 2 +REVISION = 3 GH_ACCOUNT = mininet GH_PROJECT = mininet GH_COMMIT = 87e26ef931ee6063332ceba77db472140f832d3a @@ -24,10 +24,6 @@ BUILD_DEPENDS = devel/help2man RUN_DEPENDS = net/socat \ net/iperf -MAKE_ENV = BINDIR=${PREFIX}/bin \ - MANDIR=${PREFIX}/man/man1 \ - PKGDIR=${MODPY_SITEPKG} \ - PYTHON=${MODPY_BIN} do-build: $(CC) ${WRKSRC}/mnexec.c -o ${WRKBUILD}/mnexec help2man -N -n "create a Mininet network." --no-discard-stderr \ @@ -45,6 +41,8 @@ pre-install: post-install: ${INSTALL_DATA_DIR} ${PREFIX}/share/examples/mininet + ${INSTALL_DATA} ${WRKSRC}/util/switchd.conf \ + ${PREFIX}/share/examples/mininet/switchd.mininet.conf-sample .for f in examples/README.md examples/*.py ${INSTALL_DATA} ${WRKSRC}/$f ${PREFIX}/share/examples/mininet .endfor Index: patches/patch-Makefile =================================================================== RCS file: patches/patch-Makefile diff -N patches/patch-Makefile --- patches/patch-Makefile 21 Aug 2017 18:47:12 -0000 1.1.1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,69 +0,0 @@ -$OpenBSD: patch-Makefile,v 1.1.1.1 2017/08/21 18:47:12 akoshibe Exp $ -Refactoring to make things buildable with both GNU and BSD make -and account for directory organization differences. -Index: Makefile ---- Makefile.orig -+++ Makefile -@@ -2,23 +2,23 @@ MININET = mininet/*.py - TEST = mininet/test/*.py - EXAMPLES = mininet/examples/*.py - MN = bin/mn --PYMN = python -B bin/mn -+PYMN = $(PYTHON) -B bin/mn - BIN = $(MN) - PYSRC = $(MININET) $(TEST) $(EXAMPLES) $(BIN) - MNEXEC = mnexec - MANPAGES = mn.1 mnexec.1 - P8IGN = E251,E201,E302,E202,E126,E127,E203,E226 --BINDIR = /usr/bin --MANDIR = /usr/share/man/man1 - DOCDIRS = doc/html doc/latex - PDF = doc/latex/refman.pdf - - CFLAGS += -Wall -Wextra - -+include config.mk -+ - all: codecheck test - - clean: -- rm -rf build dist *.egg-info *.pyc $(MNEXEC) $(MANPAGES) $(DOCDIRS) -+ rm -rf config.mk util/install.sh build dist *.egg-info *.pyc $(MNEXEC) $(MANPAGES) $(DOCDIRS) - - codecheck: $(PYSRC) - -echo "Running code check" -@@ -49,23 +49,27 @@ mnexec: mnexec.c $(MN) mininet/net.py - install: $(MNEXEC) $(MANPAGES) - install $(MNEXEC) $(BINDIR) - install $(MANPAGES) $(MANDIR) -- python setup.py install -+ $(PYTHON) setup.py install - -+uninstall: -+ rm -rf $(BINDIR)/$(MNEXEC) $(BINDIR)/mn $(PKGDIR)/mininet-*.egg -+ printf $(MANDIR)'/%s\n' $(MANPAGES) | xargs rm -+ - develop: $(MNEXEC) $(MANPAGES) - # Perhaps we should link these as well - install $(MNEXEC) $(BINDIR) - install $(MANPAGES) $(MANDIR) -- python setup.py develop -+ $(PYTHON) setup.py develop - - man: $(MANPAGES) - --mn.1: $(MN) -- PYTHONPATH=. help2man -N -n "create a Mininet network." \ -- --no-discard-stderr "$(PYMN)" -o $@ -+mn.1: -+ help2man -N -n "create a Mininet network." \ -+ --no-discard-stderr "$(PYTHON) $(MN)" -o $@ - --mnexec.1: mnexec -+mnexec.1: - help2man -N -n "execution utility for Mininet." \ -- -h "-h" -v "-v" --no-discard-stderr ./$< -o $@ -+ -h "-h" -v "-v" --no-discard-stderr ./$(MNEXEC) -o $@ - - .PHONY: doc - Index: patches/patch-configure =================================================================== RCS file: patches/patch-configure diff -N patches/patch-configure --- patches/patch-configure 21 Aug 2017 18:47:12 -0000 1.1.1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,43 +0,0 @@ -$OpenBSD: patch-configure,v 1.1.1.1 2017/08/21 18:47:12 akoshibe Exp $ -builds a config.mk (OS-dependent vars) used by Makefile -Index: configure ---- configure.orig -+++ configure -@@ -0,0 +1,37 @@ -+#!/bin/sh -+ -+# everything should be in /usr/local, but to keep things unchanged for Linux... -+ -+OS=`uname` -+case $OS in -+ *Linux*) -+ prefix='/usr' -+ mandir='/usr/share' -+ inst=$(pwd)/util/install-linux.sh -+ python=python -+ ;; -+ *FreeBSD*) -+ prefix='/usr/local' -+ mandir=$prefix -+ inst=$(pwd)/util/install-freebsd.sh -+ python=python -+ ;; -+ *OpenBSD*) -+ prefix='/usr/local' -+ mandir='/usr/share' -+ inst=$(pwd)/util/install-openbsd.sh -+ # could just link 'python2.7' to 'python' -+ python=python2.7 -+ ;; -+ *) -+ echo "Unknown platform: $OS" -+ exit 1 -+ ;; -+esac -+ -+ln -s $inst $(pwd)/util/install.sh -+ -+echo "BINDIR=$prefix/bin" > config.mk -+echo "MANDIR=$mandir/man/man1" >> config.mk -+echo "PKGDIR=$prefix/lib/python2.7/site-packages" >> config.mk -+echo "PYTHON=$python" >> config.mk Index: patches/patch-mininet_basenode_py =================================================================== RCS file: /cvs/ports/net/mininet/patches/patch-mininet_basenode_py,v retrieving revision 1.2 diff -u -p -u -r1.2 patch-mininet_basenode_py --- patches/patch-mininet_basenode_py 9 Sep 2017 21:18:30 -0000 1.2 +++ patches/patch-mininet_basenode_py 28 Nov 2017 20:02:13 -0000 @@ -5,7 +5,7 @@ processes. Index: mininet/basenode.py --- mininet/basenode.py.orig +++ mininet/basenode.py -@@ -0,0 +1,534 @@ +@@ -0,0 +1,538 @@ +""" +The base node object that other network nodes are based upon. A node implements +the lightweight virtualization needed to implement hosts and switches. @@ -25,7 +25,7 @@ Index: mininet/basenode.py + from mininet.openbsd.util import LO, moveIntf + +from mininet.log import info, error, warn, debug -+from mininet.util import ( quietRun, isShellBuiltin ) ++from mininet.util import quietRun +from mininet.moduledeps import pathCheck +from mininet.link import Link +from re import findall @@ -87,6 +87,10 @@ Index: mininet/basenode.py + # OS-specific virtualization method - overriden in system nodes + pass + ++ def isShellBuiltin( self, cmd ): ++ # Shell-specific check - overridden in system nodes ++ pass ++ + # Command support via shell process in namespace + def startShell( self, mnopts=None ): + "Start a shell process for running commands" @@ -219,7 +223,7 @@ Index: mininet/basenode.py + if len( cmd ) > 0 and cmd[ -1 ] == '&': + # print ^A{pid}\n so monitor() can set lastPid + cmd += ' printf "\\001%d\\012" $! ' -+ elif printPid and not isShellBuiltin( cmd ): ++ elif printPid and not self.isShellBuiltin( cmd ): + cmd = 'mnexec -p ' + cmd + self.write( cmd + '\n' ) + self.lastPid = None Index: patches/patch-mininet_node_py =================================================================== RCS file: /cvs/ports/net/mininet/patches/patch-mininet_node_py,v retrieving revision 1.3 diff -u -p -u -r1.3 patch-mininet_node_py --- patches/patch-mininet_node_py 16 Sep 2017 06:03:05 -0000 1.3 +++ patches/patch-mininet_node_py 28 Nov 2017 20:02:13 -0000 @@ -4,7 +4,7 @@ specific Node objects. Index: mininet/node.py --- mininet/node.py.orig +++ mininet/node.py -@@ -53,602 +53,45 @@ Future enhancements: +@@ -53,602 +53,44 @@ Future enhancements: """ import os @@ -38,8 +38,7 @@ Index: mininet/node.py from mininet.log import info, error, warn, debug -from mininet.util import ( quietRun, errRun, errFail, moveIntf, isShellBuiltin, - numCores, retry, mountCgroups ) -+from mininet.util import ( quietRun, errRun, errFail, isShellBuiltin, -+ retry ) ++from mininet.util import ( quietRun, errRun, errFail, retry ) from mininet.moduledeps import moduleDeps, pathCheck, TUN -from mininet.link import Link, Intf, TCIntf, OVSIntf +from mininet.link import Link, TCIntf, OVSIntf @@ -632,7 +631,7 @@ Index: mininet/node.py "CPU limited host" def __init__( self, name, sched='cfs', **kwargs ): -@@ -702,8 +145,8 @@ class CPULimitedHost( Host ): +@@ -702,8 +144,8 @@ class CPULimitedHost( Host ): args: Popen() args, single list, or string kwargs: Popen() keyword args""" # Tell mnexec to execute command in our cgroup @@ -643,7 +642,7 @@ Index: mininet/node.py # if our cgroup is not given any cpu time, # we cannot assign the RR Scheduler. if self.sched == 'rt': -@@ -739,7 +182,7 @@ class CPULimitedHost( Host ): +@@ -739,7 +181,7 @@ class CPULimitedHost( Host ): quietRun( 'chrt -p %s %s' % ( self.rtprio, self.pid ) ) result = quietRun( 'chrt -p %s' % self.pid ) firstline = result.split( '\n' )[ 0 ] @@ -652,7 +651,7 @@ Index: mininet/node.py if lastword != 'SCHED_RR': error( '*** error: could not assign SCHED_RR to %s\n' % self.name ) return lastword -@@ -837,6 +280,105 @@ class CPULimitedHost( Host ): +@@ -837,6 +279,105 @@ class CPULimitedHost( Host ): cls.inited = True @@ -758,7 +757,7 @@ Index: mininet/node.py # Some important things to note: # # The "IP" address which setIP() assigns to the switch is not -@@ -873,7 +415,7 @@ class Switch( Node ): +@@ -873,7 +414,7 @@ class Switch( Node ): self.opts = opts self.listenPort = listenPort if not self.inNamespace: @@ -767,7 +766,7 @@ Index: mininet/node.py def defaultDpid( self, dpid=None ): "Return correctly formatted dpid from dpid or switch name (s1 -> 1)" -@@ -1033,7 +575,7 @@ class UserSwitch( Switch ): +@@ -1033,7 +574,7 @@ class UserSwitch( Switch ): class OVSSwitch( Switch ): "Open vSwitch switch. Depends on ovs-vsctl." @@ -776,7 +775,7 @@ Index: mininet/node.py inband=False, protocols=None, reconnectms=1000, stp=False, batch=False, **params ): """name: name for switch -@@ -1072,8 +614,8 @@ class OVSSwitch( Switch ): +@@ -1072,8 +613,8 @@ class OVSSwitch( Switch ): 'Make sure that Open vSwitch is installed, ' 'that ovsdb-server is running, and that\n' '"ovs-vsctl show" works correctly.\n' @@ -787,7 +786,7 @@ Index: mininet/node.py exit( 1 ) version = quietRun( 'ovs-vsctl --version' ) cls.OVSVersion = findall( r'\d+\.\d+', version )[ 0 ] -@@ -1153,7 +695,7 @@ class OVSSwitch( Switch ): +@@ -1153,7 +694,7 @@ class OVSSwitch( Switch ): opts = ( ' other_config:datapath-id=%s' % self.dpid + ' fail_mode=%s' % self.failMode ) if not self.inband: @@ -796,7 +795,7 @@ Index: mininet/node.py if self.datapath == 'user': opts += ' datapath_type=netdev' if self.protocols and not self.isOldOVS(): -@@ -1239,7 +781,7 @@ class OVSSwitch( Switch ): +@@ -1239,7 +780,7 @@ class OVSSwitch( Switch ): deleteIntfs: delete interfaces? (True)""" self.cmd( 'ovs-vsctl del-br', self ) if self.datapath == 'user': @@ -805,7 +804,7 @@ Index: mininet/node.py super( OVSSwitch, self ).stop( deleteIntfs ) @classmethod -@@ -1259,9 +801,88 @@ class OVSSwitch( Switch ): +@@ -1259,9 +800,88 @@ class OVSSwitch( Switch ): return switches @@ -895,7 +894,7 @@ Index: mininet/node.py class OVSBridge( OVSSwitch ): "OVSBridge is an OVSSwitch in standalone/bridge mode" -@@ -1386,7 +1007,7 @@ class Controller( Node ): +@@ -1386,7 +1006,7 @@ class Controller( Node ): listening = self.cmd( "echo A | telnet -e A %s %d" % ( self.ip, self.port ) ) if 'Connected' in listening: @@ -904,24 +903,19 @@ Index: mininet/node.py pstr = ':%d ' % self.port clist = servers[ 0:1 ] + [ s for s in servers if pstr in s ] raise Exception( "Please shut down the controller which is" -@@ -1405,9 +1026,13 @@ class Controller( Node ): +@@ -1405,7 +1025,10 @@ class Controller( Node ): self.execed = False def stop( self, *args, **kwargs ): - "Stop controller." -- self.cmd( 'kill %' + self.command ) -- self.cmd( 'wait %' + self.command ) + """ + Stop controller. Find processes associated with the command, and kill -+ them. ++ them. + """ -+ pids = " ".join( self.cmd( 'pgrep ' + self.command ).split( '\n' ) ) -+ self.cmd( 'pkill ' + pids + ' 2>/dev/null' ) -+ self.cmd( 'wait ' + pids ) + self.cmd( 'kill %' + self.command ) + self.cmd( 'wait %' + self.command ) super( Controller, self ).stop( *args, **kwargs ) - - def IP( self, intf=None ): -@@ -1470,12 +1095,19 @@ class NOX( Controller ): +@@ -1470,12 +1093,19 @@ class NOX( Controller ): class Ryu( Controller ): "Controller to run Ryu application" @@ -943,7 +937,7 @@ Index: mininet/node.py if not ryuArgs: warn( 'warning: no Ryu modules specified; ' 'running simple_switch only\n' ) -@@ -1538,7 +1170,50 @@ class RemoteController( Controller ): +@@ -1538,7 +1168,50 @@ class RemoteController( Controller ): else: return True Index: patches/patch-mininet_openbsd_node_py =================================================================== RCS file: /cvs/ports/net/mininet/patches/patch-mininet_openbsd_node_py,v retrieving revision 1.2 diff -u -p -u -r1.2 patch-mininet_openbsd_node_py --- patches/patch-mininet_openbsd_node_py 9 Sep 2017 21:18:30 -0000 1.2 +++ patches/patch-mininet_openbsd_node_py 28 Nov 2017 20:02:13 -0000 @@ -3,7 +3,7 @@ $OpenBSD: patch-mininet_openbsd_node_py, Index: mininet/openbsd/node.py --- mininet/openbsd/node.py.orig +++ mininet/openbsd/node.py -@@ -0,0 +1,150 @@ +@@ -0,0 +1,161 @@ +""" +Node: rdomain(4) based node. This is somewhat more similar to Linux's network +namespace moreso than a jail since it creates a separate network address space @@ -33,6 +33,10 @@ Index: mininet/openbsd/node.py + one pair interface if inNamespace=True.""" + + index=1 # rdomain ID, can only go to 255 ++ builtins='. : [ alias bg break builtin cd command continue echo eval exec' \ ++ ' exit export false fc fg getopts jobs kill let print pwd read' \ ++ ' readonly return set shift suspend test times trap true typeset' \ ++ ' ulimit umask unalias unset wait whence' + + def __init__( self, name, inNamespace=True, **params ): + BaseNode.__init__( self, name, inNamespace, **params ) @@ -69,6 +73,13 @@ Index: mininet/openbsd/node.py + '-is', 'mininet:' + self.name ] + return Popen( cmd, stdin=slave, stdout=slave, stderr=slave, + close_fds=False ) ++ ++ def isShellBuiltin( self, cmd ): ++ "Return True if cmd is a builtin." ++ space = cmd.find( ' ' ) ++ if space > 0: ++ cmd = cmd[ :space] ++ return cmd in Node.builtins + + def mountPrivateDirs( self ): + "mount private directories" Index: patches/patch-mininet_util_py =================================================================== RCS file: /cvs/ports/net/mininet/patches/patch-mininet_util_py,v retrieving revision 1.1.1.1 diff -u -p -u -r1.1.1.1 patch-mininet_util_py --- patches/patch-mininet_util_py 21 Aug 2017 18:47:12 -0000 1.1.1.1 +++ patches/patch-mininet_util_py 28 Nov 2017 20:02:13 -0000 @@ -48,10 +48,21 @@ Index: mininet/util.py cmd = [ str( arg ) for arg in cmd ] elif isinstance( cmd, list ) and shell: cmd = " ".join( arg for arg in cmd ) -@@ -145,55 +144,6 @@ def isShellBuiltin( cmd ): +@@ -134,66 +133,6 @@ def quietRun( cmd, **kwargs ): - isShellBuiltin.builtIns = None + # pylint: enable=maybe-no-member +-def isShellBuiltin( cmd ): +- "Return True if cmd is a bash builtin." +- if isShellBuiltin.builtIns is None: +- isShellBuiltin.builtIns = quietRun( 'bash -c enable' ) +- space = cmd.find( ' ' ) +- if space > 0: +- cmd = cmd[ :space] +- return cmd in isShellBuiltin.builtIns +- +-isShellBuiltin.builtIns = None +- -# Interface management -# -# Interfaces are managed as strings which are simply the @@ -104,7 +115,7 @@ Index: mininet/util.py def retry( retries, delaySecs, fn, *args, **keywords ): """Try something several times before giving up. n: number of times to retry -@@ -208,33 +158,6 @@ def retry( retries, delaySecs, fn, *args, **keywords ) +@@ -208,33 +147,6 @@ def retry( retries, delaySecs, fn, *args, **keywords ) error( "*** gave up after %i retries\n" % tries ) exit( 1 ) @@ -138,7 +149,7 @@ Index: mininet/util.py # Support for dumping network def dumpNodeConnections( nodes ): -@@ -403,73 +326,6 @@ def pmonitor(popens, timeoutms=500, readline=True, +@@ -403,73 +315,6 @@ def pmonitor(popens, timeoutms=500, readline=True, else: yield None, '' @@ -212,7 +223,7 @@ Index: mininet/util.py def natural( text ): "To sort sanely/alphabetically: sorted( l, key=natural )" def num( s ): -@@ -480,16 +336,6 @@ def natural( text ): +@@ -480,16 +325,6 @@ def natural( text ): def naturalSeq( t ): "Natural sort key function for sequences" return [ natural( x ) for x in t ] Index: patches/patch-util_install-openbsd_sh =================================================================== RCS file: patches/patch-util_install-openbsd_sh diff -N patches/patch-util_install-openbsd_sh --- patches/patch-util_install-openbsd_sh 21 Aug 2017 18:47:12 -0000 1.1.1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,110 +0,0 @@ -$OpenBSD: patch-util_install-openbsd_sh,v 1.1.1.1 2017/08/21 18:47:12 akoshibe Exp $ - -Index: util/install-openbsd.sh ---- util/install-openbsd.sh.orig -+++ util/install-openbsd.sh -@@ -0,0 +1,104 @@ -+#!/bin/sh -+ -+# Mininet install script with just the bits that are currently supported. -+# It follows the logic/contents of `install.sh`. -+ -+dist=$(uname -s) -+release=$(uname -r) -+ -+if [ "${dist}" = "OpenBSD" ]; then -+ install='doas pkg_add -vI' -+ remove='doas pkg_delete' -+ pkginst=${install} -+else -+ printf '%s\n' "This version of the install script is for OpenBSD," \ -+ "but you are using ${dist} - try running './configure'" -+ exit 1 -+fi -+ -+# Get directory containing mininet folder -+MININET_DIR=$( CDPATH= cd -- "$( dirname -- "$0" )/../.." && pwd -P ) -+ -+# install everything -+all () { -+ mn_deps -+} -+ -+# base (non-OpenFlow) bits - Mininet Python bits, dependencies -+mn_deps () { -+ # check for OpenFlow support - 6.1 and later. Technically it works but -+ # will only be able to do non-OFP networks. -+ if [ $( expr ${release} '<=' 6.1 ) -eq 0 ]; then -+ printf '%s\n' \ -+ "Detected release:${release}"\ -+ "Warning - OpenFlow is only supported by releases 6.1 and newer"\ -+ "Retry after updating to a newer release" -+ exit 1 -+ fi -+ -+ $install python-2.7.13p2 socat iperf help2man py-setuptools pyflakes \ -+ pylint pep8 py-pexpect -+ -+ printf '%s\n' "Installing Mininet core" -+ cur=$(pwd -P) -+ cd ${MININET_DIR}/mininet -+ doas make install -+ doas cp util/switchd.conf /etc/switchd.mininet.conf -+ cd ${cur} -+} -+ -+mn_undo () { -+ printf '%s\n' "Uninstalling Mininet core" -+ cur=$(pwd -P) -+ cd ${MININET_DIR}/mininet -+ doas make uninstall -+ doas rm /etc/switchd.mininet.conf -+ cd ${cur} -+} -+ -+# Install RYU. `pip install ryu` should actually be sufficient. -+#ryu () { -+# printf '%s\n' "Installing RYU..." -+# -+# $install python py27-setuptools py27-eventlet py27-routes \ -+# py27-webob py27-paramiko py27-pip py27-msgpack-python -+# pip install oslo.config tinyrpc ovs -+# -+# # fetch RYU -+# cd $MININET_DIR -+# git clone git://github.com/osrg/ryu.git ryu -+# cd ryu -+# -+# # install ryu -+# doas python ./setup.py install -+#} -+ -+usage () { -+ printf '%s\n' \ -+ "" \ -+ "Usage: $(basename $0) [-anh]" \ -+ "" \ -+ "options:" \ -+ " -a: (default) install (A)ll packages" \ -+ " -h: print this (H)elp message" \ -+ " -n: install Mini(N)et dependencies + core files" \ -+ " -u: (u)ninstall Mininet core files" \ -+ " -y: install R(y)u Controller" -+ exit 2 -+} -+ -+if [ $# -eq 0 ]; then -+ all -+else -+ while getopts 'ahnu' OPTION; do -+ case $OPTION in -+ a) all ;; -+ h) usage ;; -+ n) mn_deps ;; -+ u) mn_undo ;; -+ # y) ryu ;; #eventually, maybe -+ ?) usage ;; -+ esac -+ done -+ shift $(($OPTIND - 1)) -+fi Index: pkg/DESCR =================================================================== RCS file: /cvs/ports/net/mininet/pkg/DESCR,v retrieving revision 1.1.1.1 diff -u -p -u -r1.1.1.1 DESCR --- pkg/DESCR 21 Aug 2017 18:47:12 -0000 1.1.1.1 +++ pkg/DESCR 28 Nov 2017 20:02:13 -0000 @@ -1,6 +1,6 @@ Mininet creates a realistic virtual network, running real kernel, switch and application code, on a single machine (VM, cloud or native), in -seconds, with a single command +seconds, with a single command. Because you can easily interact with your network using the Mininet CLI (and API), customize it, share it with others, or deploy it on real Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/net/mininet/pkg/PLIST,v retrieving revision 1.3 diff -u -p -u -r1.3 PLIST --- pkg/PLIST 16 Sep 2017 06:03:05 -0000 1.3 +++ pkg/PLIST 28 Nov 2017 20:02:13 -0000 @@ -94,6 +94,8 @@ share/examples/mininet/scratchnet.py share/examples/mininet/scratchnetuser.py share/examples/mininet/simpleperf.py share/examples/mininet/sshd.py +share/examples/mininet/switchd.mininet.conf-sample +@sample ${SYSCONFDIR}/switchd.mininet.conf share/examples/mininet/tree1024.py share/examples/mininet/treeping64.py share/examples/mininet/vlanhost.py