X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fplc%2Fvlink.py;h=625963d0170c82caee407ed62f0e0865801f8baf;hb=eb83ed3161f1a0c750b7d4aef5ebbd46315ad07a;hp=df4327dd7f2427d15f4604475869aaa7c28215b9;hpb=df3b317170bceb48397471d90d789347e899a0d9;p=sfa.git diff --git a/sfa/plc/vlink.py b/sfa/plc/vlink.py index df4327dd..625963d0 100644 --- a/sfa/plc/vlink.py +++ b/sfa/plc/vlink.py @@ -1,3 +1,5 @@ +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 @@ -27,6 +29,7 @@ suffixes = { "tbps": 8000000000000 } + def get_tc_rate(s): """ Parses an integer or a tc rate string (e.g., 1.5mbit) into bits/second @@ -57,46 +60,56 @@ def format_tc_rate(rate): 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