mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			222 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| """
 | |
| Note: To Run this script gui should be opened with
 | |
| 
 | |
|     path: cd LANforgeGUI_5.4.3 (5.4.3 can be changed with GUI version)
 | |
|           pwd (Output : /home/lanforge/LANforgeGUI_5.4.3)
 | |
|           ./lfclient.bash -cli-socket 3990
 | |
| 
 | |
| Note: Scenario names should be different, for each run of this script.
 | |
|     in case of same scenario name scenario will be appended to the same name.
 | |
| 
 | |
| Note: Script for creating a chamberview scenario.
 | |
|     Run this script to set/create a chamber view scenario.
 | |
|     ex. on how to run this script:
 | |
| 
 | |
|     create_chamberview.py -m "localhost" -o "8080" -cs "scenario_name"
 | |
|     --line "Resource=1.1 Profile=STA-AC Amount=1 Uses-1=wiphy0 Uses-2=AUTO Freq=-1
 | |
|         DUT=Test DUT_Radio=Radio-1 Traffic=http VLAN="
 | |
|     --line "Resource=1.1 Profile=upstream Amount=1 Uses-1=eth1 Uses-2=AUTO Freq=-1
 | |
|         DUT=Test DUT_Radio=Radio-1 Traffic=http VLAN="
 | |
| 
 | |
|     ********************************      OR        ********************************
 | |
| 
 | |
|     create_chamberview.py -m "localhost" -o "8080" -cs "scenario_name"
 | |
|     --raw_line "profile_link 1.1 STA-AC 10 'DUT: temp Radio-1' tcp-dl-6m-vi wiphy0,AUTO -1"
 | |
|     --raw_line "profile_link 1.1 upstream 1 'DUT: temp Radio-1' tcp-dl-6m-vi eth1,AUTO -1"
 | |
| 
 | |
| Output:
 | |
|     You should see build scenario with the given arguments at the end of this script.
 | |
|     To verify this:
 | |
|         open Chamber View -> Manage scenario
 | |
| 
 | |
| """
 | |
| 
 | |
| import sys
 | |
| import os
 | |
| import argparse
 | |
| import time
 | |
| import re
 | |
| 
 | |
| if sys.version_info[0] != 3:
 | |
|     print("This script requires Python 3")
 | |
|     exit(1)
 | |
| 
 | |
| if 'py-json' not in sys.path:
 | |
|     sys.path.append(os.path.join(os.path.abspath('..'), 'py-json'))
 | |
| 
 | |
| from cv_test_manager import cv_test as cv
 | |
| 
 | |
| class CreateChamberview(cv):
 | |
|     def __init__(self,
 | |
|                  lfmgr="localhost",
 | |
|                  port="8080",
 | |
|                 ):
 | |
|         super().__init__(
 | |
|                  lfclient_host=lfmgr,
 | |
|                  lfclient_port=port,
 | |
|         )
 | |
|         self.lfmgr = lfmgr
 | |
|         self.port = port
 | |
| 
 | |
|     def clean_cv_scenario(self,type="Network-Connectivity",scenario_name=None):
 | |
|         self.rm_cv_text_blob(type,scenario_name)
 | |
| 
 | |
|     def setup(self,
 | |
|              create_scenario="",
 | |
|              line="",
 | |
|              raw_line=[]):
 | |
| 
 | |
|         if raw_line:
 | |
|             print("creating %s scenario" % create_scenario)
 | |
|             for create_lines in raw_line:
 | |
|                 self.pass_raw_lines_to_cv(create_scenario,create_lines[0])
 | |
| 
 | |
|         #check for lines
 | |
|         if line:
 | |
|             scenario_name = create_scenario
 | |
|             line = line
 | |
|             Resource = "1.1"
 | |
|             Profile = "STA-AC"
 | |
|             Amount = "1"
 | |
|             DUT = "DUT"
 | |
|             DUT_Radio = "Radio-1"
 | |
|             Uses1 = "wiphy0"
 | |
|             Uses2 = "AUTO"
 | |
|             Traffic = "http"
 | |
|             Freq = "-1"
 | |
|             VLAN = ""
 | |
| 
 | |
|             for i in range(len(line)):
 | |
|                 if " " in line[i][0]:
 | |
|                     line[i][0] = (re.split(' ', line[i][0]))
 | |
|                 elif "," in line[i][0]:
 | |
|                     line[i][0] = (re.split(',', line[i][0]))
 | |
|                 elif ", " in line[i][0]:
 | |
|                     line[i][0] = (re.split(',', line[i][0]))
 | |
|                 elif " ," in line[i][0]:
 | |
|                     line[i][0] = (re.split(',', line[i][0]))
 | |
|                 else:
 | |
|                     print("Wrong arguments entered !")
 | |
|                     exit(1)
 | |
| 
 | |
|                 print("creating %s scenario" % scenario_name)
 | |
|                 for j in range(len(line[i][0])):
 | |
|                     line[i][0][j] = line[i][0][j].split("=")
 | |
|                     for k in range(len(line[i][0][j])):
 | |
|                         name = line[i][0][j][k]
 | |
|                         if str(name) == "Resource" or str(name) == "Res" or str(name) == "R":
 | |
|                             Resource = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "Profile" or str(name) == "Prof" or str(name) == "P":
 | |
|                             Profile = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "Amount" or str(name) == "Sta" or str(name) == "A":
 | |
|                             Amount = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "Uses-1" or str(name) == "U1" or str(name) == "U-1":
 | |
|                             Uses1 = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "Uses-2" or str(name) == "U2" or str(name) == "U-2":
 | |
|                             Uses2 = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "Freq" or str(name) == "Freq" or str(name) == "F":
 | |
|                             Freq = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "DUT" or str(name) == "dut" or str(name) == "D":
 | |
|                             DUT = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "DUT_Radio" or str(name) == "dr" or str(name) == "DR":
 | |
|                             DUT_Radio = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "Traffic" or str(name) == "Traf" or str(name) == "T":
 | |
|                             Traffic = line[i][0][j][k + 1]
 | |
|                         elif str(name) == "VLAN" or str(name) == "Vlan" or str(name) == "V":
 | |
|                             VLAN = line[i][0][j][k + 1]
 | |
|                         else:
 | |
|                             continue
 | |
| 
 | |
|                 self.add_text_blob_line(scenario_name,
 | |
|                                             Resource,
 | |
|                                             Profile,
 | |
|                                             Amount,
 | |
|                                             DUT,
 | |
|                                             DUT_Radio,
 | |
|                                             Uses1,
 | |
|                                             Uses2,
 | |
|                                             Traffic,
 | |
|                                             Freq,
 | |
|                                             VLAN
 | |
|                                             );  # To manage scenario
 | |
|         if not line and not raw_line:
 | |
|             raise Exception("scenario creation failed")
 | |
|             return False
 | |
| 
 | |
|         return True
 | |
| 
 | |
|     def build(self,scenario_name):
 | |
|         self.sync_cv()  # chamberview sync
 | |
|         time.sleep(2)
 | |
|         self.apply_cv_scenario(scenario_name)  # Apply scenario
 | |
|         self.show_text_blob(None, None, False) # Show changes on GUI
 | |
|         self.apply_cv_scenario(scenario_name)  # Apply scenario
 | |
|         self.build_cv_scenario()  # build scenario
 | |
|         tries = 0
 | |
|         while (True):
 | |
|             self.get_popup_info_and_close()
 | |
|             if not self.get_cv_is_built():
 | |
|                 # It can take a while to build a large scenario, so wait-time
 | |
|                 # is currently max of 5 minutes.
 | |
|                 print("Waiting %i/300 for Chamber-View to be built." % (tries))
 | |
|                 tries += 1
 | |
|                 if (tries > 300):
 | |
|                     break
 | |
|                 time.sleep(1)
 | |
|             else:
 | |
|                 break
 | |
|         print("completed building %s scenario" %scenario_name)
 | |
| 
 | |
| 
 | |
| 
 | |
| def main():
 | |
| 
 | |
|     parser = argparse.ArgumentParser(
 | |
|         description="""
 | |
|         For Two line scenario use --line twice as shown in example, for multi line scenario
 | |
|         use --line argument to create multiple lines
 | |
|         \n
 | |
|            create_chamberview.py -m "localhost" -o "8080" -cs "scenario_name" 
 | |
|              --line "Resource=1.1 Profile=STA-AC Amount=1 Uses-1=wiphy0 Uses-2=AUTO Freq=-1 
 | |
|                     DUT=Test DUT_Radio=Radio-1 Traffic=http VLAN=" 
 | |
|              --line "Resource=1.1 Profile=upstream Amount=1 Uses-1=eth1 Uses-2=AUTO Freq=-1 
 | |
|                     DUT=Test DUT_Radio=Radio-1 Traffic=http VLAN="
 | |
|            ********************************      OR        ********************************             
 | |
|            create_chamberview.py -m "localhost" -o "8080" -cs "scenario_name"
 | |
|              --raw_line "profile_link 1.1 STA-AC 10 'DUT: temp Radio-1' tcp-dl-6m-vi wiphy0,AUTO -1"
 | |
|              --raw_line "profile_link 1.1 upstream 1 'DUT: temp Radio-1' tcp-dl-6m-vi eth1,AUTO -1"
 | |
|            
 | |
|            """)
 | |
|     parser.add_argument("-m", "--lfmgr", type=str,
 | |
|                         help="address of the LANforge GUI machine (localhost is default)")
 | |
|     parser.add_argument("-o", "--port", type=int, default=8080,
 | |
|                         help="IP Port the LANforge GUI is listening on (8080 is default)")
 | |
|     parser.add_argument("-cs", "--create_scenario", "--create_lf_scenario", type=str,
 | |
|                         help="name of scenario to be created")
 | |
|     parser.add_argument("-l", "--line", action='append', nargs='+',
 | |
|                         help="line number", default=[])
 | |
|     parser.add_argument("-rl", "--raw_line", action='append', nargs=1,
 | |
|                         help="raw lines", default=[])
 | |
|     parser.add_argument("-ds", "--delete_scenario", default=False, action='store_true',
 | |
|                         help="delete scenario (by default: False)")
 | |
|     args = parser.parse_args()
 | |
| 
 | |
| 
 | |
|     Create_Chamberview = CreateChamberview(lfmgr=args.lfmgr,
 | |
|                                            port=args.port,
 | |
|                                            )
 | |
|     if args.delete_scenario:
 | |
|         Create_Chamberview.clean_cv_scenario(type="Network-Connectivity", scenario_name=args.create_scenario)
 | |
| 
 | |
|     Create_Chamberview.setup(create_scenario=args.create_scenario,
 | |
|                              line=args.line,
 | |
|                              raw_line=args.raw_line)
 | |
|     Create_Chamberview.build(args.create_scenario)
 | |
| 
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 | 
