# # A library to manage ARCFIRE experiments # # Base class for DIFs # # @name [string] DIF name # @members [iterable] Nodes belonging to the DIF # class DIF: def __init__(self, name, members): self.name = name self.members = dict() if members != None: for m in members: self.members[m] = m def __repr__(self): return "%s: %s" % (self.name, str(sorted(self.members))) def node_add(node_name): self.members[node_name] = node_name def node_del(node_name): del self.members[node_name] # Shim over Ethernet # # @link_speed [int] Speed of the Ethernet network, in Mbps # class ShimEthDIF(DIF): def __init__(self, name, link_speed = 0, members = None): DIF.__init__(self, name, members) self.link_speed = int(link_speed) if self.link_speed < 0: raise ValueError("link_speed must be a non-negative number") # A policy # # @component: RINA component to which the policy applies to # @name: Name of the policy # @parameters: A dictionary of (key, values) pairs representing policy-specific # parameters class Policy: def __init__(self, component, name, **kwargs): self.component = component self.name = name self.parameters = kwargs def __repr__(self): s = "%s:%s" % (self.component, self.name) if self.parameters: s += "%s" % self.parameters return s # Normal DIF class NormalDIF(DIF): def __init__(self, name, members = None): DIF.__init__(self, name, members) self.policies = dict() def policy_add(self, policy): self.policies[policy.component] = policy def policy_del(self, component): del self.policies[component] def __repr__(self): s = DIF.__repr__(self) if self.policies: s += " policies=[" for p in self.policies: s += "%s," % self.policies[p] if self.policies: s += "]" return s # Base class for ARCFIRE experiments # # @name [string] Name of the experiment # class Experiment: def __init__(self, name): self.name = name self.difs = dict() def __repr__(self): s = "%s:" % self.name for d in self.difs: s += "\n %s" % self.difs[d] return s def dif_add(self, dif): self.difs[dif.name] = dif def dif_del(self, dif_name): del self.difs[dif_name] def run(self): print("[experiment %s] start" % self.name) print("[experiment %s] end" % self.name)