Beispiel #1
0
def pcef_create_session(args):
    chan = ServiceRegistry.get_rpc_channel(args.pcef, ServiceRegistry.LOCAL)
    client = LocalSessionManagerStub(chan)
    request = LocalCreateSessionRequest(
        sid=SIDUtils.to_pb(args.imsi),
        ue_ipv4=args.user_ip)
    client.CreateSession(request)
Beispiel #2
0
def send_create_session(client, args):
    sub1 = SubContextConfig('IMSI' + args.imsi, '192.168.128.74', 4)

    try:
        create_account_in_PCRF(args.imsi)
    except grpc.RpcError as e:
        print("gRPC failed with %s: %s" % (e.code(), e.details()))

    try:
        create_account_in_OCS(args.imsi)
    except grpc.RpcError as e:
        print("gRPC failed with %s: %s" % (e.code(), e.details()))

    req = LocalCreateSessionRequest(
        sid=SubscriberID(id=sub1.imsi),
        ue_ipv4=sub1.ip,
    )
    print("Sending LocalCreateSessionRequest with following fields:\n %s" %
          req)
    try:
        client.CreateSession(req)
    except grpc.RpcError as e:
        print("gRPC failed with %s: %s" % (e.code(), e.details()))

    req = SubscriberID(id=sub1.imsi)
    print("Sending EndSession with following fields:\n %s" % req)
    try:
        client.EndSession(req)
    except grpc.RpcError as e:
        print("gRPC failed with %s: %s" % (e.code(), e.details()))
Beispiel #3
0
def _build_create_session_data(subs: List[SubscriberID]):
    reqs = []
    for sid in subs:
        # build request
        req = LocalCreateSessionRequest(
            common_context=CommonSessionContext(
                sid=sid,
                apn=TEST_APN,
                rat_type=TGPP_LTE,
            ),
            rat_specific_context=RatSpecificContext(
                lte_context=LTESessionContext(bearer_id=1, ), ),
        )
        req_dict = json_format.MessageToDict(req)
        # Dumping AllocateIP request into json
        reqs.append(req_dict)
    with open(CREATE_SESSION_FILENAME, 'w') as file:
        json.dump(reqs, file, separators=(',', ':'))
Beispiel #4
0
    def test_reauth(self):
        """
        Send a Gx reauth request which installs one new static rule, one new
        dynamic rule, and removes one static and one dynamic rule.
        """
        dynamic_rule1 = create_uplink_rule('dynamic1',
                                           1,
                                           '46.10.10.1',
                                           tracking=PolicyRule.NO_TRACKING)
        dynamic_rule2 = create_uplink_rule('dynamic2',
                                           1,
                                           '46.10.10.2',
                                           tracking=PolicyRule.NO_TRACKING)

        # Initialize sub with 1 static and 1 dynamic rule
        sub = SubContextConfig('IMSI001010000088888', '192.168.128.74',
                               default_ambr_config, 4)
        self.test_util.controller.mock_create_session = Mock(
            return_value=CreateSessionResponse(
                credits=[create_update_response(sub.imsi, 1, 1024)],
                static_rules=[
                    session_manager_pb2.StaticRuleInstall(rule_id='policy1')
                ],
                dynamic_rules=[
                    session_manager_pb2.DynamicRuleInstall(
                        policy_rule=dynamic_rule1)
                ],
                usage_monitors=[],
            ), )
        self.test_util.controller.mock_terminate_session = Mock(
            return_value=SessionTerminateResponse(), )
        self.test_util.sessiond.CreateSession(
            LocalCreateSessionRequest(
                sid=SubscriberID(id=sub.imsi),
                ue_ipv4=sub.ip,
            ))
        self.assertEqual(
            self.test_util.controller.mock_create_session.call_count,
            1,
        )

        # first, send some packets so we know that the uplink rules are
        # accepting traffic
        self._assert_rules(
            sub,
            [
                session_manager_pb2.DynamicRuleInstall(
                    policy_rule=self.test_util.static_rules['policy1']),
                session_manager_pb2.DynamicRuleInstall(
                    policy_rule=dynamic_rule1)
            ],
        )

        # Now via reauth, remove the old rules and install new uplink rules
        # Verify the new uplink rules allow traffic
        reauth_result = self.test_util.proxy_responder.PolicyReAuth(
            PolicyReAuthRequest(
                imsi=sub.imsi,
                rules_to_remove=['dynamic1', 'policy1'],
                rules_to_install=[
                    session_manager_pb2.StaticRuleInstall(rule_id='policy2')
                ],
                dynamic_rules_to_install=[
                    session_manager_pb2.DynamicRuleInstall(
                        policy_rule=dynamic_rule2)
                ],
            ))
        self.assertEqual(
            reauth_result.result,
            session_manager_pb2.UPDATE_INITIATED,
        )
        self.assertEqual(len(reauth_result.failed_rules), 0)
        self._assert_rules(
            sub,
            [
                session_manager_pb2.DynamicRuleInstall(
                    policy_rule=self.test_util.static_rules['policy2']),
                session_manager_pb2.DynamicRuleInstall(
                    policy_rule=dynamic_rule2)
            ],
        )

        # Verify the old rules no longer allow traffic (uninstalled)
        self._assert_rules(
            sub,
            [
                session_manager_pb2.DynamicRuleInstall(
                    policy_rule=self.test_util.static_rules['policy1']),
                session_manager_pb2.DynamicRuleInstall(
                    policy_rule=dynamic_rule1)
            ],
            expected=0,
        )