Upload the contribution of vstf as bottleneck network framework.
[bottlenecks.git] / vstf / vstf / agent / spirent / spirent.py
diff --git a/vstf/vstf/agent/spirent/spirent.py b/vstf/vstf/agent/spirent/spirent.py
new file mode 100755 (executable)
index 0000000..3b073cb
--- /dev/null
@@ -0,0 +1,234 @@
+#!/usr/bin/python
+import Tkinter
+
+
+def build_cmd(*args):
+    cmd = ''
+    for arg in args:
+        cmd = cmd+str(arg)+' '
+    #import pdb
+    #pdb.set_trace()
+    return cmd
+
+
+class stcPython():
+    def __init__(self):
+        self.tclsh = Tkinter.Tcl()
+        self.stcpkg = '/home/Spirent_TestCenter_4.46/Spirent_TestCenter_Application_Linux'
+        self.tclsh.eval("set auto_path [ linsert $auto_path 0 %s ]" %(self.stcpkg))
+        self.tclsh.eval("package require SpirentTestCenter")
+        
+    def build_cmd(self, *args):
+        cmd = ''
+        for arg in args:
+            cmd = cmd+str(arg)+' '
+        return cmd
+
+    # [ stc base interface ]
+    def stc_init(self, *args):
+        cmd = build_cmd('stc::init', *args)
+        return self.tclsh.eval(cmd)
+    # stc connect
+    def stc_connect(self,*args):
+        cmd = build_cmd('stc::connect', *args)
+        return self.tclsh.eval(cmd)
+    # stc disconnect
+    def stc_disconnect(self,*args):
+        cmd = build_cmd('stc::disconnect', *args)
+        return self.tclsh.eval(cmd)
+    # stc create
+    def stc_create(self,*args):
+        cmd = build_cmd('stc::create', *args)
+        return self.tclsh.eval(cmd)
+    # stc delete
+    def stc_delete(self,*args):
+        cmd = build_cmd('stc::delete', *args)
+        return self.tclsh.eval(cmd)
+    # stc config
+    def stc_config(self,*args):
+        cmd = build_cmd('stc::config', *args)
+        return self.tclsh.eval(cmd)
+    # stc get
+    def stc_get(self,*args):
+        cmd = build_cmd('stc::get', *args)
+        return self.tclsh.eval(cmd)
+    # stc apply
+    def stc_apply(self,*args):
+        cmd = build_cmd('stc::apply', *args)
+        return self.tclsh.eval(cmd)
+    # stc perform
+    def stc_perform(self,*args):
+        cmd = build_cmd('stc::perform', *args)
+        return self.tclsh.eval(cmd)
+    # stc reserve
+    def stc_reserve(self,*args):
+        cmd = build_cmd('stc::reserve', *args)
+        return self.tclsh.eval(cmd)
+    # stc release
+    def stc_release(self,*args):
+        cmd = build_cmd('stc::release', *args)
+        return self.tclsh.eval(cmd)
+    # stc subscribe
+    def stc_subscribe(self,*args):
+        cmd = build_cmd('stc::subscribe',*args)
+        return self.tclsh.eval(cmd)
+    # stc unsubscribe
+    def stc_unsubscribe(self,*args):
+        cmd = build_cmd('stc::unsubscribe', *args)
+        return self.tclsh.eval(cmd)
+    # stc wait until sequencer complete
+    def stc_waituntilcomplete(self,*args):
+        cmd = build_cmd('stc::waituntilcomplete', *args)
+        return self.tclsh.eval(cmd)
+    # stc help
+    def stc_help(self, *args):
+        cmd = build_cmd('stc::help',*args)
+        return self.tclsh.eval(cmd)
+
+    # [ stc expand interface ]
+    # get one dict-key's value
+    # return value
+    def stc_get_value(self,stc_dict,stc_key):
+        cmd = stc_dict+' -'+stc_key
+        return self.stc_get(cmd)
+    # create project
+    # return: project_name
+    def stc_create_project(self):
+        return self.stc_create('project')
+    # create port under project
+    # return: port name
+    def stc_create_port(self,project_name):
+        cmd = 'port -under '+project_name
+        return self.stc_create(cmd)
+    # config port location
+    # return: None
+    def stc_config_port_location(self,port_name,chassisAddress,slot,port):
+        #import pdb
+        #pdb.set_trace()
+        cmd = port_name+' -location //'+chassisAddress+'/'+slot+'/'+port+' -UseDefaultHost False'
+        return self.stc_config(cmd)
+    # create streamblock under port 
+    # return: streamblock name
+    def stc_create_streamblock(self,port_name,vlan_tag,ExpectedRxPort,srcMac,dstMac,sourceAddr,destAddr):
+        #import pdb
+        #pdb.set_trace()
+        if vlan_tag == None or vlan_tag == 'None':
+            frameStruc = '"EthernetII IPv4 Udp"'
+            if ExpectedRxPort == '' :
+                return self.stc_create( 'streamBlock -under ',port_name,
+                                        '-frameConfig ',frameStruc,
+                                        '-frame "EthernetII.srcMac',srcMac,'EthernetII.dstMac',dstMac,
+                                        'IPv4.1.sourceAddr',sourceAddr,'IPv4.1.destAddr',destAddr,'"')
+            else :
+                return self.stc_create( 'streamBlock -under ',port_name,
+                                        '-ExpectedRxPort',ExpectedRxPort,
+                                        '-frameConfig ',frameStruc,
+                                        '-frame "EthernetII.srcMac',srcMac,'EthernetII.dstMac',dstMac,
+                                        'IPv4.1.sourceAddr',sourceAddr,'IPv4.1.destAddr',destAddr,'"')
+        else :
+            frameStruc = '"EthernetII Vlan IPv4 Udp"'
+            if ExpectedRxPort == '' :
+                return self.stc_create( 'streamBlock -under ',port_name,
+                                        '-frameConfig '+frameStruc,
+                                        '-frame "EthernetII.srcMac',srcMac,'EthernetII.dstMac',dstMac,
+                                        'Vlan.1.id',vlan_tag,
+                                        'IPv4.1.sourceAddr',sourceAddr,'IPv4.1.destAddr',destAddr,'"')
+            else :
+                return self.stc_create( 'streamBlock -under ',port_name,
+                                        '-ExpectedRxPort',ExpectedRxPort,
+                                        '-frameConfig '+frameStruc,
+                                        '-frame "EthernetII.srcMac',srcMac,'EthernetII.dstMac',dstMac,
+                                        'Vlan.1.id',vlan_tag,
+                                        'IPv4.1.sourceAddr',sourceAddr,'IPv4.1.destAddr',destAddr,'"')
+    # config streamblock with part arguments
+    # argument list use args dictionary
+    def stc_config_streamblock(self,streamblock_name,args_dict):
+        cmd = ''
+        for key in args_dict.keys() :
+            temp_cmd = '-'+key+' '+str(args_dict[key])
+            cmd = cmd + temp_cmd
+        return self.stc_config(streamblock_name,cmd)
+    # get generator name from port name
+    # return: generator name
+    def stc_get_generator(self,port_name):
+        cmd = port_name+' -children-generator'
+        return self.stc_get(cmd)
+    # config generator with part arguments
+    # argument list use args dictionary
+    # return none
+    def stc_config_generator(self,generator_name,args_dict):
+        cmd = ''
+        for key in args_dict.keys() :
+            temp_cmd = '-'+key+' '+str(args_dict[key])
+            cmd = cmd + temp_cmd
+        return self.stc_config(generator_name,cmd)
+    # attach port
+    # return: port's parent project info
+    def stc_attach_ports(self,portList):
+        cmd = 'AttachPorts -portList {'
+        for port in portList :
+            cmd = cmd+' '+port
+        cmd = cmd+'} -autoConnect TRUE'
+        return self.stc_perform(cmd)
+    # config src mac and dst mac
+    # return: none
+    def stc_config_ethII(self,ethII,src_mac,dst_mac):
+        cmd = ethII+' -srcMac '+src_mac+' -dstMac '+dst_mac
+        return self.stc_config(cmd)
+    # config src ip and dst ip
+    # return: none
+    def stc_config_ethIII(self,ethIII,src_ip,dst_ip):
+        cmd = ethIII+' -sourceAddr '+src_ip+' -destAddr '+dst_ip
+        return self.stc_config(cmd)
+    # start streamblock
+    # return: none
+    def stc_streamblock_start(self,streamblock_list):
+        cmd = 'StreamBlockStart -StreamBlockList {'
+        for streamblock in streamblock_list :
+            cmd = cmd+' '+streamblock
+        cmd = cmd+' } -ExecuteSynchronous TRUE'
+        return self.stc_perform(cmd)
+    # stop streamblock
+    def stc_streamblock_stop(self,streamblock_list):
+        cmd = 'StreamBlockStop -StreamBlockList {'
+        for streamblock in streamblock_list :
+            cmd = cmd+' '+streamblock
+        cmd = cmd+' } -ExecuteSynchronous TRUE'
+        return self.stc_perform(cmd)
+    # start generator
+    # return: none
+    def stc_generator_start(self,generator_List):
+        cmd = 'GeneratorStart -generatorList {'
+        for generator in generator_List :
+            cmd = cmd+' '+generator
+        cmd = cmd+' }'
+        return self.stc_perform(cmd)
+    # stop generator
+    # return: none
+    def stc_generator_stop(self,generator_List):
+        cmd = 'GeneratorStop -generatorList {'
+        for generator in generator_List :
+            cmd = cmd+' '+generator
+        cmd = cmd+' }'
+        return self.stc_perform(cmd)
+    # create rfc2544 throughput test
+    def stc_setup_rfc2544_throughput(self):
+        pass
+    # create rfc2544 frameloss test
+    def stc_setup_rfc2544_frameloss(self):
+        pass
+    # create rfc2544 latency test
+    def stc_setup_rfc2544_latency(self):
+        pass
+    # start Sequence start
+    def stc_sequence_start(self):
+        return self.stc_perform('SequencerStart')
+    # output rfc2544 throughput result
+    def stc_get_rfc2544_throughput_result(self):
+        pass
+    # output rfc2544 frameloss result
+    def stc_get_rfc2544_frameloss_result(self):
+        pass
+    # output rfc2544 latency result
+    def stc_get_rfc2544_latency_result(self):
+        pass