static int s1ap_mme_compare_plmn ( S1ap_PLMNidentity_t * plmn) { int i; uint16_t mcc; uint16_t mnc; uint16_t mnc_len; DevAssert (plmn != NULL); TBCD_TO_MCC_MNC (plmn, mcc, mnc, mnc_len); config_read_lock (&mme_config); for (i = 0; i < mme_config.gummei.nb_mme_gid; i++) { S1AP_DEBUG ("Comparing plmn_mcc %d/%d, plmn_mnc %d/%d plmn_mnc_len %d/%d\n", mme_config.gummei.plmn_mcc[i], mcc, mme_config.gummei.plmn_mnc[i], mnc, mme_config.gummei.plmn_mnc_len[i], mnc_len); if ((mme_config.gummei.plmn_mcc[i] == mcc) && (mme_config.gummei.plmn_mnc[i] == mnc) && (mme_config.gummei.plmn_mnc_len[i] == mnc_len)) /* * There is a matching plmn */ return TA_LIST_AT_LEAST_ONE_MATCH; } config_unlock (&mme_config); return TA_LIST_NO_MATCH; }
/* @brief compare a TAC */ static int s1ap_mme_compare_tac ( S1ap_TAC_t * tac) { int i; uint16_t tac_value; DevAssert (tac != NULL); OCTET_STRING_TO_TAC (tac, tac_value); config_read_lock (&mme_config); for (i = 0; i < mme_config.gummei.nb_plmns; i++) { S1AP_DEBUG ("Comparing config tac %d, received tac = %d\n", mme_config.gummei.plmn_tac[i], tac_value); if (mme_config.gummei.plmn_tac[i] == tac_value) return TA_LIST_AT_LEAST_ONE_MATCH; } config_unlock (&mme_config); return TA_LIST_NO_MATCH; }
int s11_sgw_init(const mme_config_t *mme_config_p) { int ret = 0; NwGtpv2cUlpEntityT ulp; NwGtpv2cUdpEntityT udp; NwGtpv2cTimerMgrEntityT tmrMgr; NwGtpv2cLogMgrEntityT logMgr; struct in_addr addr; char *s11_address_str = NULL; S11_DEBUG("Initializing S11 interface\n"); if (nwGtpv2cInitialize(&s11_sgw_stack_handle) != NW_OK) { S11_ERROR("Failed to initialize gtpv2-c stack\n"); goto fail; } /* Set ULP entity */ ulp.hUlp = (NwGtpv2cUlpHandleT)NULL; ulp.ulpReqCallback = s11_sgw_ulp_process_stack_req_cb; DevAssert(NW_OK == nwGtpv2cSetUlpEntity(s11_sgw_stack_handle, &ulp)); /* Set UDP entity */ udp.hUdp = (NwGtpv2cUdpHandleT)NULL; udp.udpDataReqCallback = s11_sgw_send_udp_msg; DevAssert(NW_OK == nwGtpv2cSetUdpEntity(s11_sgw_stack_handle, &udp)); /* Set Timer entity */ tmrMgr.tmrMgrHandle = (NwGtpv2cTimerMgrHandleT)NULL; tmrMgr.tmrStartCallback = s11_sgw_start_timer_wrapper; tmrMgr.tmrStopCallback = s11_sgw_stop_timer_wrapper; DevAssert(NW_OK == nwGtpv2cSetTimerMgrEntity(s11_sgw_stack_handle, &tmrMgr)); logMgr.logMgrHandle = 0; logMgr.logReqCallback = s11_sgw_log_wrapper; DevAssert(NW_OK == nwGtpv2cSetLogMgrEntity(s11_sgw_stack_handle, &logMgr)); if (itti_create_task(TASK_S11, &s11_sgw_thread, NULL) < 0) { S11_ERROR("gtpv1u phtread_create: %s\n", strerror(errno)); goto fail; } DevAssert(NW_OK == nwGtpv2cSetLogLevel(s11_sgw_stack_handle, NW_LOG_LEVEL_DEBG)); config_read_lock(&mme_config); addr.s_addr = mme_config.ipv4.sgw_ip_address_for_S11; config_unlock(&mme_config); s11_address_str = inet_ntoa(addr); DevAssert(s11_address_str != NULL); s11_send_init_udp(s11_address_str, 2123); S11_DEBUG("Initializing S11 interface: DONE\n"); return ret; fail: S11_DEBUG("Initializing S11 interface: FAILURE\n"); return -1; }