コード例 #1
0
ファイル: helper.py プロジェクト: pentikousis/C-BAS-framework
def accept_user_fs_request(fs_request):
    '''
    accepts a user flowspace request and adds it to user flowpscae.
    If a previous user flowspace is subset of what is being accepted, replace it
    with new flowpsace only to avoid duplicate.
    @param fs_request:  flowspace request to be accepted
    @type fs_request: list of RequestedUserFlowSpace
    @return: [fv_args,match_list] to be xmlrpc-called to fv
    @note: all fs_requests should belong to one user
    '''
    if len(fs_request) == 0:
        return [[], []]

    #check which of the previous user flowspaces are a subset of this flowspace
    ufs = UserFlowSpace.objects.filter(user=fs_request[0].user)
    for fs in ufs:
        if (singlefs_is_subset_of(fs, fs_request)):
            fs.delete()

    for single_fs in fs_request:
        user = single_fs.user
        ufs = UserFlowSpace(user=single_fs.user, approver=single_fs.admin)
        copy_fs(single_fs, ufs)
        ufs.save()
        single_fs.delete()

    [fv_args, match_list] = update_user_opts(user)

    return [fv_args, match_list]
コード例 #2
0
ファイル: helper.py プロジェクト: HalasNet/felix
def accept_user_fs_request(fs_request):
    '''
    accepts a user flowspace request and adds it to user flowpscae.
    If a previous user flowspace is subset of what is being accepted, replace it
    with new flowpsace only to avoid duplicate.
    @param fs_request:  flowspace request to be accepted
    @type fs_request: list of RequestedUserFlowSpace
    @return: [fv_args,match_list] to be xmlrpc-called to fv
    @note: all fs_requests should belong to one user
    '''
    if len(fs_request) == 0:
         return [[],[]]
     
    #check which of the previous user flowspaces are a subset of this flowspace
    ufs = UserFlowSpace.objects.filter(user=fs_request[0].user)
    for fs in ufs:
        if (singlefs_is_subset_of(fs,fs_request)):
            fs.delete()
     
    for single_fs in fs_request:
        user = single_fs.user
        ufs = UserFlowSpace(user=single_fs.user, approver=single_fs.admin)
        copy_fs(single_fs,ufs)
        ufs.save()
        single_fs.delete()
        
    [fv_args,match_list] = update_user_opts(user)

    return [fv_args,match_list]
コード例 #3
0
ファイル: manual.py プロジェクト: cargious/ocf
    def test_case1(self):
        from django.contrib.auth.models import User
        from openflow.optin_manager.opts.models import UserFlowSpace,Experiment, ExperimentFLowSpace

        # create a second experiemnt        
        username = "******"
        password = "******"
        u = User.objects.create(username=username, is_active=True)
        u.set_password(password)
        u.save()
        self.user_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.user_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
        #assign flowspace to user
        adm = User.objects.get(username="******")
        ufs = UserFlowSpace(user=u, ip_src_s=self.user_ip_src_s,
                             ip_src_e=self.user_ip_src_e,approver=adm)
        ufs.save()
        
        Experiment.objects.all().delete()
        ExperimentFLowSpace.objects.all().delete()
        
        exp = Experiment.objects.create(slice_id="first_id", project_name="first_project",
                                  project_desc="project description", slice_name="first slice",
                                  slice_desc="slice description", controller_url="http://controller.com",
                                  owner_email="owner email", owner_password="******") 
        expfs = ExperimentFLowSpace.objects.create(exp=exp, dpid="00:00:00:00:00:00:01",
                            ip_src_s=0x05866000, 
                            ip_src_e=0xa0000000, 
                             )  
        
        exp = Experiment.objects.create(slice_id="second_id", project_name="second_project",
                                  project_desc="project description", slice_name="second slice",
                                  slice_desc="slice description", controller_url="http://controller.com",
                                  owner_email="owner email", owner_password="******") 
        expfs = ExperimentFLowSpace.objects.create(exp=exp, dpid="00:00:00:00:00:00:02",
                            ip_src_s=0x00123456, 
                            ip_src_e=0x90123456, 
                             )  
        
        exp = Experiment.objects.create(slice_id="third_id", project_name="third_project",
                                  project_desc="project description", slice_name="third slice",
                                  slice_desc="slice description", controller_url="http://controller.com",
                                  owner_email="owner email", owner_password="******") 
        expfs = ExperimentFLowSpace.objects.create(exp=exp, dpid="00:00:00:00:00:00:03",
                            ip_src_s=0x00333456, 
                            ip_src_e=0x95123456, 
                             ) 
コード例 #4
0
ファイル: fulltests.py プロジェクト: cargious/ocf
    def prepare_om(self, proj_dir, flowvisor, ch_username, ch_passwd):
        """
        Flush the OM DB and add a flowvisor and user for the CH
        """
        call_env_command(proj_dir, "flush",
                         interactive=False)
        self.om_env = Env(proj_dir)
        self.om_env.switch_to()
        
        from django.contrib.auth.models import User
        from openflow.optin_manager.users.models import UserProfile
        from openflow.optin_manager.xmlrpc_server.models import FVServerProxy
        from openflow.optin_manager.xmlrpc_server.ch_api import om_ch_translate
        from openflow.optin_manager.opts.models import AdminFlowSpace, UserFlowSpace
        import random
        
        # Create the Expedient user
        u = User.objects.create(username=ch_username)
        u.set_password(ch_passwd)
        u.save()
        profile = UserProfile.get_or_create_profile(u) 
        profile.is_clearinghouse_user = True
        profile.save()
        
        # make a normal user on system
        username = "******"
        password = "******"
        u = User.objects.create(username=username, is_active=True)
        u.set_password(password)
        u.save()

        # assign flowspace to the user
        random.seed(0)
        self.user_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.user_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
        fields=["dl_src","dl_dst","vlan_id","tp_src","tp_dst"]
        random.shuffle(fields)

        (to_str,from_str,width,om_name,of_name) = om_ch_translate.attr_funcs[fields[0]]
        self.user_field_name = om_name
        self.user_field_s = random.randint(0,2**(width)-3)
        self.user_field_e = self.user_field_s + 1

        # assign full flowspace to admin:
        username = "******"
        password = "******"
        adm = User.objects.create(username=username, is_superuser=True,
                                  is_staff=True, is_active=True)
        adm.set_password(password)
        adm.save()
        profile = UserProfile.get_or_create_profile(adm) 
        profile.is_net_admin = True
        profile.supervisor = adm
        profile.max_priority_level = 7000
        profile.save()
        AdminFlowSpace.objects.create(user=adm)
        
        # assign flowspace to user
        ufs = UserFlowSpace(user=u, ip_src_s=self.user_ip_src_s,
                             ip_src_e=self.user_ip_src_e,approver=adm)
        setattr(ufs,"%s_s"%self.user_field_name,self.user_field_s)
        setattr(ufs,"%s_e"%self.user_field_name,self.user_field_e)
        ufs.save()     

        # Create the FV proxy connection
        fv = FVServerProxy(
            name="Flowvisor",
            username=flowvisor["username"],
            password=flowvisor["password"],
            url="https://%s:%s/xmlrpc" % (
                flowvisor["host"], flowvisor["xmlrpc_port"],
            ),
            verify_certs=False,
        )
        fv.save()
        
        self.om_client = xmlrpclib.ServerProxy(
            SCHEME+"://%s:%s@%s:%s/xmlrpc/xmlrpc/" % (
                ch_username, ch_passwd,
                test_settings.HOST, test_settings.OM_PORT,
            )
        )
        
        self.om_env.switch_from()
コード例 #5
0
ファイル: om.py プロジェクト: cargious/ocf
    def test_optin(self):
        from expedient.common.tests.client import Browser
        from openflow.optin_manager.opts.models import UserOpts, OptsFlowSpace 
        from openflow.optin_manager.opts.models import AdminFlowSpace, UserFlowSpace,Experiment, ExperimentFLowSpace
        from django.contrib.auth.models import User
        #make a normal user on system
        username = "******"
        password = "******"
        u = User.objects.create(username=username, is_active=True)
        u.set_password(password)
        u.save()

        
        #assign a flowspace to the user and experiment
        self.user_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.user_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
      
        self.exp_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.exp_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
        fields=["dl_src","dl_dst","vlan_id","tp_src","tp_dst"]
        random.shuffle(fields)


        from openflow.optin_manager.xmlrpc_server.ch_api import om_ch_translate
        (to_str,from_str,width,om_name,of_name) = om_ch_translate.attr_funcs[fields[0]]
        self.user_field_name = om_name
        self.user_field_s = random.randint(0,2**width-3)
        self.user_field_e = self.user_field_s + 1
        (to_str,from_str,width,om_name,of_name) = om_ch_translate.attr_funcs[fields[1]]
        self.exp_field_name = om_name
        self.exp_field_s = random.randint(0,2**width-3)
        self.exp_field_e = self.exp_field_s + 1  
        
        # assign full flowspace to admin:
        adm = User.objects.get(username="******")
        AdminFlowSpace.objects.create(user=adm)
        
        #assign flowspace to user
        ufs = UserFlowSpace(user=u, ip_src_s=self.user_ip_src_s,
                             ip_src_e=self.user_ip_src_e,approver=adm)
        setattr(ufs,"%s_s"%self.user_field_name,self.user_field_s)
        setattr(ufs,"%s_e"%self.user_field_name,self.user_field_e)
        ufs.save()     
        
        #create an experiment and assign a flowspace to it
        exp = Experiment.objects.create(slice_id="slice_id", project_name="project name",
                                  project_desc="project description", slice_name="slice name",
                                  slice_desc="slice description", controller_url="controller url",
                                  owner_email="owner email", owner_password="******") 
        expfs = ExperimentFLowSpace.objects.create(exp=exp, dpid="00:00:00:00:00:00:01",
                            ip_src_s=self.exp_ip_src_s, 
                            ip_src_e=self.exp_ip_src_e, 
                             )
        setattr(expfs,"%s_s"%self.exp_field_name,self.exp_field_s)
        setattr(expfs,"%s_e"%self.exp_field_name,self.exp_field_e)
        expfs.save() 
        
        # First authenticate
        b = Browser()

        logged_in = b.login(SCHEME+"://%s:%s/accounts/login/"%
                            (test_settings.HOST, test_settings.OM_PORT),
                            "user","password")
        self.assertTrue(logged_in,"Could not log in")
        
        g = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_in"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                dict(experiment=1))
        
        uopt = UserOpts.objects.filter(user__username__exact="user")[0]
        
        self.assertEqual(uopt.priority , 1)
        
        optfs = OptsFlowSpace.objects.filter(opt = uopt)[0]
        self.assertEqual(optfs.ip_src_s , max(self.user_ip_src_s,self.exp_ip_src_s))
        self.assertEqual(optfs.ip_src_e , min(self.user_ip_src_e,self.exp_ip_src_e))
        self.assertEqual(getattr(optfs,"%s_s"%self.user_field_name), self.user_field_s)
        self.assertEqual(getattr(optfs,"%s_e"%self.user_field_name), self.user_field_e)
        self.assertEqual(getattr(optfs,"%s_s"%self.exp_field_name), self.exp_field_s)
        self.assertEqual(getattr(optfs,"%s_e"%self.exp_field_name), self.exp_field_e)

        # now test opt out:
        g = b.get_and_post_form(SCHEME+"://%s:%s/opts/opt_out"%
                                (test_settings.HOST, test_settings.OM_PORT),
                                {"1":"checked"})
        optfs = OptsFlowSpace.objects.filter(opt = uopt)
        self.assertEqual(optfs.count(),0) 
        self.create_more_exps()  
コード例 #6
0
ファイル: tests.py プロジェクト: HalasNet/felix
    def setUp(self):
        # Create a test user
        self.test_user = User.objects.create_user(
                "user", "*****@*****.**", "password")
        profile = UserProfile.get_or_create_profile(self.test_user)

        # Create a test admin
        self.test_admin = User.objects.create_superuser(
                "admin", "*****@*****.**", "password")
        
        # Assign a flowpsace to uer
        self.user_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.user_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
    
        # Assign a flowpsace to experiment
        self.exp_ip_src_s = random.randint(0,0x80000000) & 0xFFFF0000
        self.exp_ip_src_e = random.randint(0x80000000,0xFFFFFFFF) & 0xFFFF0000
        
        # Choose a random field
        fields=["dl_src","dl_dst","vlan_id","tp_src","tp_dst"]
        random.shuffle(fields)
        (to_str,from_str,width,om_name,of_name) = om_ch_translate.attr_funcs[fields[0]]
        self.user_field_name = om_name
        self.user_field_s = random.randint(0,2**width-3)
        self.user_field_e = self.user_field_s + 1
        (to_str,from_str,width,om_name,of_name) = om_ch_translate.attr_funcs[fields[1]]
        self.exp_field_name = om_name
        self.exp_field_s = random.randint(0,2**width-3)
        self.exp_field_e = self.exp_field_s + 1 
              
        #save flowspace for user
        ufs = UserFlowSpace(user=self.test_user, ip_src_s=self.user_ip_src_s,
                             ip_src_e=self.user_ip_src_e,approver=self.test_admin)
        setattr(ufs,"%s_s"%self.user_field_name,self.user_field_s)
        setattr(ufs,"%s_e"%self.user_field_name,self.user_field_e)
        ufs.save()     
    
        #create an experiment and assign a flowspace to it
        exp = Experiment.objects.create(slice_id="slice_id_1", project_name="project name_1",
                                  project_desc="project description", slice_name="slice name_1",
                                  slice_desc="slice description", controller_url="controller url",
                                  owner_email="owner email", owner_password="******") 
        expfs = ExperimentFLowSpace.objects.create(exp=exp, dpid="00:00:00:00:00:00:01",
                            ip_src_s=self.exp_ip_src_s, 
                            ip_src_e=self.exp_ip_src_e, 
                             )
        setattr(expfs,"%s_s"%self.exp_field_name,self.exp_field_s)
        setattr(expfs,"%s_e"%self.exp_field_name,self.exp_field_e)
        expfs.save()     

        # Create dummy FV
        fv = DummyFV.objects.create()
        # Load up a fake topology in the Dummy FV
        fv.populateTopology(10, 20, use_random=USE_RANDOM)
            
        # create fake users for the Dummy FV
        username = "******"
        password = "******"
        u = User.objects.create(username=username)
        u.set_password(password)
        u.save()

        # Create the FV proxy connection
        FVServerProxy.objects.create(
            name="Flowvisor",
            username=username,
            password=password,

            url = SCHEME+"://%s:8443/dummyfv/%d/xmlrpc/" % (
                    HOST,fv.id,
            ),
        )
            
        #Login
        logged = self.client.login(username="******",password="******")
        self.assertEqual(logged,True)
コード例 #7
0
    def setUp(self):
        # Create a test user
        self.test_user = User.objects.create_user("user", "*****@*****.**",
                                                  "password")
        profile = UserProfile.get_or_create_profile(self.test_user)

        # Create a test admin
        self.test_admin = User.objects.create_superuser(
            "admin", "*****@*****.**", "password")

        # Assign a flowpsace to uer
        self.user_ip_src_s = random.randint(0, 0x80000000) & 0xFFFF0000
        self.user_ip_src_e = random.randint(0x80000000,
                                            0xFFFFFFFF) & 0xFFFF0000

        # Assign a flowpsace to experiment
        self.exp_ip_src_s = random.randint(0, 0x80000000) & 0xFFFF0000
        self.exp_ip_src_e = random.randint(0x80000000, 0xFFFFFFFF) & 0xFFFF0000

        # Choose a random field
        fields = ["dl_src", "dl_dst", "vlan_id", "tp_src", "tp_dst"]
        random.shuffle(fields)
        (to_str, from_str, width, om_name,
         of_name) = om_ch_translate.attr_funcs[fields[0]]
        self.user_field_name = om_name
        self.user_field_s = random.randint(0, 2**width - 3)
        self.user_field_e = self.user_field_s + 1
        (to_str, from_str, width, om_name,
         of_name) = om_ch_translate.attr_funcs[fields[1]]
        self.exp_field_name = om_name
        self.exp_field_s = random.randint(0, 2**width - 3)
        self.exp_field_e = self.exp_field_s + 1

        #save flowspace for user
        ufs = UserFlowSpace(user=self.test_user,
                            ip_src_s=self.user_ip_src_s,
                            ip_src_e=self.user_ip_src_e,
                            approver=self.test_admin)
        setattr(ufs, "%s_s" % self.user_field_name, self.user_field_s)
        setattr(ufs, "%s_e" % self.user_field_name, self.user_field_e)
        ufs.save()

        #create an experiment and assign a flowspace to it
        exp = Experiment.objects.create(slice_id="slice_id_1",
                                        project_name="project name_1",
                                        project_desc="project description",
                                        slice_name="slice name_1",
                                        slice_desc="slice description",
                                        controller_url="controller url",
                                        owner_email="owner email",
                                        owner_password="******")
        expfs = ExperimentFLowSpace.objects.create(
            exp=exp,
            dpid="00:00:00:00:00:00:01",
            ip_src_s=self.exp_ip_src_s,
            ip_src_e=self.exp_ip_src_e,
        )
        setattr(expfs, "%s_s" % self.exp_field_name, self.exp_field_s)
        setattr(expfs, "%s_e" % self.exp_field_name, self.exp_field_e)
        expfs.save()

        # Create dummy FV
        fv = DummyFV.objects.create()
        # Load up a fake topology in the Dummy FV
        fv.populateTopology(10, 20, use_random=USE_RANDOM)

        # create fake users for the Dummy FV
        username = "******"
        password = "******"
        u = User.objects.create(username=username)
        u.set_password(password)
        u.save()

        # Create the FV proxy connection
        FVServerProxy.objects.create(
            name="Flowvisor",
            username=username,
            password=password,
            url=SCHEME + "://%s:8443/dummyfv/%d/xmlrpc/" % (
                HOST,
                fv.id,
            ),
        )

        #Login
        logged = self.client.login(username="******", password="******")
        self.assertEqual(logged, True)