def main(argv=None): '''Command line options.''' program_name = os.path.basename(sys.argv[0]) program_version = "v0.2" program_build_date = "%s" % __updated__ program_version_string = '%%prog %s (%s)' % (program_version, program_build_date) #program_usage = '''usage: spam two eggs''' # optional - will be autogenerated by optparse program_longdesc = '''''' # optional - give further explanation about what the program does program_license = "Copyright 2014 user_name (organization_name) \ Licensed under the Apache License 2.0\nhttp://www.apache.org/licenses/LICENSE-2.0" if argv is None: argv = sys.argv[1:] try: # setup option parser usage= "\t-e --create-ovs=IPADDRESS -t=TOPOLOGYNAME (create OVS network)\n\t-p tcl/r10.tcl (parse r10.tcl file and save database)\n\t-s r20 (show the graph of r20 topology)" parser = OptionParser(version=program_version_string, epilog=program_longdesc, description=program_license,usage=usage) parser.add_option("-i", "--in", dest="infile", help="set input path [default: %default]", metavar="FILE") parser.add_option("-o", "--out", dest="outfile", help="set output path [default: %default]", metavar="FILE") parser.add_option("-l", dest="list", help="list elements of database [all, host, topology, link, node, sflow]"); parser.add_option("-s", "--show", dest="show", help="show a network graph of topology",metavar="topology"); parser.add_option("-c","--clear", dest="clear", help="clear entries on the inputted argument [all, host, topology, link, node, sflow]",metavar="element"); parser.add_option("-p", dest="parse", help="parse Brite topology file", metavar="FILE") parser.add_option("-f", "--flow", dest="flow", help="get a routing table of sdn controller ",metavar="IP-address of SDN controller"); #parser.add_option("-a", "--alarm", action="store_true",dest="alarm",default=False, help="get the alarm number from IDS "); eostgroup = OptionGroup(parser, "Experiment options") eostgroup.add_option("-e", action="store_true", dest="experimental",default=False, help="create virtual SDN network") eostgroup.add_option("-j", dest="sampling", help="set sampling configuration json file", metavar="FILE") eostgroup.add_option("-t", "--topology", dest="topology", help="set topology ", metavar="NAME") eostgroup.add_option("--create-ovs", dest="create_ovs_target", help="create OVS network at the target host",metavar="TARGET-IP-ADDRESS") eostgroup.add_option("--clear-ovs", dest="clear_ovs_target", help="clear OVS network at the target host",metavar="TARGET-IP-ADDRESS") eostgroup.add_option("--create-sflow", dest="create_sflow_target", help="create sflow agnets at the target host",metavar="TARGET-IP-ADDRESS") eostgroup.add_option("--clear-sflow", dest="clear_sflow_target", help="clear sflow agnets at the target host",metavar="TARGET-IP-ADDRESS") parser.add_option_group(eostgroup) hostgroup = OptionGroup(parser, "Host registration options") hostgroup.add_option("-r", "--register-host", action="store_true", dest="register_host",default=False, help="register host") hostgroup.add_option("--host-ip", dest="hostip", help="set machine ip address", metavar="IP-ADDRESS") hostgroup.add_option("--user-id", dest="userid", help="set user id") hostgroup.add_option("--password", dest="password", help="set user password") hostgroup.add_option("--controller-ip", dest="controllerip", help="set SDN controller ip") hostgroup.add_option("--inter-ip", dest="interip", help="set the internal ip of the host") parser.add_option_group(hostgroup) # set defaults parser.set_defaults(outfile="./out.txt", infile="./in.txt",role="ovs-host",controllerip="",interip="") dbmanager = DBManager(debug=DEBUG) hostmanager = HostManager(dbmanager) networkmanager = NetworkManager(dbmanager,hostmanager,DEBUG) # process options (opts, args) = parser.parse_args(argv) if opts.list : if opts.list == "all" : dbmanager.list_DB_element("host") dbmanager.list_DB_element("topology") dbmanager.list_DB_element("link") dbmanager.list_DB_element("node") dbmanager.list_DB_element("sflow") elif opts.list == "host": dbmanager.list_DB_element("host") elif opts.list == "topology": dbmanager.list_DB_element("topology") elif opts.list == "link": dbmanager.list_DB_element("link") elif opts.list == "node": dbmanager.list_DB_element("node") elif opts.list == "sflow": dbmanager.list_DB_element("sflow") if opts.parse : topologyparser = Parser(dbmanager,opts.parse,DEBUG) topologyparser.parse_topology() if opts.flow: networkmanager.get_route_table(opts.flow) if opts.show: networkmanager.draw_network(opts.show) if opts.experimental: if opts.create_ovs_target: print("create ovs") networkmanager.generate_OVS_network(opts.topology, opts.create_ovs_target) elif opts.clear_ovs_target: print("clear ovs") print(opts.clear_ovs_target) networkmanager.remove_OVS_network(opts.clear_ovs_target) elif opts.create_sflow_target: print("create sflow agents") node_data = None if (opts.sampling != None): with open(opts.sampling) as json_file: input_data = json.load(json_file) node_data = input_data["nodes"] networkmanager.create_sflow_agnets(opts.create_sflow_target,node_data) print(opts.create_sflow_target) elif opts.clear_sflow_target: print("clear sflow agents") networkmanager.clear_sflow_agnets(opts.clear_sflow_target) print(opts.clear_sflow_target) if opts.clear : if opts.clear == "all": hostmanager.clear_hosts() dbmanager.execute_sql_command("drop table topology") dbmanager.execute_sql_command("drop table link") dbmanager.execute_sql_command("drop table node") dbmanager.execute_sql_command("drop table sflow") elif opts.clear == "host": hostmanager.clear_hosts() elif opts.clear == "topology": dbmanager.execute_sql_command("drop table topology") elif opts.clear == "link": dbmanager.execute_sql_command("drop table link") elif opts.clear == "node": dbmanager.execute_sql_command("drop table node") elif opts.clear == "sflow": dbmanager.execute_sql_command("drop table sflow") if opts.register_host: hostmanager.register_host(opts.hostip,opts.controllerip,opts.userid,opts.password,"None",opts.interip) # MAIN BODY # if len(argv) == 0: parser.print_help() except Exception, e: indent = len(program_name) * " " sys.stderr.write(program_name + ": " + repr(e) + "\n") sys.stderr.write(indent + " for help use --help") return 2