Changeset 6c57fe9 for fedd/federation/topdl.py
- Timestamp:
- Sep 2, 2009 10:36:18 AM (15 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-2.00, version-3.01, version-3.02
- Children:
- f9ef40b
- Parents:
- cc8d8e9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/federation/topdl.py
rcc8d8e9 r6c57fe9 1 1 #!/usr/local/bin/python 2 3 import re 2 4 3 5 class base: … … 31 33 return rv 32 34 33 35 def set_attribute(self, key, value): 36 attrs = getattr(self, 'attribute', None) 37 if attrs is None: 38 return 39 for a in attrs: 40 if a.attribute == key: 41 a.value = value 42 break 43 else: 44 attrs.append(Attribute(key, value)) 34 45 35 46 class ConsistencyError(RuntimeError): pass … … 207 218 if self.attribute: 208 219 rv['attribute'] = [ a.to_dict() for a in self.attribute ] 220 return rv 221 222 class ID(base): 223 def __init__(self, fedid=None, uuid=None, uri=None, localname=None, 224 kerberosUsername=None): 225 self.fedid=fedid 226 self.uuid = uuid 227 self.uri = uri 228 self.localname = localname 229 self.kerberosUsername = kerberosUsername 230 231 def clone(self): 232 return ID(self.fedid, self.uuid, self.uri, self.localname, 233 self.kernberosUsername) 234 235 def to_dict(self): 236 rv = { } 237 if self.fedid: rv['fedid'] = self.fedid 238 if self.uuid: rv['uuid'] = self.uuid 239 if self.uri: rv['uri'] = self.uri 240 if self.localname: rv['localname'] = self.localname 241 if self.kerberosUsername: rv['kerberosUsername'] = self.kerberosUsername 209 242 return rv 210 243 … … 256 289 return { 'computer': rv } 257 290 291 292 class Testbed(base): 293 def __init__(self, uri, type, interface=[], attribute=[]): 294 self.uri = uri 295 self.type = type 296 self.interface = [ self.init_class(Interface, c) \ 297 for c in self.make_list(interface) ] 298 self.attribute = [ self.init_class(Attribute, c) \ 299 for c in self.make_list(attribute) ] 300 301 def clone(self): 302 return Testbed(self.uri, self.type, 303 interface=[i.clone() for i in self.interface], 304 attribute=[a.cone() for a in self.attribute]) 305 306 def to_dict(self): 307 rv = { } 308 if self.uri: rv['uri'] = self.uri 309 if self.type: rv['type'] = self.type 310 if self.interface: 311 rv['interface'] = [ i.to_dict() for i in self.interface] 312 if self.attribute: 313 rv['attribute'] = [ a.to_dict() for a in self.attribute] 314 return { 'testbed': rv } 315 316 class Segment(base): 317 def __init__(self, id, type, uri, interface=[], attribute=[]): 318 self.id = self.init_class(ID, id) 319 self.type = type 320 self.uri = uri 321 self.interface = [ self.init_class(Interface, c) \ 322 for c in self.make_list(interface) ] 323 self.attribute = [ self.init_class(Attribute, c) \ 324 for c in self.make_list(attribute) ] 325 326 def clone(self): 327 return Segment(self.id.clone(), self.type, self.uri, 328 interface=[i.clone() for i in self.interface], 329 attribute=[a.clone() for a in attribute]) 330 331 def to_dict(self): 332 rv = { } 333 if self.id: rv['id'] = self.id.to_dict() 334 if self.type: rv['type'] = self.type 335 if self.uri: rv['uri'] = self.uri 336 if self.interface: 337 rv['interface'] = [ i.to_dict() for i in self.interface ] 338 if self.attribute: 339 rv['attribute'] = [ a.to_dict() for a in self.attribute ] 340 return { 'segment': rv } 341 342 258 343 class Other(base): 259 344 def __init__(self, interface=[], attribute=[]): … … 268 353 269 354 def to_dict(self): 355 rv = {} 270 356 if self.interface: 271 357 rv['interface'] = [ i.to_dict() for i in self.interface ] 272 358 if self.attribute: 273 359 rv['attribute'] = [ a.to_dict() for a in self.attribute ] 360 return {'other': rv } 274 361 275 362 … … 285 372 classmap = { 286 373 'computer': Computer, 374 'testbed': Testbed, 375 'segment': Segment, 287 376 'other': Other, 288 377 } … … 489 578 return { 'node': nodes, 'lan': lans } 490 579 491 def topology_to_ns2(t): 580 def to_tcl_name(n): 581 t = re.subst('-(\d+)', '(\1)', n) 582 return t 583 584 def generate_portal_image_filter(image): 585 def rv(e): 586 s ="" 587 if isinstance(e, Computer): 588 gw = e.get_attribute('portal') 589 if gw: 590 s = "tb-set-node-os $%s %s" % (to_tcl_name(e.name[0]), image) 591 return s 592 return rv 593 594 def generate_portal_command_filter(cmd): 595 def rv(e): 596 s ="" 597 if isinstance(e, Computer): 598 gw = e.get_attribute('portal') 599 if gw: 600 s = "%s $%s" % (cmd, to_tcl_name(e.name[0])) 601 return s 602 return rv 603 604 605 def topology_to_ns2(t, filters=[]): 492 606 out = """ 493 607 set ns [new Simulator] … … 495 609 496 610 """ 611 497 612 for e in t.elements: 498 613 rpms = "" 499 614 tarfiles = "" 500 615 if isinstance(e, Computer): 501 name = e.name[0]616 name = to_tcl_name(e.name[0]) 502 617 out += "set %s [$ns node]\n" % name 503 618 if e.os and len(e.os) == 1: … … 517 632 if startcmd: 518 633 out+= 'tb-set-node-startcmd $%s "%s"\n' % (name, startcmd) 634 for f in filters: 635 out += f(e) 519 636 out+= "\n" 520 637 … … 525 642 else: 526 643 delay = 0 527 name = s.name or "sub%d" % idx644 name = to_tcl_name(s.name or "sub%d" % idx) 528 645 529 646 if len(s.interfaces) > 2: 530 647 # Lan 531 members = [ i.element.name[0] for i in s.interfaces] 532 out += 'set %s [$ns make-lan "%s" %f %fms ]\n' % \ 648 members = [ to_tcl_name("$%s") % i.element.name[0] \ 649 for i in s.interfaces] 650 out += 'set %s [$ns make-lan "%s" %fkb %fms ]\n' % \ 533 651 (name, " ".join(members), s.capacity.rate, delay) 534 652 if loss: … … 541 659 out += "tb-set-ip-lan $%s $%s %s\n" % (e.name, name, ip) 542 660 if i.capacity and i.capacity.rate != s.capacity.rate: 543 out += "tb-set-node-lan-bandwidth $%s $%s %f \n" % \544 ( e.name[0], name, i.capacity.rate)661 out += "tb-set-node-lan-bandwidth $%s $%s %fkb\n" % \ 662 (to_tcl_name(e.name[0]), name, i.capacity.rate) 545 663 if i.latency and i.latency.time != delay: 546 664 out += "tb-set-node-lan-delay $%s $%s %fms\n" % \ 547 ( e.name[0], name, i.latency.time)665 (to_tcl_name(e.name[0]), name, i.latency.time) 548 666 iloss = i.get_attribute('loss') 549 667 if loss and iloss != loss : 550 668 out += "tb-set-node-lan-loss $%s $%s %f" % \ 551 ( e.name[0], name, float(loss))669 (to_tcl_name(e.name[0]), name, float(loss)) 552 670 out+= "\n" 553 671 elif len(s.interfaces) == 2: … … 555 673 t = s.interfaces[1] 556 674 557 out += "set %s [$ns duplex-link $%s $%s %f %fms DropTail]\n" %\ 558 (name, f.element.name[0], t.element.name[0], 675 out += "set %s [$ns duplex-link $%s $%s %fkb %fms DropTail]\n" %\ 676 (name, to_tcl_name(f.element.name[0]), 677 to_tcl_name(t.element.name[0]), 559 678 s.capacity.rate, delay) 560 679 if loss: … … 577 696 else: loss = loss or 0.0 578 697 579 out += "tb-set-link-simplex-params $%s $%s %fms %f %f\n" % \ 580 (name, i.element.name[0], delay, cap, loss) 698 out += "tb-set-link-simplex-params $%s $%s %fms %fkb %f\n"\ 699 % (name, to_tcl_name(i.element.name[0]), 700 delay, cap, loss) 581 701 out+= "\n" 702 for f in filters: 703 out+= f(s) 582 704 out+=""" 583 705 $ns run
Note: See TracChangeset
for help on using the changeset viewer.