+import re
+from sfa.util.xrn import Xrn
# Taken from bwlimit.py
#
# See tc_util.c and http://physics.nist.gov/cuu/Units/binary.html. Be
"tbps": 8000000000000
}
+
def get_tc_rate(s):
"""
Parses an integer or a tc rate string (e.g., 1.5mbit) into bits/second
else:
return "%.0fbit" % rate
-def get_link_id(if1, if2):
- if if1['id'] < if2['id']:
- link = (if1['id']<<7) + if2['id']
- else:
- link = (if2['id']<<7) + if1['id']
- return link
+class VLink:
+ @staticmethod
+ def get_link_id(if1, if2):
+ if if1['id'] < if2['id']:
+ link = (if1['id']<<7) + if2['id']
+ else:
+ link = (if2['id']<<7) + if1['id']
+ return link
-def get_iface_id(if1, if2):
- if if1['id'] < if2['id']:
- iface = 1
- else:
- iface = 2
- return iface
+ @staticmethod
+ def get_iface_id(if1, if2):
+ if if1['id'] < if2['id']:
+ iface = 1
+ else:
+ iface = 2
+ return iface
+
+ @staticmethod
+ def get_virt_ip(if1, if2):
+ link_id = VLink.get_link_id(if1, if2)
+ iface_id = VLink.get_iface_id(if1, if2)
+ first = link_id >> 6
+ second = ((link_id & 0x3f)<<2) + iface_id
+ return "192.168.%d.%s" % (first, second)
-def get_virt_ip(if1, if2):
- link_id = get_link_id(if1, if2)
- iface_id = get_iface_id(if1, if2)
- first = link_id >> 6
- second = ((link_id & 0x3f)<<2) + iface_id
- return "192.168.%d.%s" % (frist, second)
+ @staticmethod
+ def get_virt_net(link):
+ link_id = VLink.get_link_id(link['interface1'], link['interface2'])
+ first = link_id >> 6
+ second = (link_id & 0x3f)<<2
+ return "192.168.%d.%d/30" % (first, second)
-def get_virt_net(link):
- link_id = self.get_link_id(link)
- first = link_id >> 6
- second = (link_id & 0x3f)<<2
- return "192.168.%d.%d/30" % (first, second)
+ @staticmethod
+ def get_interface_id(interface):
+ if_name = Xrn(interface['component_id']).get_leaf()
+ node, dev = if_name.split(":")
+ node_id = int(node.replace("node", ""))
+ return node_id
-def get_interface_id(interface):
- if_name = PlXrn(interface=interface['component_id']).interface_name()
- node, dev = if_name.split(":")
- node_id = int(node.replace("pc", ""))
- return node_id
+
+ @staticmethod
+ def get_topo_rspec(link, ipaddr):
+ link['interface1']['id'] = VLink.get_interface_id(link['interface1'])
+ link['interface2']['id'] = VLink.get_interface_id(link['interface2'])
+ my_ip = VLink.get_virt_ip(link['interface1'], link['interface2'])
+ remote_ip = VLink.get_virt_ip(link['interface2'], link['interface1'])
+ net = VLink.get_virt_net(link)
+ bw = format_tc_rate(long(link['capacity']))
+ return (link['interface2']['id'], ipaddr, bw, my_ip, remote_ip, net)
-
-def get_topo_rspec(self, link):
- link['interface1']['id'] = get_interface_id(link['interface1'])
- link['interface2']['id'] = get_interface_id(link['interface2'])
- my_ip = get_virt_ip(link['interface1'], link['interface2'])
- remote_ip = get_virt_ip(link['interface2'], link['interface1'])
- net = get_virt_net(link)
- bw = format_tc_rate(long(link['capacity']))
- ipaddr = remote.get_primary_iface().ipv4
- return (link['interface2']['id'], ipaddr, bw, my_ip, remote_ip, net)
+ @staticmethod
+ def topo_rspec_to_link(topo_rspec):
+ pass