@@ -43,13 +43,6 @@ class CLI( Cmd ):
4343
4444 def __init__ ( self , mininet , stdin = sys .stdin , script = None ):
4545 self .mn = mininet
46- self .nodelist = self .mn .controllers + self .mn .switches + self .mn .hosts
47- self .nodemap = {} # map names to Node objects
48- for node in self .nodelist :
49- self .nodemap [ node .name ] = node
50- # Local variable bindings for py command
51- self .locals = { 'net' : mininet }
52- self .locals .update ( self .nodemap )
5346 # Attempt to handle input
5447 self .stdin = stdin
5548 self .inPoller = poll ()
@@ -63,7 +56,7 @@ def __init__( self, mininet, stdin=sys.stdin, script=None ):
6356 while True :
6457 try :
6558 # Make sure no nodes are still waiting
66- for node in self .nodelist :
59+ for node in self .mn . values () :
6760 while node .waiting :
6861 node .sendInt ()
6962 node .monitor ()
@@ -78,6 +71,12 @@ def emptyline( self ):
7871 "Don't repeat last command when you hit return."
7972 pass
8073
74+ def locals ( self ):
75+ "Local variable bindings for py command"
76+ locals = { 'net' : self .mn }
77+ locals .update ( self .mn )
78+ return locals
79+
8180 # Disable pylint "Unused argument: 'arg's'" messages, as well as
8281 # "method could be a function" warning, since each CLI function
8382 # must have the same interface
@@ -110,12 +109,14 @@ def do_help( self, line ):
110109
111110 def do_nodes ( self , _line ):
112111 "List all nodes."
113- nodes = ' ' .join ( [ node .name for node in sorted ( self .nodelist ) ] )
112+ # self.mn.values()
113+ nodes = ' ' .join ( [ node .name for node in sorted ( self .mn ) ] )
114114 output ( 'available nodes are: \n %s\n ' % nodes )
115115
116116 def do_net ( self , _line ):
117117 "List network connections."
118- dumpNodeConnections ( self .nodelist )
118+ # self.mn.values()
119+ dumpNodeConnections ( self .mn )
119120
120121 def do_sh ( self , line ):
121122 "Run an external shell command"
@@ -128,7 +129,7 @@ def do_py( self, line ):
128129 """Evaluate a Python expression.
129130 Node names may be used, e.g.: py h1.cmd('ls')"""
130131 try :
131- result = eval ( line , globals (), self .locals )
132+ result = eval ( line , globals (), self .locals () )
132133 if not result :
133134 return
134135 elif isinstance ( result , str ):
@@ -145,7 +146,7 @@ def do_px( self, line ):
145146 """Execute a Python statement.
146147 Node names may be used, e.g.: px print h1.cmd('ls')"""
147148 try :
148- exec ( line , globals (), self .locals )
149+ exec ( line , globals (), self .locals () )
149150 except Exception , e :
150151 output ( str ( e ) + '\n ' )
151152
@@ -176,11 +177,12 @@ def do_iperf( self, line ):
176177 hosts = []
177178 err = False
178179 for arg in args :
179- if arg not in self .nodemap :
180+ # self.mn.keys()
181+ if arg not in self .mn :
180182 err = True
181183 error ( "node '%s' not in network\n " % arg )
182184 else :
183- hosts .append ( self .nodemap [ arg ] )
185+ hosts .append ( self .mn [ arg ] )
184186 if not err :
185187 self .mn .iperf ( hosts )
186188 else :
@@ -196,11 +198,11 @@ def do_iperfudp( self, line ):
196198 hosts = []
197199 err = False
198200 for arg in args [ 1 :3 ]:
199- if arg not in self .nodemap :
201+ if arg not in self .mn :
200202 err = True
201203 error ( "node '%s' not in network\n " % arg )
202204 else :
203- hosts .append ( self .nodemap [ arg ] )
205+ hosts .append ( self .mn [ arg ] )
204206 if not err :
205207 self .mn .iperf ( hosts , l4Type = 'UDP' , udpBw = udpBw )
206208 else :
@@ -209,13 +211,15 @@ def do_iperfudp( self, line ):
209211
210212 def do_intfs ( self , _line ):
211213 "List interfaces."
212- for node in self .nodelist :
214+ # self.mn.values()
215+ for node in self .mn :
213216 output ( '%s: %s\n ' %
214217 ( node .name , ',' .join ( node .intfNames () ) ) )
215218
216219 def do_dump ( self , _line ):
217220 "Dump node info."
218- for node in self .nodelist :
221+ # self.mn.values()
222+ for node in self .mn :
219223 output ( '%s\n ' % repr ( node ) )
220224
221225 def do_link ( self , line ):
@@ -235,10 +239,11 @@ def do_xterm( self, line, term='xterm' ):
235239 error ( 'usage: %s node1 node2 ...\n ' % term )
236240 else :
237241 for arg in args :
238- if arg not in self .nodemap :
242+ # self.mn.keys()
243+ if arg not in self .mn :
239244 error ( "node '%s' not in network\n " % arg )
240245 else :
241- node = self .nodemap [ arg ]
246+ node = self .mn [ arg ]
242247 self .mn .terms += makeTerms ( [ node ], term = term )
243248
244249 def do_x ( self , line ):
@@ -329,11 +334,11 @@ def default( self, line ):
329334 args = args [ :- 1 ]
330335 rest = args .split ( ' ' )
331336
332- if first in self .nodemap :
333- node = self .nodemap [ first ]
337+ if first in self .mn :
338+ node = self .mn [ first ]
334339 # Substitute IP addresses for node names in command
335- rest = [ self .nodemap [ arg ].defaultIntf ().updateIP ()
336- if arg in self .nodemap else arg
340+ rest = [ self .mn [ arg ].defaultIntf ().updateIP ()
341+ if arg in self .mn else arg
337342 for arg in rest ]
338343 rest = ' ' .join ( rest )
339344 # Run cmd on node:
0 commit comments