Ignore:
Timestamp:
Aug 28, 2009 6:07:42 PM (15 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-2.00, version-3.01, version-3.02
Children:
6c57fe9
Parents:
4c8a0b7
Message:

checkpoint

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/topdl.py

    r4c8a0b7 rcc8d8e9  
    4848class Capacity(base):
    4949    def __init__(self, rate, kind):
    50         self.rate = rate
     50        self.rate = float(rate)
    5151        self.kind = kind
    5252
     
    5555
    5656    def to_dict(self):
    57         return { 'rate': self.rate, 'kind': self.kind }
     57        return { 'rate': float(self.rate), 'kind': self.kind }
    5858
    5959class Latency(base):
    6060    def __init__(self, time, kind):
    61         self.time = time
     61        self.time = float(time)
    6262        self.kind = kind
    6363
     
    6666
    6767    def to_dict(self):
    68         return { 'time': self.time, 'kind': self.kind }
     68        return { 'time': float(self.time), 'kind': self.kind }
    6969
    7070class Substrate(base):
     
    117117class Storage(base):
    118118    def __init__(self, amount, persistence, attribute=[]):
    119         if isinstance(amount, basestring):
    120             self.amount = float(amount)
    121         else:
    122             self.amount = amount
     119        self.amount = float(amount)
    123120        self.presistence = persistence
    124121        self.attribute = [ self.init_class(Attribute, a) \
     
    411408        f = open(filename, "r")
    412409        xp.ParseFile(f)
     410        f.close()
    413411    elif file:
    414412        xp.ParseFile(file)
     
    455453
    456454    for eidx, e in enumerate(t.elements):
    457         n = { }
    458455        if e.name: name = e.name[0]
    459456        else: name = "unnamed_node%d" % eidx
    460457       
    461458        ips = [ ]
    462         for i in e.interfaces:
     459        for idx, i in enumerate(e.interface):
    463460            ip = i.get_attribute('ip4_address')
    464461            ips.append(ip)
     
    490487            })
    491488
    492         nodes.append(n)
    493     return { 'vtopo': { 'node': node, 'lan': lan } }
     489    return { 'node': nodes, 'lan': lans }
     490
     491def topology_to_ns2(t):
     492    out = """
     493set ns [new Simulator]
     494source tb_compat.tcl
     495
     496"""
     497    for e in t.elements:
     498        rpms = ""
     499        tarfiles = ""
     500        if isinstance(e, Computer):
     501            name = e.name[0]
     502            out += "set %s [$ns node]\n" % name
     503            if e.os and len(e.os) == 1:
     504                osid = e.os[0].get_attribute('osid')
     505                if osid:
     506                    out += "tb-set-node-os $%s %s\n" % (name, osid)
     507            for s in e.software:
     508                if s.install:
     509                    tarfiles += "%s %s " % (s.install, s.location)
     510                else:
     511                    rpms += "%s " % s.location
     512            if rpms:
     513                out += "tb-set-node-rpms $%s %s\n" % (name, rpms)
     514            if tarfiles:
     515                out += "tb-set-node-tarfiles $%s %s\n" % (name, tarfiles)
     516            startcmd = e.get_attribute('startup')
     517            if startcmd:
     518                out+= 'tb-set-node-startcmd $%s "%s"\n' % (name, startcmd)
     519            out+= "\n"
     520   
     521    for idx, s in enumerate(t.substrates):
     522        loss = s.get_attribute('loss')
     523        if s.latency:
     524            delay = s.latency.time
     525        else:
     526            delay = 0
     527        name = s.name or "sub%d" % idx
     528
     529        if len(s.interfaces) > 2:
     530            # Lan
     531            members = [ i.element.name[0] for i in s.interfaces]
     532            out += 'set %s [$ns make-lan "%s" %f %fms ]\n' % \
     533                    (name, " ".join(members), s.capacity.rate, delay)
     534            if loss:
     535                "tb-set-lan-loss $%s %f\n" % (name, float(loss))
     536
     537            for i in s.interfaces:
     538                e = i.element
     539                ip = e.get_attribute("ip4_address")
     540                if ip:
     541                    out += "tb-set-ip-lan $%s $%s %s\n" % (e.name, name, ip)
     542                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)
     545                if i.latency and i.latency.time != delay:
     546                    out += "tb-set-node-lan-delay $%s $%s %fms\n" % \
     547                            (e.name[0], name, i.latency.time)
     548                iloss = i.get_attribute('loss')
     549                if loss and iloss != loss :
     550                    out += "tb-set-node-lan-loss $%s $%s %f" % \
     551                            (e.name[0], name, float(loss))
     552            out+= "\n"
     553        elif len(s.interfaces) == 2:
     554            f = s.interfaces[0]
     555            t = s.interfaces[1]
     556
     557            out += "set %s [$ns duplex-link $%s $%s %f %fms DropTail]\n" %\
     558                    (name, f.element.name[0], t.element.name[0],
     559                            s.capacity.rate, delay)
     560            if loss:
     561                out += "tb-set-link-loss $%s %f\n" % (name, float(loss))
     562
     563            for i in s.interfaces:
     564                lloss = i.get_attribute("loss")
     565                cap_override = i.capacity and \
     566                        i.capacity.rate != s.capacity.rate
     567                delay_override = i.latency and \
     568                        i.latency.time != delay
     569                loss_override = lloss and lloss != loss
     570                if cap_override or delay_override or loss_override:
     571                    if i.capacity: cap = i.capacity.rate
     572                    else: cap = s.capacity.rate
     573
     574                    if i.latency: delay = i.latency.time
     575
     576                    if lloss: loss = lloss
     577                    else: loss = loss or 0.0
     578
     579                    out += "tb-set-link-simplex-params $%s $%s %fms %f %f\n" % \
     580                            (name, i.element.name[0], delay, cap, loss)
     581            out+= "\n"
     582    out+="""
     583$ns run
     584"""
     585    return out
Note: See TracChangeset for help on using the changeset viewer.