예제 #1
0
def _get_attached_enodeb_tacs():
    mme_config = load_service_mconfig("mme", MME())
    # attachedEnodebTacs overrides 'tac', which is being deprecated, but for
    # now, both are supported
    tac = mme_config.tac
    attached_enodeb_tacs = mme_config.attached_enodeb_tacs
    if len(attached_enodeb_tacs) == 0:
        return [tac]
    return attached_enodeb_tacs
예제 #2
0
def _get_dns_ip(iface_config):
    """
    Get dnsd interface IP without netmask.
    If caching is enabled, use the ip of interface that dnsd listens over.
    Otherwise, just use dns server in yml.
    """
    if load_service_mconfig("mme", MME()).enable_dns_caching:
        iface_name = get_service_config_value("dnsd", iface_config, "")
        return get_ip_from_if(iface_name)
    return get_service_config_value("spgw", "ipv4_dns", "")
예제 #3
0
def _get_enable_nat():
    nat_enabled = get_service_config_value("mme", "enable_nat", None)

    if nat_enabled is None:
        nat_enabled = load_service_mconfig("mme", MME()).nat_enabled

    if nat_enabled is not None:
        return nat_enabled

    return True
예제 #4
0
def _get_context():
    """
    Create the context which has the interface IP and the OAI log level to use.
    """
    mme_service_config = load_service_mconfig("mme", MME())

    context = {
        "mme_s11_ip": _get_iface_ip("mme", "s11_iface_name"),
        "sgw_s11_ip": _get_iface_ip("spgw", "s11_iface_name"),
        "sgw_s5s8_up_ip": _get_iface_ip("spgw", "sgw_s5s8_up_iface_name"),
        "remote_sgw_ip": get_service_config_value("mme", "remote_sgw_ip", ""),
        "s1ap_ip": _get_iface_ip("mme", "s1ap_iface_name"),
        "oai_log_level": _get_oai_log_level(),
        "ipv4_dns": _get_primary_dns_ip(mme_service_config, "dns_iface_name"),
        "ipv4_sec_dns": _get_secondary_dns_ip(mme_service_config),
        "ipv4_p_cscf_address": _get_ipv4_pcscf_ip(mme_service_config),
        "ipv6_dns": _get_ipv6_dns_ip(mme_service_config),
        "ipv6_p_cscf_address": _get_ipv6_pcscf_ip(mme_service_config),
        "identity": _get_identity(),
        "relay_enabled": _get_relay_enabled(mme_service_config),
        "non_eps_service_control": _get_non_eps_service_control(mme_service_config),
        "csfb_mcc": _get_csfb_mcc(mme_service_config),
        "csfb_mnc": _get_csfb_mnc(mme_service_config),
        "lac": _get_lac(mme_service_config),
        "use_stateless": get_service_config_value("mme", "use_stateless", ""),
        "attached_enodeb_tacs": _get_attached_enodeb_tacs(mme_service_config),
        "enable_nat": _get_enable_nat(mme_service_config),
        "federated_mode_map": _get_federated_mode_map(mme_service_config),
        "restricted_plmns": _get_restricted_plmns(mme_service_config),
        "restricted_imeis": _get_restricted_imeis(mme_service_config),
    }

    context["s1u_ip"] = mme_service_config.ipv4_sgw_s1u_addr or _get_iface_ip(
        "spgw", "s1u_iface_name"
    )

    # set ovs params
    for key in (
        "ovs_bridge_name",
        "ovs_gtp_port_number",
        "ovs_mtr_port_number",
        "ovs_internal_sampling_port_number",
        "ovs_internal_sampling_fwd_tbl",
        "ovs_uplink_port_number",
        "ovs_uplink_mac",
    ):
        context[key] = get_service_config_value("spgw", key, "")
    context["enable_apn_correction"] = get_service_config_value(
        "mme", "enable_apn_correction", ""
    )
    context["apn_correction_map_list"] = _get_apn_correction_map_list(
        mme_service_config
    )

    return context
예제 #5
0
def _get_non_eps_service_control():
    non_eps_service_control = \
        load_service_mconfig("mme", MME()).non_eps_service_control
    if non_eps_service_control:
        if non_eps_service_control == 0:
            return "OFF"
        elif non_eps_service_control == 1:
            return "CSFB_SMS"
        elif non_eps_service_control == 2:
            return "SMS"
    return "OFF"
예제 #6
0
    def _is_enabled(self) -> bool:
        """Return whether SMS should act as a relay

        SMS_ORC8R has value 3
        Returns:
        bool: True if MME's NON_EPS_SERVICE_CONFIG is set to SMS_ORC8R
        False otherwise
        """
        mme_service_config = load_service_mconfig("mme", MME())
        non_eps_service_control = mme_service_config.non_eps_service_control
        return non_eps_service_control and non_eps_service_control == 3
예제 #7
0
 def _is_enabled(self):
     """ 
     Returns True if MME's NON_EPS_SERVICE_CONFIG is set to SMS_ORC8R, False
     otherwise. smsd should only act as a relay when that config paramater
     is set to SMS_ORC8R (value 3).
     """
     mme_service_config = load_service_mconfig("mme", MME())
     non_eps_service_control = mme_service_config.non_eps_service_control
     if non_eps_service_control and non_eps_service_control == 3:
         return True
     return False
예제 #8
0
def _get_primary_dns_ip(iface_config):
    """
    Get dnsd interface IP without netmask.
    If caching is enabled, use the ip of interface that dnsd listens over.
    Otherwise, use dns server from service mconfig.
    """
    service_config = load_service_mconfig("mme", MME())
    if service_config.enable_dns_caching:
        iface_name = get_service_config_value("dnsd", iface_config, "")
        return get_ip_from_if(iface_name)
    else:
        return service_config.dns_primary or DEFAULT_DNS_IP_PRIMARY_ADDR
예제 #9
0
def _get_csfb_mnc():
    csfb_mnc = load_service_mconfig("mme", MME()).csfb_mnc
    if csfb_mnc:
        return csfb_mnc
    return ""
예제 #10
0
def _get_lac():
    lac = load_service_mconfig("mme", MME()).lac
    if lac:
        return lac
    return 0
예제 #11
0
def _get_relay_enabled():
    if load_service_mconfig("mme", MME()).relay_enabled:
        return "yes"
    return "no"
예제 #12
0
def _get_secondary_dns_ip():
    """
    Get the secondary dns ip from the service mconfig.
    """
    service_config = load_service_mconfig("mme", MME())
    return service_config.dns_secondary or DEFAULT_DNS_IP_SECONDARY_ADDR
예제 #13
0
def _get_apn_correction_map_list():
    mme_config = load_service_mconfig("mme", MME())
    if len(mme_config.apn_correction_map_list) == 0:
        return get_service_config_value("mme", "apn_correction_map_list", None)
    return mme_config.apn_correction_map_list
예제 #14
0
def _get_context():
    """
    Create the context which has the interface IP and the OAI log level to use.
    """
    mme_service_config = load_service_mconfig('mme', MME())
    nat = _get_enable_nat(mme_service_config)
    if nat:
        iface_name = get_service_config_value(
            'spgw',
            'sgw_s5s8_up_iface_name',
            '',
        )
    else:
        iface_name = get_service_config_value(
            'spgw',
            'sgw_s5s8_up_iface_name_non_nat',
            '',
        )
    context = {
        "mme_s11_ip":
        _get_iface_ip("mme", "s11_iface_name"),
        "sgw_s11_ip":
        _get_iface_ip("spgw", "s11_iface_name"),
        'sgw_s5s8_up_iface_name':
        iface_name,
        "remote_sgw_ip":
        get_service_config_value("mme", "remote_sgw_ip", ""),
        "s1ap_ip":
        _get_iface_ip("mme", "s1ap_iface_name"),
        "s1ap_ipv6":
        _get_iface_ipv6("mme", "s1ap_iface_name"),
        "s1ap_ipv6_enabled":
        get_service_config_value(
            "mme",
            "s1ap_ipv6_enabled",
            default=False,
        ),
        "oai_log_level":
        _get_oai_log_level(),
        "ipv4_dns":
        _get_primary_dns_ip(mme_service_config, "dns_iface_name"),
        "ipv4_sec_dns":
        _get_secondary_dns_ip(mme_service_config),
        "ipv4_p_cscf_address":
        _get_ipv4_pcscf_ip(mme_service_config),
        "ipv6_dns":
        _get_ipv6_dns_ip(mme_service_config),
        "ipv6_p_cscf_address":
        _get_ipv6_pcscf_ip(mme_service_config),
        "identity":
        _get_identity(),
        "relay_enabled":
        _get_relay_enabled(mme_service_config),
        "non_eps_service_control":
        _get_non_eps_service_control(mme_service_config, ),
        "csfb_mcc":
        _get_csfb_mcc(mme_service_config),
        "csfb_mnc":
        _get_csfb_mnc(mme_service_config),
        "lac":
        _get_lac(mme_service_config),
        "use_stateless":
        get_service_config_value("mme", "use_stateless", ""),
        "attached_enodeb_tacs":
        _get_attached_enodeb_tacs(mme_service_config),
        'enable_nat':
        nat,
        "federated_mode_map":
        _get_federated_mode_map(mme_service_config),
        "restricted_plmns":
        _get_restricted_plmns(mme_service_config),
        "restricted_imeis":
        _get_restricted_imeis(mme_service_config),
        "congestion_control_enabled":
        _get_congestion_control_config(mme_service_config, ),
        "service_area_map":
        _get_service_area_maps(mme_service_config),
        "accept_combined_attach_tau_wo_csfb":
        get_service_config_value("mme", "accept_combined_attach_tau_wo_csfb",
                                 ""),
        "sentry_config":
        mme_service_config.sentry_config,
        "enable5g_features":
        _get_converged_core_config(mme_service_config),
        "amf_default_slice_service_type":
        _get_default_slice_service_type_config(mme_service_config, ),
        "amf_default_slice_differentiator":
        _get_default_slice_differentiator_type_config(mme_service_config, ),
        "amf_name":
        _get_amf_name_config(mme_service_config),
        "amf_region_id":
        _get_amf_region_id(mme_service_config),
        "amf_set_id":
        _get_amf_set_id(mme_service_config),
        "amf_pointer":
        _get_amf_pointer(mme_service_config),
        "default_dnn":
        _get_default_dnn_config(mme_service_config),
        "auth_retry_max_count":
        _get_default_auth_retry_count(),
        "auth_retry_interval":
        _get_default_auth_timer_expire_msec(),
    }

    context["s1u_ip"] = mme_service_config.ipv4_sgw_s1u_addr or _get_iface_ip(
        "spgw",
        "s1u_iface_name",
    )

    context[
        "s1u_ipv6"] = mme_service_config.ipv6_sgw_s1u_addr or _get_iface_ipv6(
            "spgw",
            "s1u_iface_name",
        )

    try:
        sgw_s5s8_up_ip = get_ip_from_if_cidr(iface_name,
                                             IpPreference.IPV4_ONLY)
    except ValueError:
        # ignore the error to avoid MME crash
        logging.warning("Could not read IP of interface: %s", iface_name)
        sgw_s5s8_up_ip = "127.0.0.1/8"
    context["sgw_s5s8_up_ip"] = sgw_s5s8_up_ip

    # set ovs params
    for key in (
            "ovs_bridge_name",
            "ovs_gtp_port_number",
            "ovs_mtr_port_number",
            "ovs_internal_sampling_port_number",
            "ovs_internal_sampling_fwd_tbl",
            "ovs_uplink_port_number",
            "ovs_uplink_mac",
            "pipelined_managed_tbl0",
            "ebpf_enabled",
    ):
        context[key] = get_service_config_value("spgw", key, "")
    context["enable_apn_correction"] = get_service_config_value(
        "mme",
        "enable_apn_correction",
        "",
    )
    context["apn_correction_map_list"] = _get_apn_correction_map_list(
        mme_service_config, )

    return context