mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-11-02 19:58:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			208 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
import sys
 | 
						|
import os
 | 
						|
import importlib
 | 
						|
import argparse
 | 
						|
 | 
						|
if sys.version_info[0] != 3:
 | 
						|
    print("This script requires Python 3")
 | 
						|
    exit(1)
 | 
						|
 | 
						|
 | 
						|
sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../")))
 | 
						|
 | 
						|
lfcli_base = importlib.import_module("py-json.LANforge.lfcli_base")
 | 
						|
LFCliBase = lfcli_base.LFCliBase
 | 
						|
LFUtils = importlib.import_module("py-json.LANforge.LFUtils")
 | 
						|
add_file_endp = importlib.import_module("py-json.LANforge.add_file_endp")
 | 
						|
realm = importlib.import_module("py-json.realm")
 | 
						|
Realm = realm.Realm
 | 
						|
 | 
						|
 | 
						|
class CreateQVlan(Realm):
 | 
						|
    def __init__(self,
 | 
						|
                 host="localhost",
 | 
						|
                 port=8080,
 | 
						|
                 qvlan_parent=None,
 | 
						|
                 num_ports=1,
 | 
						|
                 dhcp=True,
 | 
						|
                 netmask=None,
 | 
						|
                 first_qvlan_ip=None,
 | 
						|
                 gateway=None,
 | 
						|
                 port_list=None,
 | 
						|
                 ip_list=None,
 | 
						|
                 exit_on_error=False,
 | 
						|
                 debug=False):
 | 
						|
        super().__init__(host, port)
 | 
						|
        if port_list is None:
 | 
						|
            port_list = []
 | 
						|
        if ip_list is None:
 | 
						|
            ip_list = []
 | 
						|
        self.host = host
 | 
						|
        self.port = port
 | 
						|
        self.qvlan_parent = qvlan_parent
 | 
						|
        self.debug = debug
 | 
						|
        self.port_list = port_list
 | 
						|
        self.ip_list = ip_list
 | 
						|
        self.exit_on_error = exit_on_error
 | 
						|
 | 
						|
        self.qvlan_profile = self.new_qvlan_profile()
 | 
						|
        self.qvlan_profile.num_qvlans = int(num_ports)
 | 
						|
        self.qvlan_profile.desired_qvlans = self.port_list
 | 
						|
        self.qvlan_profile.qvlan_parent = self.qvlan_parent
 | 
						|
        self.qvlan_profile.dhcp = dhcp
 | 
						|
        self.qvlan_profile.netmask = netmask
 | 
						|
        self.qvlan_profile.first_ip_addr = first_qvlan_ip
 | 
						|
        self.qvlan_profile.gateway = gateway
 | 
						|
        self.qvlan_profile.dhcp = dhcp
 | 
						|
 | 
						|
    def build(self):
 | 
						|
        print("Creating QVLAN stations")
 | 
						|
        self.qvlan_profile.create(
 | 
						|
            sleep_time=.5)
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    parser = LFCliBase.create_bare_argparse(
 | 
						|
        prog='create_qvlan.py',
 | 
						|
        formatter_class=argparse.RawTextHelpFormatter,
 | 
						|
        epilog='''Creates Q-VLAN stations attached to the Eth port of the user's choice.''',
 | 
						|
 | 
						|
        description='''\
 | 
						|
        create_qvlan.py:
 | 
						|
        ---------------------
 | 
						|
        Generic command ''')
 | 
						|
    parser.add_argument('--radio', help='radio EID, e.g: 1.wiphy2')
 | 
						|
    parser.add_argument(
 | 
						|
        '--qvlan_parent',
 | 
						|
        help='specifies parent port for qvlan creation',
 | 
						|
        default=None,
 | 
						|
        required=True)
 | 
						|
    parser.add_argument(
 | 
						|
        '--first_port',
 | 
						|
        help='specifies name of first port to be used',
 | 
						|
        default=None)
 | 
						|
    parser.add_argument(
 | 
						|
        '--num_ports',
 | 
						|
        type=int,
 | 
						|
        help='number of ports to create',
 | 
						|
        default=1)
 | 
						|
    parser.add_argument(
 | 
						|
        '--first_qvlan_ip',
 | 
						|
        help='specifies first static ip address to be used or dhcp',
 | 
						|
        default=None)
 | 
						|
    parser.add_argument(
 | 
						|
        '--netmask',
 | 
						|
        help='specifies netmask to be used with static ip addresses',
 | 
						|
        default=None)
 | 
						|
    parser.add_argument(
 | 
						|
        '--gateway',
 | 
						|
        help='specifies default gateway to be used with static addressing',
 | 
						|
        default=None)
 | 
						|
    parser.add_argument(
 | 
						|
        '--use_ports',
 | 
						|
        help='list of comma separated ports to use with ips, \'=\' separates name and ip { port_name1=ip_addr1,port_name1=ip_addr2 }.  Ports without ips will be left alone',
 | 
						|
        default=None)
 | 
						|
    tg_group = parser.add_mutually_exclusive_group()
 | 
						|
    tg_group.add_argument(
 | 
						|
        '--add_to_group',
 | 
						|
        help='name of test group to add cxs to',
 | 
						|
        default=None)
 | 
						|
    parser.add_argument(
 | 
						|
        '--cxs',
 | 
						|
        help='list of cxs to add/remove depending on use of --add_to_group or --del_from_group',
 | 
						|
        default=None)
 | 
						|
    parser.add_argument(
 | 
						|
        '--use_qvlans',
 | 
						|
        help='will create qvlans',
 | 
						|
        action='store_true',
 | 
						|
        default=False)
 | 
						|
 | 
						|
    args = parser.parse_args()
 | 
						|
 | 
						|
    update_group_args = {
 | 
						|
        "name": None,
 | 
						|
        "action": None,
 | 
						|
        "cxs": None
 | 
						|
    }
 | 
						|
    # update_group_args['name'] =
 | 
						|
    if args.first_qvlan_ip in ["dhcp", "DHCP"]:
 | 
						|
        dhcp = True
 | 
						|
    else:
 | 
						|
        dhcp = False
 | 
						|
    update_group_args['action'] = "add"
 | 
						|
    update_group_args['cxs'] = args.cxs
 | 
						|
    port_list = []
 | 
						|
    ip_list = []
 | 
						|
    if args.first_port and args.use_ports:
 | 
						|
        if args.first_port.startswith("sta"):
 | 
						|
            if args.num_ports and args.num_ports > 0:
 | 
						|
                start_num = int(args.first_port[3:])
 | 
						|
                port_list = LFUtils.port_name_series(
 | 
						|
                    prefix="sta",
 | 
						|
                    start_id=start_num,
 | 
						|
                    end_id=start_num + args.num_ports - 1,
 | 
						|
                    padding_number=10000,
 | 
						|
                    radio=args.radio)
 | 
						|
                print(1)
 | 
						|
        else:
 | 
						|
            if args.num_ports and args.qvlan_parent and (args.num_ports > 0) and args.qvlan_parent in args.first_port:
 | 
						|
                start_num = int(
 | 
						|
                    args.first_port[args.first_port.index('#') + 1:])
 | 
						|
                port_list = LFUtils.port_name_series(
 | 
						|
                    prefix=str(
 | 
						|
                        args.qvlan_parent) + "#",
 | 
						|
                    start_id=start_num,
 | 
						|
                    end_id=start_num + args.num_ports - 1,
 | 
						|
                    padding_number=10000,
 | 
						|
                    radio=args.radio)
 | 
						|
                print(2)
 | 
						|
            else:
 | 
						|
                raise ValueError(
 | 
						|
                    "Invalid values for num_ports [%s], qvlan_parent [%s], and/or first_port [%s].\n"
 | 
						|
                    "first_port must contain parent port and num_ports must be greater than 0" %
 | 
						|
                    (args.num_ports, args.qvlan_parent, args.first_port))
 | 
						|
    else:
 | 
						|
        if not args.use_ports:
 | 
						|
            num_ports = int(args.num_ports)
 | 
						|
            port_list = LFUtils.port_name_series(
 | 
						|
                prefix=str(
 | 
						|
                    args.qvlan_parent) + "#",
 | 
						|
                start_id=1,
 | 
						|
                end_id=num_ports,
 | 
						|
                padding_number=10000,
 | 
						|
                radio=args.radio)
 | 
						|
            print(3)
 | 
						|
        else:
 | 
						|
            temp_list = args.use_ports.split(',')
 | 
						|
            for port in temp_list:
 | 
						|
                port_list.append(port.split('=')[0])
 | 
						|
                if '=' in port:
 | 
						|
                    ip_list.append(port.split('=')[1])
 | 
						|
                else:
 | 
						|
                    ip_list.append(0)
 | 
						|
 | 
						|
            if len(port_list) != len(ip_list):
 | 
						|
                raise ValueError(
 | 
						|
                    temp_list, " ports must have matching ip addresses!")
 | 
						|
 | 
						|
    print(port_list)
 | 
						|
    print(ip_list)
 | 
						|
    create_qvlan = CreateQVlan(args.mgr,
 | 
						|
                               args.mgr_port,
 | 
						|
                               qvlan_parent=args.qvlan_parent,
 | 
						|
                               num_ports=args.num_ports,
 | 
						|
                               dhcp=dhcp,
 | 
						|
                               netmask=args.netmask,
 | 
						|
                               first_qvlan_ip=args.first_qvlan_ip,
 | 
						|
                               gateway=args.gateway,
 | 
						|
                               port_list=port_list,
 | 
						|
                               ip_list=ip_list,
 | 
						|
                               debug=args.debug)
 | 
						|
    create_qvlan.build()
 | 
						|
    print('Created %s QVLAN stations' % args.num_ports)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |