예제 #1
0
    def __init__(self, args, kwargs):

        self.add_calls = 0
        self.results_folder = args.results_folder

        self.disjoint_enabled = args.disjoint_enabled
        self.default_enabled = args.default_enabled
        self.integrate_enabled = args.integrate_enabled
        self.multitable_enabled = args.multitable_enabled
        self.ragel_enabled = args.ragel_enabled
        self.partition_enabled = args.partition_enabled
        self.switch_cnt = args.switch_cnt
        self.cache_enabled = args.cache_enabled
        self.edge_contraction_enabled = args.edge_contraction_enabled
        self.preddecomp_enabled = args.preddecomp_enabled
        self.use_pyretic = args.use_pyretic
        if args.write_log:
            self.write_log = args.write_log
        else:
            self.write_log = os.path.join('pyretic/evaluations',
                                          self.results_folder, 'rt_log.txt')
        self.use_fdd = args.use_fdd

        opt_flags = (self.disjoint_enabled, self.default_enabled,
                     self.integrate_enabled, self.multitable_enabled,
                     self.ragel_enabled, self.partition_enabled,
                     self.switch_cnt, self.cache_enabled,
                     self.edge_contraction_enabled, self.preddecomp_enabled)
        """ Start the frenetic compiler-server """
        netkat_out = None
        if not self.use_pyretic:
            netkat_cmd = "bash ~/pyretic/start-frenetic.sh"
            try:
                netkat_out = subprocess.Popen(netkat_cmd,
                                              shell=True,
                                              stderr=subprocess.STDOUT)
            except Exception as e:
                print "Could not start frenetic server successfully."
                print e
                sys.exit(1)

        Stat.start(self.results_folder,
                   (self.disjoint_enabled, self.integrate_enabled,
                    self.multitable_enabled, self.ragel_enabled))
        self.runtime = Runtime(None,
                               eval_path.main,
                               eval_path.path_main,
                               kwargs,
                               opt_flags=opt_flags,
                               mode='proactive0',
                               use_pyretic=self.use_pyretic,
                               use_fdd=self.use_fdd,
                               offline=True,
                               write_log=self.write_log,
                               restart_frenetic=False)
        Stat.stop()
        if netkat_out:
            netkat_out.kill()
        self.kill_netkat_server()
예제 #2
0
def main():
    global of_client
    (op, options, args, kwargs_to_pass) = parseArgs()
    if options.mode == 'i':
        options.mode = 'interpreted'
    elif options.mode == 'r0':
        options.mode = 'reactive0'
    try:
        module_name = args[0]
    except IndexError:
        print 'Module must be specified'
        print ''
        op.print_usage()
        sys.exit(1)
    try:
        module = import_module(module_name)
    except ImportError:
        print 'Must be a valid python module'
        print 'e.g, full module name,'
        print '     no .py suffix,'
        print '     located on the system PYTHONPATH'
        print ''
        op.print_usage()
        sys.exit(1)

    main = module.main
    kwargs = {
        k: v
        for [k, v] in [i.lstrip('--').split('=') for i in kwargs_to_pass]
    }

    sys.setrecursionlimit(
        1500)  #INCREASE THIS IF "maximum recursion depth exceeded"

    runtime = Runtime(Backend(), main, kwargs, options.mode, options.verbosity,
                      False, False)
    if not options.frontend_only:
        try:
            output = subprocess.check_output('echo $PYTHONPATH',
                                             shell=True).strip()
        except:
            print 'Error: Unable to obtain PYTHONPATH'
            sys.exit(1)
        poxpath = None
        for p in output.split(':'):
            if re.match('.*pox/?$', p):
                poxpath = os.path.abspath(p)
                break
        if poxpath is None:
            print 'Error: pox not found in PYTHONPATH'
            sys.exit(1)
        pox_exec = os.path.join(poxpath, 'pox.py')
        python = sys.executable
        of_client = subprocess.Popen(
            [python, pox_exec, 'of_client.pox_client'],
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT)

    signal.signal(signal.SIGINT, signal_handler)
    signal.pause()
예제 #3
0
    def __init__(self, args, kwargs):
        
        self.add_calls = 0       
        self.results_folder = args.results_folder

        self.disjoint_enabled = args.disjoint_enabled
        self.default_enabled = args.default_enabled
        self.integrate_enabled = args.integrate_enabled
        self.multitable_enabled = args.multitable_enabled
        self.ragel_enabled = args.ragel_enabled
        self.partition_enabled = args.partition_enabled
        self.switch_cnt = args.switch_cnt
        self.cache_enabled = args.cache_enabled
        self.edge_contraction_enabled = args.edge_contraction_enabled
        self.preddecomp_enabled = args.preddecomp_enabled
        self.use_pyretic = args.use_pyretic 
        if args.write_log:
            self.write_log = args.write_log
        else:
            self.write_log = os.path.join('pyretic/evaluations',
                                          self.results_folder, 'rt_log.txt')
        self.use_fdd = args.use_fdd
        
        opt_flags = (self.disjoint_enabled, self.default_enabled, 
                     self.integrate_enabled, self.multitable_enabled,
                     self.ragel_enabled, self.partition_enabled, 
                     self.switch_cnt,
                     self.cache_enabled, self.edge_contraction_enabled,
                     self.preddecomp_enabled
                     )
        """ Start the frenetic compiler-server """
        netkat_out = None
        if not self.use_pyretic:
            netkat_cmd = "bash ~/pyretic/start-frenetic.sh"
            try:
                netkat_out = subprocess.Popen(netkat_cmd, shell=True,
                                          stderr=subprocess.STDOUT)
            except Exception as e:
                print "Could not start frenetic server successfully."
                print e
                sys.exit(1)
        
        Stat.start(self.results_folder, (self.disjoint_enabled, self.integrate_enabled, self.multitable_enabled, self.ragel_enabled))
        self.runtime = Runtime(None, eval_path.main, eval_path.path_main, kwargs,
                               opt_flags = opt_flags, mode = 'proactive0',
                               use_pyretic = self.use_pyretic, use_fdd = self.use_fdd,
                               offline=True,
                               write_log = self.write_log, restart_frenetic = False)
        Stat.stop()
        if netkat_out:
            netkat_out.kill()
        self.kill_netkat_server()
예제 #4
0
    def __init__(self, args, kwargs):
        
        self.add_calls = 0       
        self.results_folder = args.results_folder

        self.disjoint_enabled = args.disjoint_enabled
        self.default_enabled = args.default_enabled
        self.integrate_enabled = args.integrate_enabled
        self.multitable_enabled = args.multitable_enabled
        self.ragel_enabled = args.ragel_enabled
        self.partition_enabled = args.partition_enabled
        self.switch_cnt = args.switch_cnt
        self.cache_enabled = args.cache_enabled
        self.edge_contraction_enabled = args.edge_contraction_enabled
        self.use_pyretic = args.use_pyretic 
        
        opt_flags = (self.disjoint_enabled, self.default_enabled, 
                     self.integrate_enabled, self.multitable_enabled,
                     self.ragel_enabled, self.partition_enabled, 
                     self.switch_cnt,
                     self.cache_enabled, self.edge_contraction_enabled,
                     )
        """ Start the frenetic compiler-server """
        if not self.use_pyretic:
            netkat_cmd = "bash start-frenetic.sh"
            try:
                output = subprocess.Popen(netkat_cmd, shell=True,
                                          stderr=subprocess.STDOUT)
            except Exception as e:
                print "Could not start frenetic server successfully."
                print e
                sys.exit(1)
        
        Stat.start(self.results_folder, (self.disjoint_enabled, self.integrate_enabled, self.multitable_enabled, self.ragel_enabled))
        self.runtime = Runtime(None, eval_path.main, eval_path.path_main, kwargs,
                    opt_flags = opt_flags, mode = 'proactive0', 
                    use_pyretic = self.use_pyretic, offline=True)
        
        Stat.stop()
예제 #5
0
class eval_compilation:
    def __init__(self, args, kwargs):

        self.add_calls = 0
        self.results_folder = args.results_folder

        self.disjoint_enabled = args.disjoint_enabled
        self.default_enabled = args.default_enabled
        self.integrate_enabled = args.integrate_enabled
        self.multitable_enabled = args.multitable_enabled
        self.ragel_enabled = args.ragel_enabled
        self.partition_enabled = args.partition_enabled
        self.switch_cnt = args.switch_cnt
        self.cache_enabled = args.cache_enabled
        self.edge_contraction_enabled = args.edge_contraction_enabled
        self.preddecomp_enabled = args.preddecomp_enabled
        self.use_pyretic = args.use_pyretic
        if args.write_log:
            self.write_log = args.write_log
        else:
            self.write_log = os.path.join('pyretic/evaluations',
                                          self.results_folder, 'rt_log.txt')
        self.use_fdd = args.use_fdd

        opt_flags = (self.disjoint_enabled, self.default_enabled,
                     self.integrate_enabled, self.multitable_enabled,
                     self.ragel_enabled, self.partition_enabled,
                     self.switch_cnt, self.cache_enabled,
                     self.edge_contraction_enabled, self.preddecomp_enabled)
        """ Start the frenetic compiler-server """
        netkat_out = None
        if not self.use_pyretic:
            netkat_cmd = "bash ~/pyretic/start-frenetic.sh"
            try:
                netkat_out = subprocess.Popen(netkat_cmd,
                                              shell=True,
                                              stderr=subprocess.STDOUT)
            except Exception as e:
                print "Could not start frenetic server successfully."
                print e
                sys.exit(1)

        Stat.start(self.results_folder,
                   (self.disjoint_enabled, self.integrate_enabled,
                    self.multitable_enabled, self.ragel_enabled))
        self.runtime = Runtime(None,
                               eval_path.main,
                               eval_path.path_main,
                               kwargs,
                               opt_flags=opt_flags,
                               mode='proactive0',
                               use_pyretic=self.use_pyretic,
                               use_fdd=self.use_fdd,
                               offline=True,
                               write_log=self.write_log,
                               restart_frenetic=False)
        Stat.stop()
        if netkat_out:
            netkat_out.kill()
        self.kill_netkat_server()

    def kill_netkat_server(self):
        print "Killing frenetic.."
        kill_cmd = "sudo bash kill-frenetic.sh"
        try:
            netkat_out = subprocess.check_output(shlex.split(kill_cmd))
        except Exception as e:
            print "Could not kill the frenetic server."
            print e
            sys.exit(1)

    def recompile_paths(self):
        """ Recompile DFA based on new path policy, which in turns updates the
        runtime's policy member. """
        policy_fragments = pathcomp.add_query(
            self.path_policy, NUM_PATH_TAGS, self.disjoint_enabled,
            self.default_enabled, self.multitable_enabled
            and self.integrate_enabled, self.ragel_enabled,
            self.partition_enabled)

        if self.multitable_enabled and self.integrate_enabled:
            (self.runtime.path_in_table.policy,
             self.runtime.path_out_table.policy) = policy_fragments
        else:
            (in_tag, in_cap, out_tag, out_cap) = policy_fragments
            self.runtime.path_in_tagging.policy = in_tag
            self.runtime.path_in_capture.policy = in_cap
            self.runtime.path_out_tagging.policy = out_tag
            self.runtime.path_out_capture.policy = out_cap
            self.runtime.path_in_table.policy = in_tag + in_cap
            self.runtime.path_out_table.policy = out_tag + out_cap

    def add(self, **aparams):
        self.path_policy = eval_path.path_main(**aparams)

        self.add_calls += 1
        results_folder = "%s_%d" % (self.results_folder[:-1], self.add_calls)

        Stat.start(results_folder,
                   (self.disjoint_enabled, self.integrate_enabled,
                    self.multitable_enabled, self.ragel_enabled))

        self.recompile_paths()
        self.runtime.get_subpolicy_compile_stats(eval_path.path_main)

        Stat.stop()

    def get_vf_tagging_policy(self):
        return None

    def get_vf_untagging_policy(self):
        return None
예제 #6
0
                                   stderr=subprocess.STDOUT)
     except Exception as e:
         print "Could not start frenetic server successfully."
         print e
         sys.exit(1)
 """ Start the runtime. """
 opt_flags_arg = (options.disjoint_enabled, options.default_enabled,
                  options.integrate_enabled, options.multitable_enabled,
                  options.ragel_enabled, options.partition_enabled,
                  options.switch_cnt, options.cache_enabled,
                  options.edge_contraction_enabled)
 runtime = Runtime(Backend(),
                   main,
                   path_main,
                   kwargs,
                   mode=options.mode,
                   verbosity=options.verbosity,
                   opt_flags=opt_flags_arg,
                   use_nx=options.nx,
                   pipeline=options.pipeline,
                   use_pyretic=options.use_pyretic)
 """ Start pox backend. """
 if not options.frontend_only:
     try:
         output = subprocess.check_output('echo $PYTHONPATH',
                                          shell=True).strip()
     except:
         print 'Error: Unable to obtain PYTHONPATH'
         sys.exit(1)
     poxpath = None
     for p in output.split(':'):
         if re.match('.*pox/?$', p):
예제 #7
0
class eval_compilation:

    def __init__(self, args, kwargs):
        
        self.add_calls = 0       
        self.results_folder = args.results_folder

        self.disjoint_enabled = args.disjoint_enabled
        self.default_enabled = args.default_enabled
        self.integrate_enabled = args.integrate_enabled
        self.multitable_enabled = args.multitable_enabled
        self.ragel_enabled = args.ragel_enabled
        self.partition_enabled = args.partition_enabled
        self.switch_cnt = args.switch_cnt
        self.cache_enabled = args.cache_enabled
        self.edge_contraction_enabled = args.edge_contraction_enabled
        self.preddecomp_enabled = args.preddecomp_enabled
        self.use_pyretic = args.use_pyretic 
        if args.write_log:
            self.write_log = args.write_log
        else:
            self.write_log = os.path.join('pyretic/evaluations',
                                          self.results_folder, 'rt_log.txt')
        self.use_fdd = args.use_fdd
        
        opt_flags = (self.disjoint_enabled, self.default_enabled, 
                     self.integrate_enabled, self.multitable_enabled,
                     self.ragel_enabled, self.partition_enabled, 
                     self.switch_cnt,
                     self.cache_enabled, self.edge_contraction_enabled,
                     self.preddecomp_enabled
                     )
        """ Start the frenetic compiler-server """
        netkat_out = None
        if not self.use_pyretic:
            netkat_cmd = "bash ~/pyretic/start-frenetic.sh"
            try:
                netkat_out = subprocess.Popen(netkat_cmd, shell=True,
                                          stderr=subprocess.STDOUT)
            except Exception as e:
                print "Could not start frenetic server successfully."
                print e
                sys.exit(1)
        
        Stat.start(self.results_folder, (self.disjoint_enabled, self.integrate_enabled, self.multitable_enabled, self.ragel_enabled))
        self.runtime = Runtime(None, eval_path.main, eval_path.path_main, kwargs,
                               opt_flags = opt_flags, mode = 'proactive0',
                               use_pyretic = self.use_pyretic, use_fdd = self.use_fdd,
                               offline=True,
                               write_log = self.write_log, restart_frenetic = False)
        Stat.stop()
        if netkat_out:
            netkat_out.kill()
        self.kill_netkat_server()

    def kill_netkat_server(self):
        print "Killing frenetic.."
        kill_cmd = "sudo bash kill-frenetic.sh"
        try:
            netkat_out = subprocess.check_output(shlex.split(kill_cmd))
        except Exception as e:
            print "Could not kill the frenetic server."
            print e
            sys.exit(1)
    
    def recompile_paths(self):
        """ Recompile DFA based on new path policy, which in turns updates the
        runtime's policy member. """
        policy_fragments = pathcomp.add_query(self.path_policy, NUM_PATH_TAGS, 
                self.disjoint_enabled, self.default_enabled, self.multitable_enabled and self.integrate_enabled, 
                self.ragel_enabled, self.partition_enabled)

        if self.multitable_enabled and self.integrate_enabled:
            (self.runtime.path_in_table.policy, self.runtime.path_out_table.policy) = policy_fragments
        else:
            (in_tag, in_cap, out_tag, out_cap) = policy_fragments
            self.runtime.path_in_tagging.policy  = in_tag
            self.runtime.path_in_capture.policy  = in_cap
            self.runtime.path_out_tagging.policy = out_tag
            self.runtime.path_out_capture.policy = out_cap
            self.runtime.path_in_table.policy = in_tag + in_cap
            self.runtime.path_out_table.policy = out_tag + out_cap    
    
    def add(self, **aparams):
        self.path_policy = eval_path.path_main(**aparams)
        
        self.add_calls += 1
        results_folder = "%s_%d" % (self.results_folder[:-1], self.add_calls)
        
        Stat.start(results_folder, (self.disjoint_enabled, self.integrate_enabled, self.multitable_enabled, self.ragel_enabled))
        
        self.recompile_paths()
        self.runtime.get_subpolicy_compile_stats(eval_path.path_main)
        
        Stat.stop()

    def get_vf_tagging_policy(self):
        return None


    def get_vf_untagging_policy(self):
        return None
예제 #8
0
                print "\nkilling log"
                import sys
                sys.exit(0)
            logger.handle(to_log)
    log_level = verbosity_map.get(options.verbosity, logging.DEBUG)
    log_process = Process(target=log_writer,args=(logging_queue, log_level,))
    log_process.daemon = True
    log_process.start()

    # Set default handler.
    logger = logging.getLogger()
    handler = util.QueueStreamHandler(logging_queue)
    logger.addHandler(handler)
    logger.setLevel(log_level)
    
    runtime = Runtime(Backend(),main,path_main,kwargs,options.mode,options.verbosity)
    if not options.frontend_only:
        try:
            output = subprocess.check_output('echo $PYTHONPATH',shell=True).strip()
        except:
            print 'Error: Unable to obtain PYTHONPATH'
            sys.exit(1)
        poxpath = None
        for p in output.split(':'):
             if re.match('.*pox/?$',p):
                 poxpath = os.path.abspath(p)
                 break
        if poxpath is None:
            print 'Error: pox not found in PYTHONPATH'
            sys.exit(1)
        pox_exec = os.path.join(poxpath,'pox.py')
예제 #9
0
    except ImportError, e:
        print 'Must be a valid python module'
        print 'e.g, full module name,'
        print '     no .py suffix,'
        print '     located on the system PYTHONPATH'
        print ''
        print 'Exception message for ImportError was:'
        print e
        sys.exit(1)

    main = module.main
    kwargs = { k : v for [k,v] in [ i.lstrip('--').split('=') for i in kwargs_to_pass ]}

    sys.setrecursionlimit(1500) #INCREASE THIS IF "maximum recursion depth exceeded"
    
    runtime = Runtime(Backend(),main,kwargs,options.mode,options.verbosity,False,False)
    if not options.frontend_only:
        try:
            output = subprocess.check_output('echo $PYTHONPATH',shell=True).strip()
        except:
            print 'Error: Unable to obtain PYTHONPATH'
            sys.exit(1)
        poxpath = None
        for p in output.split(':'):
             if re.match('.*pox/?$',p):
                 poxpath = os.path.abspath(p)
                 break
        if poxpath is None:
            print 'Error: pox not found in PYTHONPATH'
            sys.exit(1)
        pox_exec = os.path.join(poxpath,'pox.py')