Advertisement
yoursunny

NFD integ Mininet 20151103

Nov 12th, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.64 KB | None | 0 0
  1. # integ.py
  2.  
  3. #!/usr/bin/python2
  4.  
  5. import shutil
  6.  
  7. from mininet.log import setLogLevel
  8. from mininet.net import Mininet
  9. from mininet.cli import CLI
  10.  
  11. def run():
  12.     print 'Upload files.'
  13.     shutil.rmtree('/tmp/mn-integ', True)
  14.     for name in ['A', 'B', 'C', 'D']:
  15.         try:
  16.             shutil.copytree('/usr/local/etc/ndn', '/tmp/mn-integ/%s/usr/local/etc/ndn' % name)
  17.         except:
  18.             pass
  19.         try:
  20.             shutil.copytree('.ndn', '/tmp/mn-integ/%s/root/.ndn' % name)
  21.         except:
  22.             pass
  23.         try:
  24.             shutil.copytree('integration-tests', '/tmp/mn-integ/%s/root/integration-tests' % name)
  25.         except:
  26.             pass
  27.         try:
  28.             shutil.copyfile('multi-host.conf', '/tmp/mn-integ/%s/root/integration-tests/multi-host.conf' % name)
  29.         except:
  30.             pass
  31.  
  32.     print 'Build network.'
  33.     net = Mininet()
  34.     net.addController()
  35.     net.addSwitch('lanABC', dpid='0')
  36.     privateDirs = [
  37.       ('/usr/local/etc/ndn', '/tmp/mn-integ/%(name)s/usr/local/etc/ndn'),
  38.       ('/var/log/ndn', '/tmp/mn-integ/%(name)s/var/log/ndn'),
  39.       ('/var/run', '/tmp/mn-integ/%(name)s/var/run'),
  40.       ('/root', '/tmp/mn-integ/%(name)s/root')
  41.     ]
  42.     net.addHost('A', privateDirs=privateDirs)
  43.     net.addHost('B', privateDirs=privateDirs)
  44.     net.addHost('C', privateDirs=privateDirs)
  45.     net.addHost('D', privateDirs=privateDirs)
  46.     net.addHost('R')
  47.     linkABCA = net.addLink('lanABC', 'A')
  48.     linkABCB = net.addLink('lanABC', 'B')
  49.     linkABCC = net.addLink('lanABC', 'C')
  50.     linkRA = net.addLink('R', 'A')
  51.     linkRD = net.addLink('R', 'D')
  52.     net.start()
  53.  
  54.     print 'Setup IPv4.'
  55.     net['A'].setIP('192.168.1.1', 24, linkABCA.intf2)
  56.     net['B'].setIP('192.168.1.2', 24, linkABCB.intf2)
  57.     net['C'].setIP('192.168.1.3', 24, linkABCC.intf2)
  58.     net['R'].setIP('192.168.2.1', 24, linkRA.intf1)
  59.     net['A'].setIP('192.168.2.2', 24, linkRA.intf2)
  60.     net['R'].setIP('192.168.3.1', 24, linkRD.intf1)
  61.     net['D'].setIP('192.168.3.2', 24, linkRD.intf2)
  62.     net['A'].cmd('ip route add 192.168.3.0/24 via 192.168.2.1')
  63.     net['D'].cmd('ip route add 192.168.2.0/24 via 192.168.3.1')
  64.     net['R'].cmd('sysctl net.ipv4.ip_forward=1')
  65.  
  66.     print 'Setup IPv6.'
  67.     net['A'].cmd('ip addr add fd01::1/64 dev %s' % linkABCA.intf2)
  68.     net['B'].cmd('ip addr add fd01::2/64 dev %s' % linkABCB.intf2)
  69.     net['C'].cmd('ip addr add fd01::3/64 dev %s' % linkABCC.intf2)
  70.     net['R'].cmd('ip addr add fd02::1/64 dev %s' % linkRA.intf1)
  71.     net['A'].cmd('ip addr add fd02::2/64 dev %s' % linkRA.intf2)
  72.     net['R'].cmd('ip addr add fd03::1/64 dev %s' % linkRD.intf1)
  73.     net['D'].cmd('ip addr add fd03::2/64 dev %s' % linkRD.intf2)
  74.     net['A'].cmd('ip -6 route add fd03::/64 via fd02::1')
  75.     net['D'].cmd('ip -6 route add fd02::/64 via fd03::1')
  76.     net['R'].cmd('sysctl net.ipv6.conf.all.forwarding=1')
  77.  
  78.     print 'Configure SSH.'
  79.     net['A'].pexec('/usr/bin/ssh-keygen', '-N', '', '-f', '/root/.ssh/id_rsa')
  80.     sshConfig = open('/tmp/mn-integ/A/root/.ssh/config', 'w')
  81.     sshConfig.write('StrictHostKeyChecking no')
  82.     sshConfig.close()
  83.     sshdProcesses = dict()
  84.     for name in ['B', 'C', 'D', 'R']:
  85.         net[name].cmd('mkdir -p /var/run/sshd')
  86.         net[name].cmd('mkdir -p /root/.ssh')
  87.         try:
  88.             shutil.copyfile('/tmp/mn-integ/A/root/.ssh/id_rsa.pub', '/tmp/mn-integ/%s/root/.ssh/authorized_keys' % name)
  89.         except:
  90.             pass
  91.         sshdProcesses[name] = net[name].popen('/usr/sbin/sshd', '-D', stdout=None, stderr=None)
  92.  
  93.     for host in net.hosts:
  94.         host.cmd('export HOME=/root')
  95.         host.cmd('cd $HOME/integration-tests')
  96.  
  97.     CLI(net)
  98.  
  99.     for process in sshdProcesses.itervalues():
  100.         process.kill()
  101.         process.wait()
  102.     net.stop()
  103.  
  104. if __name__ == '__main__':
  105.     setLogLevel('info')
  106.     run()
  107.  
  108.  
  109. # multi-host.conf
  110.  
  111. """
  112. # This is configuration for multiple hosts testing scenarios.
  113. # Tests that involves multiple hosts should be run on host A from this topology:
  114. # B[1]---|
  115. #        +---[1]A[2]---[1]R[2]---[1]D
  116. # C[1]---|
  117. #
  118. # CTRL_* are used to ssh into other hosts. (eg. `ssh $CTRL_B` gets you a shell on B)
  119. # IP4_* (and IP6_* if needed) are used to send experiment packets (eg. `nfdc create udp4://$IP4_C1` creates a tunnel).
  120. #
  121. # suggested subnet mask:
  122. # IPv4: /24
  123. # IPv6: /64
  124. #
  125. CTRL_B=192.168.1.2
  126. CTRL_C=192.168.1.3
  127. CTRL_D=192.168.3.2
  128. CTRL_R=192.168.2.1
  129. IP4_A1=192.168.1.1
  130. IP4_B1=192.168.1.2
  131. IP4_C1=192.168.1.3
  132. IP4_A2=192.168.2.2
  133. IP4_R1=192.168.2.1
  134. IP4_R2=192.168.3.1
  135. IP4_D1=192.168.3.2
  136. IP6_A1=fd01::1
  137. IP6_B1=fd01::2
  138. IP6_C1=fd01::3
  139. IP6_A2=fd02::2
  140. IP6_R1=fd02::1
  141. IP6_R2=fd03::1
  142. IP6_D1=fd03::2
  143. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement