view tools/python-PE/CompactRouting/Start-dycstra.py @ 8:6c40056777be

Initial revision
author fuchita
date Sat, 16 Feb 2008 13:18:02 +0900
parents
children
line wrap: on
line source

import re
import sys
import string
import struct

sys.path.append('../modules')

import FederatedLinda
from CompactRouting import *

ROUTING_HEADER_FORMAT = "!I"
MAKER = "::::"

TUPLE_ID_LINKCONFIG = 1
TUPLE_ID_ROUTING = 2

ROUTING_COMMAND_CONNECT      =  1
ROUTING_COMMAND_DISCONNECT   =  2
ROUTING_COMMAND_TRANSFER     =  3
ROUTING_COMMAND_UPDATE_TABLE =  4

testxml = \
"""<graph name = "Graf">
  <node label = "A" tsid = "localhost:10000">
        <destination label = "B"/>
  </node>
  <node label = "B" tsid = "localhost:10001">
        <destination label = "C"/>
        <destination label = "D"/>
  </node>
  <node label = "C" tsid = "localhost:10002">
        <destination label = "D"/>
  </node>
  <node label = "D" tsid = "localhost:10003">
  </node>
</graph>
"""

def getFirstTsid(xmltext):
    p = re.compile('(?<=tsid = \").*(?=\")')
    m = p.findall(xmltext)
    return m[0]


    
if __name__ == "__main__":

    if (len(sys.argv) == 2):
        print " : %s <xmlfilename>" % sys.argv[0]
        xmltext = open(sys.argv[1]).read()
        if xmltext is None:
            sys.exit(1)
	
    else:
	xmltext = testxml
    #close else
    pass
    
    firsttsid = getFirstTsid(xmltext)    
    flinda = FederatedLinda.FederatedLinda()
    #first Landmark set
    landmark_tsidlist = firsttsid + ","
    #define dycstra hopcount
    landmark_hopcount = 2

    host, portnum = string.split(firsttsid,':')

    #set send packet format
    data = struct.pack(ROUTING_HEADER_FORMAT,landmark_hopcount)+landmark_tsidlist+MAKER+testxml
    linda1 = flinda.open(host, int(portnum))
    linda1.Out(TUPLE_ID_LINKCONFIG, data)

    #landmark_data = struct.pack(ROUTING_HEADER_FORMAT,landmark_hopcount,rt.landmark_tslist)
    #linda1.Out(TUPLE_ID_LANDMARKCONFIG, landmark_data)

    flinda.sync()