#やりたいこと
Mininetを使用し、ダンベルトポロジーを構築する。
#困っていること
Pythonでトポロジーを構築するコードを書きました。そこで、pingallを実行したところpingが通りませんでした。
私が書いたコードを以下に示します。
また,pingallの結果をコードの以下に示します。
結果よりSwitch間では、pingが通るのですが、host間でpingが通っていません。
pingが通らない原因と解消方法を教えてください。
よろしくお願いします。
python
1#!/usr/bin/python 2 3from mininet.topo import Topo 4from mininet.net import Mininet 5from mininet.node import CPULimitedHost,OVSController 6from mininet.link import TCLink 7from mininet.util import dumpNodeConnections 8from mininet.log import setLogLevel 9from mininet.cli import CLI 10 11import time 12import subprocess 13import sys 14import threading 15import csv 16from argparse import ArgumentParser 17 18from time import sleep, time 19import re 20 21pid = None 22 23def get_option(): 24 parser = ArgumentParser(description='explanation of program') 25 26 parser.add_argument('-c', '--cc', help="name of cc schemes", type=str, default='none') 27 28 return parser.parse_args() 29 30 31 32class SingleSwitchTopo(Topo): 33 "Single switch connected to n hosts." 34 def __init__(self, n=2, **opts): 35 Topo.__init__(self, **opts) 36 hosts=[] 37 switchs=[] 38 39 for s in range(2): 40 switchs.append(self.addHost('s%s' % (s + 1))) 41 # self.addLink(switchs[0], switchs[1], intfName1='s1-eth0', intfName2='s2-eth0', 42 # bw=100, delay='5ms', loss=0,max_queue_size=79,use_tbf=True) 43 self.addLink(switchs[0], switchs[1], 44 bw=100, delay='5ms', loss=0,max_queue_size=79,use_tbf=True) 45 46 for h in range(n): 47 print(h) 48 # Each host gets 50%/n of system CPU 49 hosts.append(self.addHost('h%s' % (2*h+1))) 50 hosts.append(self.addHost('h%s' % (2*(h + 1)))) 51 # 10 Mbps, 5ms delay, 10% loss, 1000 packet queue 52 53 # self.addLink(hosts[2*(h)], switchs[0], intfName1='h'+str(2*(h)+1)+'-eth0', intfName2='s1-eth'+str(h+1), 54 # bw=100, delay='5ms', loss=0,max_queue_size=1000,use_tbf=True) 55 56 # self.addLink(hosts[2*(h)+1], switchs[1], intfName1='h'+str(2*(h+1))+'-eth0', intfName2='s2-eth'+str(h+1), 57 # bw=100, delay='5ms', loss=0,max_queue_size=1000,use_tbf=True) 58 self.addLink(hosts[2*(h)], switchs[0], 59 bw=100, delay='5ms', loss=0,max_queue_size=1000,use_tbf=True) 60 61 self.addLink(hosts[2*(h)+1], switchs[1], 62 bw=100, delay='5ms', loss=0,max_queue_size=1000,use_tbf=True) 63 64 65 66 67 68def perfTest(cc): 69 global pid 70 "Create network and run simple performance test" 71 topo = SingleSwitchTopo(n=2) 72 net = Mininet(topo=topo, 73 link=TCLink,controller=None) 74 h1, h2 ,s1 ,s2= net.get('h1', 'h2', 's1', 's2') 75 76 #h1_tx = h1.cmd('ip l set dev h1-eth0 txqueue 1' ) 77 #h2_tx = h2.cmd('ip l set dev h2-eth0 txqueue 1' ) 78 79 net.start() 80 net.pingAll() 81 CLI(net) 82 h1_eth = h1.cmd('ethtool -K h1-eth0 tx off sg off tso off ufo off' ) 83 h2_eth = h2.cmd('ethtool -K h2-eth0 tx off sg off tso off ufo off' ) 84 85 thread2 = threading.Thread(target=monitor_qlen, args=(h2,)) 86 thread2.setDaemon(True) 87 thread2.start() 88 dumpNodeConnections(net.hosts) 89 90 # h1_dmp = h1.popen('tcpdump', '-x', '-tt', '-nn', '-Z', 'root', '-B', '1000', '-w', 'dump/sender.pcap') 91 # h2_dmp = h2.popen('tcpdump', '-x', '-tt', '-nn', '-Z', 'root', '-B', '1000', '-w', 'dump/receiver.pcap') 92 print(s1.IP(),s2.IP()) 93 94 h2_pid = h2.popen('iperf', '-s', '-p', '10001') 95 h1_pid = h1.popen(['iperf', '-c', h2.IP(), '-p', '10001', '-t', '60','-i', '1','-Z', cc],stdout=subprocess.PIPE,stderr = subprocess.STDOUT) 96 #net.iperf((h1,h2)) 97 try: 98 for line in iter(h1_pid.stdout.readline, b''): 99 print(line.rstrip().decode('utf8')) 100 sys.stdout.flush() 101 102 finally: 103 104 h1_pid.kill() 105 h2_pid.kill() 106 # h1_dmp.kill() 107 # h2_dmp.kill() 108 net.stop() 109 110 111 112if __name__ == '__main__': 113 114 args = get_option() 115 setLogLevel('info') 116 117 perfTest(args.cc) 118 sys.exit() 119
*** Ping: testing ping reachability h1 -> X X X X X h2 -> X X X X X h3 -> X X X X X h4 -> X X X X X s1 -> X X X X s2 s2 -> X X X X s1 *** Results: 93% dropped (2/30 received)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。