lab exercise 3 (part a introduction to mininet

Post on 15-Oct-2021

13 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

LabExercise3(partA)IntroductiontoMininet

Objectives:• LearnthebasiccommandsinMininet• LearnhowtocreatebasicnetworktopologiesinMininet• LearnMininetAPI

Marks:This exercise forms the first part of lab exercise 3. The second part (part B) will be part of nextweek’s lab. Both parts together will comprise 15 marks. Only selected exercises will be marked.However,studentsmustsubmitanswersforallexercises.

Deadline:Beforeyourscheduledlabnextweek.Soyougetoneweektoworkonthislab.Forexample,ifyougo to the Monday 12 noon lab, then your submission is due before 12 noon on the followingMonday. You can submit asmany times as youwish before the deadline. A later submissionwilloverridetheearliersubmission,somakesureyousubmitthecorrectfile.Donotleaveuntilthelastmomenttosubmit,astheremaybetechnicalorcommunicationserrorandyouwillnothavetimetorectifyit.

LatePenalty:Latepenaltywillbeappliedasfollows:

• 1dayafterdeadline:20%reduction• 2daysafterdeadline:40%reduction• 3daysafterdeadline:60%reduction• 4ormoredayslate:NOTaccepted

Notethattheabovepenaltyisappliedtoyourfinalmark.Forexample,ifyousubmityourlabwork2dayslateandyourscoreonthelabis8,thenyourfinalmarkwillbe8-3.2(40%penalty)=4.8.

SubmissionInstructions:Submit a PDF document lab3a.pdf with answers to all questions for all exercises. Include allsupportingdocumentssuchastopologyfilesforQuestions5and6(*.py).Createatararchiveofallfiles called lab3a.tar. Submit thearchiveusinggive.Clickon the submission linkat the topof thepage.Maxfilesizeforsubmissionis3MB.

OriginalWorkOnly:Youarestronglyencouragedtodiscussthequestionswithotherstudentsinyourlab.However,eachstudentmustsubmithisorherownwork.Youmayrefertothereferencematerialandalsoconductyourownresearchtoanswerthequestions.

2

Part1:BasicCommandsinMininetInthefirststep,westartasimplenetworktopologybyrunningthefollowingcommand:

The above command creates the default topology in Mininet (known as theminimal topology),whichincludesoneOpenFlow1kernelswitchconnectedtotwohosts,plustheOpenFlowreference.Thistopologycouldalsobementionedonthecommandlineusingoption--topo=minimalwiththemncommand.Onceyouruntheabovecommand,allfourentities(twohosts,oneswitch,andonecontroller)arerunningintheVMandtheMininetCLIcomesup.YoucanrunthehelpcommandtoseethelistofcommandsintheCLI.Intherestofthissection,youwillpracticethebasiccommandsinMininet.

Displaynodes:

Formoredetailedinformationaboutthenodesinthenetwork,usedump.

Displaytopology:

Simplecommandswithinanode:

IfthefirststringtypedintotheMininetCLI isahost,switchorcontrollername,thecorrespondingcommandisexecutedonthatnode.Forexample,runthefollowingcommandonhosth1toshowitsnetworkinterfaces.

1OpenFlowiscommunicationprotocolbetweenswitchesandcontrollers.WedonotneedtoknowthedetailsoftheOpenFlowprotocolinthiscourse.

Notation: Intheexamplesbelow,wehaveusedthe$signtorepresentLinuxcommandsthatshouldbe typedat theshellprompt,mininet> toshowMininetcommandsthatshouldbetypedatMininet’sCLI(commandlineinterface),and#toshowLinuxcommandsthataretypedatarootshellprompt.Ineachcase,youshouldonlytypethenameofthecommandandthenpressreturn.Theactualpromptmaylookverydifferentonyourcomputer(e.g.itmaycontainthecomputer'shostname,oryourusername,orthecurrentdirectoryname).Thecommandsthatyouaresupposedtotypeareinthisboldfont.

$ sudo mn

mininet> nodes

mininet> net

mininet> h1 ifconfig -a

3

Intheabovecommand,youcanreplaceh1withs1toseethedetailsoftheswitch’sinterfaces.Also,foralistofprocessesinahostyoucanrunh1ps–a.

Notethataswitchisalayer2packetswitch(alsoknownasabridge).Wewillexamineswitchesindetailswhenwestudyaboutthelinklayer.

Question1:DrawtheMininetminimaltopologyandincludetheIPandMACaddressesforhostsandtheswitch.Towhichswitchportsarethehostsandcontrollerconnected?

Testconnectivitybetweenhosts:

Inordertopinghost1fromhost2,runthefollowingcommand:

Question2:Examinethepingtimeforallfivetriesintheabovecommand.Whatisthepingtimeforeachtry?

Question3:Youshouldseethatthepingtimeforthefirsttryis largerthanthenexttries.Howdoyouexplainthisobservation?

AsimplewaytotesttheconnectivityofallnodesintheMininetCLIistorunthepingallcommand,whichdoesanall-pairsping.

XTermdisplayTodisplayanxtermforhosth1, runthe followingcommand.Thiswillbeuseful toruncommandswithinahostorswitch.

PythonInterpreterIf the first partof a command inMininet ispy, then theCLI interprets the commandas aPythoncommand. This helps you to manipulate the network objects, such as hosts, switches, andcontrollers,usingtheCLI.HereisanexamplewhichdisplaystheIPaddressofhosth1.

ExitandcleanupForexiting fromtheMininetCLI, runcommandexit. It is strongly recommended tocleanupafterexitingbyrunningcommandsudomn–c.

NOTE: PLEASE REMEMBER TOMOUNT YOUR CSE HOME DIRECTORY IN THE VM AND TO SAVEYOURWORKINYOURHOMEDIRECTORYBEFOREQUITING.

mininet> h1 ping –c5 h2

mininet> xterm h1

mininet> py h1.IP()

4

Part2:CustomTopologiesMininet supports a simple Python API to create custom network topologies. You can create yourcustomtopologybywritingafewlinesofPythoncode.Forexample,Figure1showsatopologywithtwoswitchesandfourhosts.Figure2implementsthetopologyusingtheMininetPythonAPI. Thecodeconsistsofaclass,namedMyFirstTopowhichextendstheTopoclassprovidedbytheAPI.Wesuggest thatyouSSH intoyourmininetVMso thatyoucanuseaGUI texteditor suchasgeditoremacs (see instructions in the Mininet Introduction document). Save the source code in a file,namedmyfirsttopo.py in your (mounted)CSEhomedirectory. You candownload the source codefromhere:myfirsttopo.py.ChangetheworkingdirectorytoyourCSEhomedirectoryandtype:

Question4:DrawFigure1andlabeltheIPandMACaddressforthehosts.AlsolabeltheinterfacenamesandMACaddressoftheswitchportsthatareconnectedtothehosts.

Switch2(s2)Switch1(s1)

Host1(h1)

Host2(h2)

Host3(h3)

Host4(h4) Figure1Asamplenetworktopology(myfirsttopo.py)

Figure2SourcecodeforthecustomtopologypresentedinFigure1.

mininet> sudo mn --custom myfirsttopo.py --topo myfirsttopo

1. frommininet.topoimportTopo2. 3. classMyFirstTopo(Topo):4. "Simpletopologyexample."5. def__init__(self):6. "Createcustomtopo."7. #Initializetopology8. Topo.__init__(self)9. #Addhostsandswitches10. h1=self.addHost('h1')11. h2=self.addHost('h2')12. h3=self.addHost('h3')13. h4=self.addHost('h4')14. leftSwitch=self.addSwitch('s1')15. rightSwitch=self.addSwitch('s2')16. #Addlinks17. self.addLink(h1,leftSwitch)18. self.addLink(h2,leftSwitch)19. self.addLink(leftSwitch,rightSwitch)20. self.addLink(rightSwitch,h3)21. self.addLink(rightSwitch,h4)22. 23. topos={'myfirsttopo':(lambda:MyFirstTopo())}

5

If youwant to run a quick testwithout entering the CLI, you can use option --test inMininet, asfollow:

Nowassumethatwewanttoaccomplishthefollowing:

1. CreatethetopologyshowninFigure12. Startthenetwork3. Showthedetailedconnectivityofallnodesinthenetwork4. Testtheconnectivitybypingingallnodes

WecanautomatethissequenceofoperationsbywritingaPythonscript.Thishelpsustoautomatenetwork experiments. To this end, we extend the previous source code, as shown in Figure 3.Downloadthesourcecodefromhere:myfirstexpr.py.

Figure3Sourcecodeforanexperimentonthecustomtopology.

mininet> sudo mn --custom myfirsttopo.py --topo myfirsttopo --test pingall

1. #!/usr/bin/python2. 3. frommininet.topoimportTopo4. frommininet.netimportMininet5. frommininet.utilimportdumpNodeConnections6. frommininet.logimportsetLogLevel7. 8. classMyFirstTopo(Topo):9. "Simpletopologyexample."10. def__init__(self):11. "Createcustomtopo."12. #Initializetopology13. Topo.__init__(self)14. #Addhostsandswitches15. h1=self.addHost('h1')16. h2=self.addHost('h2')17. h3=self.addHost('h3')18. h4=self.addHost('h4')19. leftSwitch=self.addSwitch('s1')20. rightSwitch=self.addSwitch('s2')21. #Addlinks22. self.addLink(h1,leftSwitch)23. self.addLink(h2,leftSwitch)24. self.addLink(leftSwitch,rightSwitch)25. self.addLink(rightSwitch,h3)26. self.addLink(rightSwitch,h4)27. 28. defrunExperiment():29. "Createandtestasimpleexperiment"30. topo=MyFirstTopo()31. net=Mininet(topo)32. net.start()33. print"Dumpinghostconnections"34. dumpNodeConnections(net.hosts)35. print"Testingnetworkconnectivity"36. net.pingAll()37. net.stop()38. 39. if__name__=='__main__':40. #Tellmininettoprintusefulinformation41. setLogLevel('info')42. runExperiment()

6

Now download the source code and save it in a file namedmyfirstexpr.py and run the followingcommand:

Remembertocleanup(sudomn–c)andalsotosaveyourworkinyourCSEhomedirectorybeforemovingforward.

Part3:MininetPythonClassesTheMininetPythonAPIconsistsofanumberofPythonclasses,suchasTopo,Mininet,Host,Switch,Link and their subclasses. The API is built at three primary levelswhich provide different level ofabstractionsforcustomisingthenetworktopologies.Hereisabriefdescriptionofthelevels:

• Low-levelAPI:ThisAPIincludesthebasenodeandlinkclassessuchasHost,SwitchandLink.Youcandirectlyinstantiatesomeobjectsfromtheseclassestocreateanetwork.

• Mid-levelAPI:ThisAPIconsistsof theMininetclasswhichprovidesanumberofmethods,suchasaddHost(),addSwitch(),andaddLink(),forcreatinganetwork.

• High-level API: This API consists of the Topo class, which provides the ability to createreusable, parameterised topology templates. These templates can be passed to themncommand(viathe--customoptionasinPart2above)andusedfromthecommandline.

Figure2andFigure3aretwoexamplesthatshowhowtousethehigh-levelAPI.Asyoucansee,thehigh-levelAPIprovidesanobject-orientedframeworkbypresentingtheTopoclass.Figure4showshowtousethelow-levelAPIforcreatingthecustomtopologypresentedinFigure1.Downloadthesourcecodefromhere:myfirsttopo_lowlevel.py.Observethat,withthelow-levelAPIwecreatealltheobjectsandconnectthetopologymanually.Youcantestthiscodebytypingthefollowing:

You can find the detailed documentation of all classes provided in the Mininet Python API inhttp://mininet.org/api/annotated.html.

mininet> sudo python myfirstexpr.py

mininet> sudo python myfirsttopo_lowlevel.py

7

Figure4SourcecodeforthetopologypresentedinFigure1usinglow-levelAPI.

Remembertocleanup(sudomn–c)andalsotosaveyourworkinyourCSEhomedirectorybeforemovingforward.

Part4:SimpleTreeTopologyManydatacentresuseatree-likenetworktopology.End-hosts(i.e.servers)connecttotop-of-rackswitches,callededgeswitchesandformtheleavesofthetree;oneormorecoreswitchesformtherootofthetree;andoneormoreaggregationswitchesformtheintermediatenodesofthetree.Ina simple tree topology, there is only one core switch connected to𝑛 aggregation switches; eachaggregation switch is connected to𝑛 edge switches; eachedges switches is connected to𝑛 hosts(servers).Figure5showsasimpletreetopologywheren=2.

1. #!/usr/bin/python2. 3. frommininet.nodeimportHost,OVSSwitch,Controller4. frommininet.linkimportLink5. 6. h1=Host('h1')7. h2=Host('h2')8. h3=Host('h3')9. h4=Host('h4')10. s1=OVSSwitch('s1',inNamespace=False)11. s2=OVSSwitch('s2',inNamespace=False)12. c0=Controller('c0',inNamespace=False)13. Link(h1,s1)14. Link(h2,s1)15. Link(h3,s2)16. Link(h4,s2)17. Link(s1,s2)18. h1.setIP('10.0.0.1/24')19. h2.setIP('10.0.0.2/24')20. h3.setIP('10.0.0.3/24')21. h4.setIP('10.0.0.4/24')22. c0.start()23. s1.start([c0])24. s2.start([c0])25. printh1.IP26. printh2.IP27. printh3.IP28. printh4.IP29. print'Pinging...'30. printh1.cmd('ping-c3',h2.IP())31. printh1.cmd('ping-c3',h3.IP())32. s1.stop()33. s2.stop()34. c0.stop()

8

Figure5Simple-treetopologywith𝑛 = 2.

Question5:WriteaPythonprogramtousethehigh-levelAPIandcreateasimple-treedatacentretopology.YoumustfollowthenamingsystemasshowninFigure6.Theprogramgetsthevalueof𝑛as an input. You must organise all the source code in a single source file, name itsimpletree_highlevel.py,andincludethisfileinthesubmissionarchive.

Question6:Repeatthepreviousquestionbutnowusethelow-levelAPI.Youmustorganiseallthesource code in a single source file, name it simpletree_lowlevel.py, and include this file in thesubmissionarchive.

Question7:Useyourprogram(eitherhigh-levelorlow-level)tocreateasimple-treewith𝑛 = 2,asshowninFigure5.Checktheconnectivityofallnodesinthenetworkandwriteyourobservations.Now stop the core switch using command switch c1 stop, check the connectivity of all hosts andreportyourobservations.Howdoyouexplainyourfindings?Writeupyouranswerinthereport.

Part5:UsefulResources• IntroductiontoMininet:https://github.com/mininet/mininet/wiki/Introduction-to-Mininet• MininetWalkthrough:http://mininet.org/walkthrough/• MininetPythonAPIReferenceManual:http://mininet.org/api/annotated.html

salil
Cross-Out
salil
Replacement Text
5

top related