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
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", "")
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
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
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"
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
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
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
def _get_csfb_mnc(): csfb_mnc = load_service_mconfig("mme", MME()).csfb_mnc if csfb_mnc: return csfb_mnc return ""
def _get_lac(): lac = load_service_mconfig("mme", MME()).lac if lac: return lac return 0
def _get_relay_enabled(): if load_service_mconfig("mme", MME()).relay_enabled: return "yes" return "no"
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
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
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