[PATCH] osmocom-bb[master]: host/mobile: use talloc for ms->name allocation
Review at https://gerrit.osmocom.org/2667 host/mobile: use talloc for ms->name allocation The approach of talloc memory management reduces memory usage, and prevents some buffer overflows, which were possible before. Change-Id: Icd6706117fdd7f1b3481b0e3817bbb3b31f12f60 --- M src/host/layer23/include/osmocom/bb/common/osmocom_data.h M src/host/layer23/src/common/main.c M src/host/layer23/src/mobile/app_mobile.c M src/host/layer23/src/mobile/gsm322.c M src/host/layer23/src/mobile/vty_interface.c 5 files changed, 57 insertions(+), 33 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/67/2667/1 diff --git a/src/host/layer23/include/osmocom/bb/common/osmocom_data.h b/src/host/layer23/include/osmocom/bb/common/osmocom_data.h index 17dad10..9b544ab 100644 --- a/src/host/layer23/include/osmocom/bb/common/osmocom_data.h +++ b/src/host/layer23/include/osmocom/bb/common/osmocom_data.h @@ -57,7 +57,7 @@ /* One Mobilestation for osmocom */ struct osmocom_ms { struct llist_head entity; - char name[32]; + char *name; struct osmo_wqueue l2_wq, sap_wq; uint16_t test_arfcn; struct osmol1_entity l1_entity; diff --git a/src/host/layer23/src/common/main.c b/src/host/layer23/src/common/main.c index 59cee03..693b10e 100644 --- a/src/host/layer23/src/common/main.c +++ b/src/host/layer23/src/common/main.c @@ -246,8 +246,7 @@ llist_add_tail(&ms->entity, &ms_list); - sprintf(ms->name, "1"); - + ms->name = talloc_strdup(ms, "1"); ms->test_arfcn = 871; handle_options(argc, argv); diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c index c74a93f..7dc7208 100644 --- a/src/host/layer23/src/mobile/app_mobile.c +++ b/src/host/layer23/src/mobile/app_mobile.c @@ -248,18 +248,21 @@ struct osmocom_ms *mobile_new(char *name) { static struct osmocom_ms *ms; + char *mncc_name; ms = talloc_zero(l23_ctx, struct osmocom_ms); if (!ms) { fprintf(stderr, "Failed to allocate MS\n"); return NULL; } - llist_add_tail(&ms->entity, &ms_list); - strcpy(ms->name, name); - + talloc_set_name(ms, "ms_%s", name); + ms->name = talloc_strdup(ms, name); ms->l2_wq.bfd.fd = -1; ms->sap_wq.bfd.fd = -1; + + /* Register a new MS */ + llist_add_tail(&ms->entity, &ms_list); gsm_support_init(ms); gsm_settings_init(ms); @@ -267,13 +270,12 @@ ms->shutdown = 3; /* being down */ if (mncc_recv_app) { - char name[32]; - - sprintf(name, "/tmp/ms_mncc_%s", ms->name); + mncc_name = talloc_asprintf(ms, "/tmp/ms_mncc_%s", ms->name); ms->mncc_entity.mncc_recv = mncc_recv_app; - ms->mncc_entity.sock_state = mncc_sock_init(ms, name, l23_ctx); + ms->mncc_entity.sock_state = mncc_sock_init(ms, mncc_name, l23_ctx); + talloc_free(mncc_name); } else if (ms->settings.ch_cap == GSM_CAP_SDCCH) ms->mncc_entity.mncc_recv = mncc_recv_dummy; else diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index 325852d..f0b31ff 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -5030,7 +5030,7 @@ struct gsm322_plmn *plmn = &ms->plmn; struct gsm322_cellsel *cs = &ms->cellsel; FILE *fp; - char filename[PATH_MAX]; + char *ba_filename; int i; struct gsm322_ba_list *ba; uint8_t buf[4]; @@ -5062,8 +5062,14 @@ cs->list[i].flags |= GSM322_CS_FLAG_SUPPORT; /* read BA list */ - sprintf(filename, "%s/%s.ba", config_dir, ms->name); - fp = fopen(filename, "r"); + ba_filename = talloc_asprintf(ms, "%s/%s.ba", config_dir, ms->name); + if (!ba_filename) { + LOGP(DCS, LOGL_ERROR, "Failed to read BA list: " + "couldn't allocate memory\n"); + return -ENOMEM; + } + + fp = fopen(ba_filename, "r"); if (fp) { int rc; char *s_rc; @@ -5100,6 +5106,7 @@ } else LOGP(DCS, LOGL_INFO, "No stored BA list\n"); + talloc_free(ba_filename); return 0; } @@ -5110,7 +5117,7 @@ struct llist_head *lh, *lh2; struct msgb *msg; FILE *fp; - char filename[PATH_MAX]; + char *ba_filename; struct gsm322_ba_list *ba; uint8_t buf[4]; int i; @@ -5138,25 +5145,33 @@ } /* store BA list */ - sprintf(filename, "%s/%s.ba", config_dir, ms->name); - fp = fopen(filename, "w"); - if (fp) { - fputs(ba_version, fp); - llist_for_each_entry(ba, &cs->ba_list, entry) { - buf[0] = ba->mcc >> 8; - buf[1] =
[PATCH] osmocom-bb[master]: host/mobile: use osmocom_ms as talloc context
Review at https://gerrit.osmocom.org/2668 host/mobile: use osmocom_ms as talloc context As we use talloc, it's absurdly not to use the main feature of the library - hierarchical memory management. This change sets talloc context of all sub-allocated objects to related osmocom_ms instance. So, as soon as osmocom_ms instance is destroyed, all sub-allocated chunks are getting destroyed too. Change-Id: I0d5fcbdd77fe41d78cfe54731dd2ebfc4171f62c --- M src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h M src/host/layer23/include/osmocom/bb/mobile/subscriber.h M src/host/layer23/src/common/sim.c M src/host/layer23/src/mobile/app_mobile.c M src/host/layer23/src/mobile/gsm322.c M src/host/layer23/src/mobile/gsm48_cc.c M src/host/layer23/src/mobile/gsm48_mm.c M src/host/layer23/src/mobile/mncc_sock.c M src/host/layer23/src/mobile/mnccms.c M src/host/layer23/src/mobile/subscriber.c M src/host/layer23/src/mobile/transaction.c M src/host/layer23/src/mobile/vty_interface.c 12 files changed, 35 insertions(+), 47 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/68/2668/1 diff --git a/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h b/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h index b38c5bc..9116ea3 100644 --- a/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h +++ b/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h @@ -10,7 +10,7 @@ int mncc_sock_from_cc(struct mncc_sock_state *state, struct msgb *msg); void mncc_sock_write_pending(struct mncc_sock_state *state); -struct mncc_sock_state *mncc_sock_init(void *inst, const char *name, void *tall_ctx); +struct mncc_sock_state *mncc_sock_init(void *inst, const char *name); void mncc_sock_exit(struct mncc_sock_state *state); #endif /* _MNCC_SOCK_H */ diff --git a/src/host/layer23/include/osmocom/bb/mobile/subscriber.h b/src/host/layer23/include/osmocom/bb/mobile/subscriber.h index ac785d4..8eda027 100644 --- a/src/host/layer23/include/osmocom/bb/mobile/subscriber.h +++ b/src/host/layer23/include/osmocom/bb/mobile/subscriber.h @@ -100,7 +100,7 @@ int gsm_subscr_del_forbidden_plmn(struct gsm_subscriber *subscr, uint16_t mcc, uint16_t mnc); int gsm_subscr_add_forbidden_plmn(struct gsm_subscriber *subscr, uint16_t mcc, - uint16_t mnc, uint8_t cause); + uint16_t mnc, uint8_t cause, struct osmocom_ms *ms); int gsm_subscr_is_forbidden_plmn(struct gsm_subscriber *subscr, uint16_t mcc, uint16_t mnc); int gsm_subscr_dump_forbidden_plmn(struct osmocom_ms *ms, diff --git a/src/host/layer23/src/common/sim.c b/src/host/layer23/src/common/sim.c index 9aad966..c2d6033 100644 --- a/src/host/layer23/src/common/sim.c +++ b/src/host/layer23/src/common/sim.c @@ -29,7 +29,6 @@ #include #include -extern void *l23_ctx; static int sim_process_job(struct osmocom_ms *ms); /* @@ -1181,7 +1180,7 @@ struct gsm_sim_handler *handler; /* create handler and attach */ - handler = talloc_zero(l23_ctx, struct gsm_sim_handler); + handler = talloc_zero(ms, struct gsm_sim_handler); if (!handler) return 0; handler->handle = new_handle++; diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c index 7dc7208..30f3a67 100644 --- a/src/host/layer23/src/mobile/app_mobile.c +++ b/src/host/layer23/src/mobile/app_mobile.c @@ -273,7 +273,7 @@ mncc_name = talloc_asprintf(ms, "/tmp/ms_mncc_%s", ms->name); ms->mncc_entity.mncc_recv = mncc_recv_app; - ms->mncc_entity.sock_state = mncc_sock_init(ms, mncc_name, l23_ctx); + ms->mncc_entity.sock_state = mncc_sock_init(ms, mncc_name); talloc_free(mncc_name); } else if (ms->settings.ch_cap == GSM_CAP_SDCCH) diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index f0b31ff..dab2326 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -45,8 +45,6 @@ const char *ba_version = "osmocom BA V1\n"; -extern void *l23_ctx; - static void gsm322_cs_timeout(void *arg); static int gsm322_cs_select(struct osmocom_ms *ms, int index, uint16_t mcc, uint16_t mnc, int any); @@ -562,7 +560,7 @@ LOGP(DPLMN, LOGL_INFO, "Add to list of forbidden LAs " "(mcc=%s, mnc=%s, lac=%04x)\n", gsm_print_mcc(mcc), gsm_print_mnc(mnc), lac); - la = talloc_zero(l23_ctx, struct gsm322_la_list); + la = talloc_zero(ms, struct gsm322_la_list); if (!la) return -ENOMEM; la->mcc = mcc; @@ -907,7 +905,7 @@ if (cs->list[i].rxlev > found->rxlev) found->rxlev = cs->list[i].rxlev; } else { - temp = talloc_zero(l23_ctx, struct gsm322_plmn_list); +
[PATCH] osmocom-bb[master]: mobile/gsm48_mm.c: strip unused variable
Review at https://gerrit.osmocom.org/2666 mobile/gsm48_mm.c: strip unused variable Change-Id: I2708628263bec4bc6bf53a357928e23609b40c64 --- M src/host/layer23/src/mobile/gsm48_mm.c 1 file changed, 0 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/66/2666/1 diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c index 46b641c..100129b 100644 --- a/src/host/layer23/src/mobile/gsm48_mm.c +++ b/src/host/layer23/src/mobile/gsm48_mm.c @@ -777,11 +777,9 @@ { struct gsm48_mmlayer *mm = &ms->mmlayer; struct msgb *msg; - struct gsm48_mmr *mmr; int work = 0; while ((msg = msgb_dequeue(&mm->mmr_downqueue))) { - mmr = (struct gsm48_mmr *) msg->data; gsm48_rcv_mmr(ms, msg); msgb_free(msg); work = 1; /* work done */ -- To view, visit https://gerrit.osmocom.org/2666 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2708628263bec4bc6bf53a357928e23609b40c64 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: mobile/gsm480_ss.c: gsm480_mmss_ind: return rc
Review at https://gerrit.osmocom.org/2665 mobile/gsm480_ss.c: gsm480_mmss_ind: return rc Change-Id: Iabaccdbdfc5a5eb6424bd1603f405241650f13d8 --- M src/host/layer23/src/mobile/gsm480_ss.c 1 file changed, 2 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/65/2665/1 diff --git a/src/host/layer23/src/mobile/gsm480_ss.c b/src/host/layer23/src/mobile/gsm480_ss.c index 91023b2..5c16174 100644 --- a/src/host/layer23/src/mobile/gsm480_ss.c +++ b/src/host/layer23/src/mobile/gsm480_ss.c @@ -1241,7 +1241,8 @@ gsm480_trans_free(trans); rc = -ENOTSUP; } - return 0; + + return rc; } /* receive message from MM layer */ -- To view, visit https://gerrit.osmocom.org/2665 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iabaccdbdfc5a5eb6424bd1603f405241650f13d8 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: mobile/gsm322.c: avoid using memset with zero length
Review at https://gerrit.osmocom.org/2664 mobile/gsm322.c: avoid using memset with zero length Change-Id: Ifc8a06dd100ce494e3bcfbc7636738435fa5e34d --- M src/host/layer23/src/mobile/gsm322.c 1 file changed, 3 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/64/2664/1 diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index ebe22ff..325852d 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -322,7 +322,9 @@ else value -= min; - memset(bar, '=', value); + if (value) + memset(bar, '=', value); + bar[value] = '\0'; return bar; -- To view, visit https://gerrit.osmocom.org/2664 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifc8a06dd100ce494e3bcfbc7636738435fa5e34d Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: mobile/gsm480_ss.c: drop meaningless condition
Review at https://gerrit.osmocom.org/2662 mobile/gsm480_ss.c: drop meaningless condition Change-Id: I23287c0f31bee9c1b710f17f932633d2c621dab0 --- M src/host/layer23/src/mobile/gsm480_ss.c 1 file changed, 0 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/62/2662/1 diff --git a/src/host/layer23/src/mobile/gsm480_ss.c b/src/host/layer23/src/mobile/gsm480_ss.c index d626a0e..91023b2 100644 --- a/src/host/layer23/src/mobile/gsm480_ss.c +++ b/src/host/layer23/src/mobile/gsm480_ss.c @@ -897,8 +897,6 @@ case 0x85: if (((tag_data[0] & 0x70) >> 4) == 1) strcpy(number, "+"); - else if (((tag_data[0] & 0x70) >> 4) == 1) - strcpy(number, "+"); else number[0] = '\0'; gsm48_decode_bcd_number(number + strlen(number), -- To view, visit https://gerrit.osmocom.org/2662 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I23287c0f31bee9c1b710f17f932633d2c621dab0 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: host/app_mobile.c: do not exit in mobile_new()
Review at https://gerrit.osmocom.org/2659 host/app_mobile.c: do not exit in mobile_new() Previously, if there was any error during a new osmocom_ms structure allocation, the mobile_new() used to call exit() directly. Since we always check return value of this function it would be more correct to return NULL in any bad case. Change-Id: I9a594dd1d133f0c0740dc3bff41633f94099b593 --- M src/host/layer23/src/mobile/app_mobile.c 1 file changed, 7 insertions(+), 6 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/59/2659/1 diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c index e076741..c74a93f 100644 --- a/src/host/layer23/src/mobile/app_mobile.c +++ b/src/host/layer23/src/mobile/app_mobile.c @@ -252,7 +252,7 @@ ms = talloc_zero(l23_ctx, struct osmocom_ms); if (!ms) { fprintf(stderr, "Failed to allocate MS\n"); - exit(1); + return NULL; } llist_add_tail(&ms->entity, &ms_list); @@ -423,11 +423,12 @@ printf("No Mobile Station defined, creating: MS '1'\n"); ms = mobile_new("1"); - if (ms) { - rc = mobile_init(ms); - if (rc < 0) - return rc; - } + if (!ms) + return -1; + + rc = mobile_init(ms); + if (rc < 0) + return rc; } quit = 0; -- To view, visit https://gerrit.osmocom.org/2659 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9a594dd1d133f0c0740dc3bff41633f94099b593 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: sap_interface.c: drop meaningless condition
Review at https://gerrit.osmocom.org/2658 sap_interface.c: drop meaningless condition Change-Id: I3038fc15745dc4be796d894002524e6b2dd5c90e --- M src/host/layer23/src/common/sap_interface.c 1 file changed, 1 insertion(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/58/2658/1 diff --git a/src/host/layer23/src/common/sap_interface.c b/src/host/layer23/src/common/sap_interface.c index 22f9550..fd19659 100644 --- a/src/host/layer23/src/common/sap_interface.c +++ b/src/host/layer23/src/common/sap_interface.c @@ -151,7 +151,7 @@ static int osmosap_send(struct osmocom_ms *ms, struct msgb *msg) { - if(ms->sap_entity.sap_state == SAP_NOT_CONNECTED && !ms->sap_entity.sap_state == SAP_CONNECTION_UNDER_NEGOTIATION) + if(ms->sap_entity.sap_state == SAP_NOT_CONNECTED) sap_connect(ms); if (ms->sap_wq.bfd.fd <= 0) -- To view, visit https://gerrit.osmocom.org/2658 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3038fc15745dc4be796d894002524e6b2dd5c90e Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: mobile/gsm322.c: strip unused variable
Review at https://gerrit.osmocom.org/2660 mobile/gsm322.c: strip unused variable Change-Id: I74ad6e540c98ab4914e7a2ea725dd23f5a2fd034 --- M src/host/layer23/src/mobile/gsm322.c 1 file changed, 2 insertions(+), 4 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/60/2660/1 diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index 9166089..ad780c9 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -5139,16 +5139,14 @@ sprintf(filename, "%s/%s.ba", config_dir, ms->name); fp = fopen(filename, "w"); if (fp) { - int rc; - fputs(ba_version, fp); llist_for_each_entry(ba, &cs->ba_list, entry) { buf[0] = ba->mcc >> 8; buf[1] = ba->mcc & 0xff; buf[2] = ba->mnc >> 8; buf[3] = ba->mnc & 0xff; - rc = fwrite(buf, 4, 1, fp); - rc = fwrite(ba->freq, sizeof(ba->freq), 1, fp); + fwrite(buf, 4, 1, fp); + fwrite(ba->freq, sizeof(ba->freq), 1, fp); LOGP(DCS, LOGL_INFO, "Write stored BA list (mcc=%s " "mnc=%s %s, %s)\n", gsm_print_mcc(ba->mcc), gsm_print_mnc(ba->mnc), gsm_get_mcc(ba->mcc), -- To view, visit https://gerrit.osmocom.org/2660 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I74ad6e540c98ab4914e7a2ea725dd23f5a2fd034 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: mobile/gsm322.c: fix mcc/mnc typo
Review at https://gerrit.osmocom.org/2661 mobile/gsm322.c: fix mcc/mnc typo Change-Id: I4a3aaa0465598b17ccd30ec4cbeb90429216540e --- M src/host/layer23/src/mobile/gsm322.c 1 file changed, 1 insertion(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/61/2661/1 diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index ad780c9..ebe22ff 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -2144,7 +2144,7 @@ return -ENOMEM; ngm = (struct gsm322_msg *) nmsg->data; ngm->mcc = mcc; - ngm->mnc = mcc; + ngm->mnc = mnc; gsm322_plmn_sendmsg(ms, nmsg); } -- To view, visit https://gerrit.osmocom.org/2661 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4a3aaa0465598b17ccd30ec4cbeb90429216540e Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: mobile/gsm48_rr.c: fix BA range exceed check
Review at https://gerrit.osmocom.org/2663 mobile/gsm48_rr.c: fix BA range exceed check Change-Id: Ic2ebe9faeeda7ce812527962d209e6049f2dfc75 --- M src/host/layer23/src/mobile/gsm48_rr.c 1 file changed, 3 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/63/2663/1 diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c index 9b3f0f9..b821457 100644 --- a/src/host/layer23/src/mobile/gsm48_rr.c +++ b/src/host/layer23/src/mobile/gsm48_rr.c @@ -146,11 +146,13 @@ *ranges = 0; return -EINVAL; } - if (max_ranges > n) + + if (n > max_ranges) { LOGP(DRR, LOGL_NOTICE, "BA range %d exceed the maximum number " "of ranges supported by this mobile (%d).\n", n, max_ranges); n = max_ranges; + } /* decode ranges */ for (i = 0; i < n; i++) { -- To view, visit https://gerrit.osmocom.org/2663 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic2ebe9faeeda7ce812527962d209e6049f2dfc75 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] osmocom-bb[master]: osmocon.c: strip unused variable
Review at https://gerrit.osmocom.org/2657 osmocon.c: strip unused variable Change-Id: I295785295c108798e0c235e78bd8fd8f3c585d16 --- M src/host/osmocon/osmocon.c 1 file changed, 2 insertions(+), 3 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/57/2657/1 diff --git a/src/host/osmocon/osmocon.c b/src/host/osmocon/osmocon.c index 648d416..76f6037 100644 --- a/src/host/osmocon/osmocon.c +++ b/src/host/osmocon/osmocon.c @@ -497,8 +497,7 @@ static int mtk_prepare_block(void) { - int rc, i; - + int i; int remaining_bytes; int fill_bytes; uint8_t *block_data; @@ -565,7 +564,7 @@ dnload.block_ptr = dnload.block; dnload.block_number++; - return rc; + return 0; } static int handle_write_block(void) -- To view, visit https://gerrit.osmocom.org/2657 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I295785295c108798e0c235e78bd8fd8f3c585d16 Gerrit-PatchSet: 1 Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy
[PATCH] openggsn[master]: ctrl: cleanup trap creation
Review at https://gerrit.osmocom.org/2656 ctrl: cleanup trap creation Move common trap create/send code into separate function. Change-Id: Iaadc921b951aeb9b3ad5ab796e13d52017139468 --- M ggsn/ggsn.c 1 file changed, 16 insertions(+), 11 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openggsn refs/changes/56/2656/1 diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c index 181ba2d..4d07f11 100644 --- a/ggsn/ggsn.c +++ b/ggsn/ggsn.c @@ -133,18 +133,26 @@ } #endif +static bool send_trap(const struct gsn_t *gsn, const struct pdp_t *pdp, const struct ippoolm_t *member, const char *var) +{ + char val[NAMESIZE]; + + snprintf(val, sizeof(val), "%" PRIu64 ",%s", pdp->imsi, inet_ntoa(member->addr)); + + if (ctrl_cmd_send_trap(gsn->ctrl, var, val) < 0) { + LOGP(DGGSN, LOGL_ERROR, "Failed to create and send TRAP for IMSI %" PRIu64 " [%s].\n", pdp->imsi, var); + return false; + } + return true; +} + int delete_context(struct pdp_t *pdp) { DEBUGP(DGGSN, "Deleting PDP context\n"); struct ippoolm_t *member = pdp->peer; - char v[NAMESIZE]; if (pdp->peer) { - snprintf(v, sizeof(v), "%" PRIu64 ",%s", pdp->imsi, -inet_ntoa(member->addr)); - if (ctrl_cmd_send_trap(gsn->ctrl, "imsi-rem-ip", v) < 0) - LOGP(DGGSN, LOGL_ERROR, "Failed to create and send TRAP" -" for IMSI %" PRIu64 " PDP deletion.\n", pdp->imsi); + send_trap(gsn, pdp, member, "imsi-rem-ip"); /* TRAP with IP removal */ ippool_freeip(ippool, (struct ippoolm_t *)pdp->peer); } else SYS_ERR(DGGSN, LOGL_ERROR, 0, "Peer not defined!"); @@ -162,7 +170,6 @@ { struct in_addr addr; struct ippoolm_t *member; - char v[NAMESIZE]; DEBUGP(DGGSN, "Received create PDP context request\n"); @@ -192,10 +199,8 @@ SYS_ERR(DGGSN, LOGL_ERROR, 0, "Cannot add tunnel to kernel: %s\n", strerror(errno)); } -/* FIXME: naming? */ - snprintf(v, sizeof(v), "%" PRIu64 ",%s", pdp->imsi, inet_ntoa(member->addr)); - if (ctrl_cmd_send_trap(gsn->ctrl, "imsi-ass-ip", v) < 0) { - LOGP(DGGSN, LOGL_ERROR, "Trap creation failed.\n"); + + if (!send_trap(gsn, pdp, member, "imsi-ass-ip")) { /* TRAP with IP assignment */ gtp_create_context_resp(gsn, pdp, GTPCAUSE_NO_RESOURCES); return 0; } -- To view, visit https://gerrit.osmocom.org/2656 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iaadc921b951aeb9b3ad5ab796e13d52017139468 Gerrit-PatchSet: 1 Gerrit-Project: openggsn Gerrit-Branch: master Gerrit-Owner: Max
[PATCH] openggsn[master]: libgtp: improve error logging and propagation
Review at https://gerrit.osmocom.org/2655 libgtp: improve error logging and propagation * propagate error code from gtp_new() to caller instead of always returning -1 * on socket-related failures log explicitly which kind of socket caused error Change-Id: Ie07f1e4246eb178838b7df21946a08a1f60f2084 related: SYS#3610 --- M gtp/gtp.c 1 file changed, 9 insertions(+), 9 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openggsn refs/changes/55/2655/1 diff --git a/gtp/gtp.c b/gtp/gtp.c index ade746a..b45fbe4 100644 --- a/gtp/gtp.c +++ b/gtp/gtp.c @@ -730,9 +730,9 @@ if (((*gsn)->fd0 = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { (*gsn)->err_socket++; LOGP(DLGTP, LOGL_ERROR, - "socket(domain=%d, type=%d, protocol=%d) failed: Error = %s\n", +"GTPv0 socket(domain=%d, type=%d, protocol=%d) failed: Error = %s\n", AF_INET, SOCK_DGRAM, 0, strerror(errno)); - return -1; + return -errno; } memset(&addr, 0, sizeof(addr)); @@ -748,16 +748,16 @@ LOGP_WITH_ADDR(DLGTP, LOGL_ERROR, addr, "bind(fd0=%d) failed: Error = %s\n", (*gsn)->fd0, strerror(errno)); - return -1; + return -errno; } /* Create GTP version 1 control plane socket */ if (((*gsn)->fd1c = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { (*gsn)->err_socket++; LOGP(DLGTP, LOGL_ERROR, - "socket(domain=%d, type=%d, protocol=%d) failed: Error = %s\n", +"GTPv1 control plane socket(domain=%d, type=%d, protocol=%d) failed: Error = %s\n", AF_INET, SOCK_DGRAM, 0, strerror(errno)); - return -1; + return -errno; } memset(&addr, 0, sizeof(addr)); @@ -773,16 +773,16 @@ LOGP_WITH_ADDR(DLGTP, LOGL_ERROR, addr, "bind(fd1c=%d) failed: Error = %s\n", (*gsn)->fd1c, strerror(errno)); - return -1; + return -errno; } /* Create GTP version 1 user plane socket */ if (((*gsn)->fd1u = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { (*gsn)->err_socket++; LOGP(DLGTP, LOGL_ERROR, - "socket(domain=%d, type=%d, protocol=%d) failed: Error = %s\n", +"GTPv1 user plane socket(domain=%d, type=%d, protocol=%d) failed: Error = %s\n", AF_INET, SOCK_DGRAM, 0, strerror(errno)); - return -1; + return -errno; } memset(&addr, 0, sizeof(addr)); @@ -798,7 +798,7 @@ LOGP_WITH_ADDR(DLGTP, LOGL_ERROR, addr, "bind(fd1u=%d) failed: Error = %s\n", (*gsn)->fd1u, strerror(errno)); - return -1; + return -errno; } return 0; -- To view, visit https://gerrit.osmocom.org/2655 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie07f1e4246eb178838b7df21946a08a1f60f2084 Gerrit-PatchSet: 1 Gerrit-Project: openggsn Gerrit-Branch: master Gerrit-Owner: Max
libosmocore[master]: gitignore: Update with new *_gen.c files and generic 'tags'
Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/2650 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I6e9df474b4d93e6e20c6d19ac9ffab5b7b959143 Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Harald Welte Gerrit-Reviewer: Harald Welte Gerrit-HasComments: No
libosmocore[master]: gsm/gsm0411_smr.c: strip unused variable
Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/2647 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I53f69913907588c45a9661c4e86e1bfb57a2418f Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy Gerrit-Reviewer: Harald Welte Gerrit-HasComments: No
openbsc[master]: fix '/include/openbsc ' to have no trailing space
Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/2649 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I218027459e3b2aaa817d91eb3f69d9c0b10dcd4e Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Neels Hofmeyr Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-HasComments: No
osmo-pcu[master]: Cleanup FN scheduling
Patch Set 1: I did short tests manually but I agree that having elaborate unit tests would be handy. -- To view, visit https://gerrit.osmocom.org/2654 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I6fee0714453d0c3c3f3f875f88daea2d9c477331 Gerrit-PatchSet: 1 Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Owner: Max Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max Gerrit-HasComments: No
libosmocore[master]: utils/osmo-sim-test.c: strip unused variables
Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/2648 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Id577d9df5a814ad5aa00e1d04c4790d75d17ad7e Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Max Gerrit-HasComments: No
openbsc[master]: Add missing _CFLAGS and _LIBS
Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/2652 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: If8d57b72f63d79cc0d8efba7466c6ec177207cbb Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Alexander Huemer Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Max Gerrit-HasComments: No
osmo-hlr[master]: hlr_data.sql: Insert ki and opc instead of op to example data
Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/2653 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I8f6051ea9b285ff6261bfe346cfc29d1167921f5 Gerrit-PatchSet: 1 Gerrit-Project: osmo-hlr Gerrit-Branch: master Gerrit-Owner: daniel Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: neels Gerrit-HasComments: No
osmo-pcu[master]: Cleanup FN scheduling
Patch Set 1: while these kind of cleanup patches are definitely appreciated, it is very difficult to merge them in absence of good unit testing for the related code, so we can verify there are no unwanted changes slipping between the cracks from the old behavior to the new behavior -- To view, visit https://gerrit.osmocom.org/2654 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I6fee0714453d0c3c3f3f875f88daea2d9c477331 Gerrit-PatchSet: 1 Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Owner: Max Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-HasComments: No
openbsc[master]: SI2quater: fix EARFCN inclusion check
Patch Set 3: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/2612 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ic4fb2a9e870db66cac58b1e8d113587b30d64ce2 Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Max Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-HasComments: No
[MERGED] openbsc[master]: SI2quater: fix EARFCN inclusion check
Harald Welte has submitted this change and it was merged. Change subject: SI2quater: fix EARFCN inclusion check .. SI2quater: fix EARFCN inclusion check Previously only the existance of bts->si_common.si2quater_neigh_list was checked but not the actual number of EARFCNs in it. Fix it by using si2q_earfcn_count() and adjust tests accordingly. While at it - reformat tests to include extra information. The correctness was checked manually by inspecting GSMTAP output. Change-Id: Ic4fb2a9e870db66cac58b1e8d113587b30d64ce2 Related: RT#8792 --- M openbsc/src/libbsc/rest_octets.c M openbsc/src/libbsc/system_information.c M openbsc/tests/gsm0408/gsm0408_test.c M openbsc/tests/gsm0408/gsm0408_test.ok 4 files changed, 93 insertions(+), 35 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libbsc/rest_octets.c b/openbsc/src/libbsc/rest_octets.c index 950e570..a6fdf46 100644 --- a/openbsc/src/libbsc/rest_octets.c +++ b/openbsc/src/libbsc/rest_octets.c @@ -379,14 +379,13 @@ /* No GPRS_3G_MEASUREMENT Parameters Descr. */ bitvec_set_bit(&bv, 0); - if (&bts->si_common.si2quater_neigh_list) { /* FIXME: use si2q_earfcn_count() in if */ + if (si2q_earfcn_count(&bts->si_common.si2quater_neigh_list)) { append_earfcn(&bv, bts, SI2Q_MAX_LEN - bv.cur_bit); /* FIXME: remove following check once multiple SI2q are properly supported */ if ((bts->e_offset != si2q_earfcn_count(&bts->si_common.si2quater_neigh_list)) || si2q_earfcn_count(&bts->si_common.si2quater_neigh_list) > 5) return -ENOMEM; - } else { /* No Additions in Rel-5: */ bitvec_set_bit(&bv, L); diff --git a/openbsc/src/libbsc/system_information.c b/openbsc/src/libbsc/system_information.c index 0496506..644bebd 100644 --- a/openbsc/src/libbsc/system_information.c +++ b/openbsc/src/libbsc/system_information.c @@ -692,6 +692,10 @@ size_t si2q_earfcn_count(const struct osmo_earfcn_si2q *e) { unsigned i, ret = 0; + + if (!e) + return 0; + for (i = 0; i < e->length; i++) if (e->arfcn[i] != OSMO_EARFCN_INVALID) ret++; @@ -777,7 +781,8 @@ si_info.si2ter_indicator = 0; } if ((bts->si_valid & (1 << SYSINFO_TYPE_2quater))) { - LOGP(DRR, LOGL_INFO, "SI 2quater is included.\n"); + LOGP(DRR, LOGL_INFO, "SI 2quater is included, based on %zu EARFCNs and %zu UARFCNs.\n", +si2q_earfcn_count(&bts->si_common.si2quater_neigh_list), bts->si_common.uarfcn_length); si_info.si2quater_indicator = 1; } else { si_info.si2quater_indicator = 0; diff --git a/openbsc/tests/gsm0408/gsm0408_test.c b/openbsc/tests/gsm0408/gsm0408_test.c index 265e4b2..36f6993 100644 --- a/openbsc/tests/gsm0408/gsm0408_test.c +++ b/openbsc/tests/gsm0408/gsm0408_test.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -86,21 +87,41 @@ static inline void gen(struct gsm_bts *bts, const char *s) { + int r; + bts->u_offset = 0; bts->e_offset = 0; bts->si2q_index = 0; bts->si2q_count = 0; bts->si_valid = 0; bts->si_valid |= (1 << SYSINFO_TYPE_2quater); + /* should be no-op as entire buffer is filled with padding: */ memset(GSM_BTS_SI(bts, SYSINFO_TYPE_2quater), 0xAE, GSM_MACBLOCK_LEN); - int r = gsm_generate_si(bts, SYSINFO_TYPE_2quater); - bool v = bts->si_valid & (1 << SYSINFO_TYPE_2quater); + + printf("generating SI2quater for %zu EARFCNs and %zu UARFCNs...\n", + si2q_earfcn_count(&bts->si_common.si2quater_neigh_list), bts->si_common.uarfcn_length); + + r = gsm_generate_si(bts, SYSINFO_TYPE_2quater); if (r > 0) - printf("generated %s SI2quater: [%d] %s\n", - v ? "valid" : "invalid", r, osmo_hexdump(GSM_BTS_SI(bts, SYSINFO_TYPE_2quater), r)); + printf("generated %s SI2quater [%02u/%02u]: [%d] %s\n", + (bts->si_valid & (1 << SYSINFO_TYPE_2quater)) ? "valid" : "invalid", + bts->si2q_index, bts->si2q_count, r, + osmo_hexdump((void *)GSM_BTS_SI2Q(bts), GSM_MACBLOCK_LEN)); else printf("%s() failed to generate SI2quater: %s\n", s, strerror(-r)); +} + +static inline void del_earfcn_b(struct gsm_bts *bts, uint16_t earfcn) +{ + struct osmo_earfcn_si2q *e = &bts->si_common.si2quater_neigh_list; + int r = osmo_earfcn_del(e, earfcn); + if (r) + printf("failed to remove EARFCN %u: %s\n", earfcn, strerror(-r)); + else + printf("removed EARFCN %u - ", earfcn); + + gen(bts, __func
[PATCH] osmo-pcu[master]: Cleanup FN scheduling
Review at https://gerrit.osmocom.org/2654 Cleanup FN scheduling * replace magic number with defined constant * move copy-pasted code to inline functions * remove unused code Change-Id: I6fee0714453d0c3c3f3f875f88daea2d9c477331 Related: OS#1524 --- M src/bts.cpp M src/gprs_rlcmac_sched.cpp M src/pcu_utils.h M src/poll_controller.cpp M src/sba.cpp M src/tbf.cpp M src/tbf_dl.cpp M tests/tbf/TbfTest.cpp 8 files changed, 46 insertions(+), 50 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/54/2654/1 diff --git a/src/bts.cpp b/src/bts.cpp index e25c47b..bed9bf4 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -238,6 +238,11 @@ m_pollController.expireTimedout(m_cur_fn, max_delay); } +static inline int delta_fn(int fn, int to) +{ + return (fn + GSM_MAX_FN * 3 / 2 - to) % GSM_MAX_FN - GSM_MAX_FN/2; +} + void BTS::set_current_block_frame_number(int fn, unsigned max_delay) { int delay = 0; @@ -248,15 +253,14 @@ /* frame numbers in the received blocks are assumed to be strongly * monotonic. */ if (m_cur_blk_fn >= 0) { - int delta = (fn + 2715648 * 3 / 2 - m_cur_blk_fn) % 2715648 - 2715648/2; + int delta = delta_fn(fn, m_cur_blk_fn); if (delta <= 0) return; } /* Check block delay vs. the current frame number */ if (current_frame_number() != 0) - delay = (fn + 2715648 * 3 / 2 - current_frame_number()) % 2715648 - - 2715648/2; + delay = delta_fn(fn, current_frame_number()); if (delay <= -late_block_delay_thresh) { LOGP(DRLCMAC, LOGL_NOTICE, "Late RLC block, FN delta: %d FN: %d curFN: %d\n", @@ -814,7 +818,7 @@ tbf->trx->trx_no, tbf->trx->arfcn, ts, tbf->ta(), poll ? tbf->poll_fn : -1); plen = Encoding::write_immediate_assignment(tbf, immediate_assignment, 1, 125, - (tbf->pdch[ts]->last_rts_fn + 21216) % 2715648, tbf->ta(), + (tbf->pdch[ts]->last_rts_fn + 21216) % GSM_MAX_FN, tbf->ta(), tbf->trx->arfcn, ts, tbf->tsc(), 7, poll, tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1); if (plen >= 0) { diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp index 97ee53e..a21c023 100644 --- a/src/gprs_rlcmac_sched.cpp +++ b/src/gprs_rlcmac_sched.cpp @@ -41,7 +41,7 @@ poll_fn = fn + 4; if ((block_nr % 3) == 2) poll_fn ++; - poll_fn = poll_fn % 2715648; + poll_fn = poll_fn % GSM_MAX_FN; llist_for_each(pos, &bts->ul_tbfs()) { ul_tbf = as_ul_tbf(pos->entry()); OSMO_ASSERT(ul_tbf); diff --git a/src/pcu_utils.h b/src/pcu_utils.h index d664446..3a64a47 100644 --- a/src/pcu_utils.h +++ b/src/pcu_utils.h @@ -20,6 +20,11 @@ return (msecs * (1024 * 1000 / 4615)) / 1024; } +inline uint32_t next_fn(uint32_t fn, uint32_t offset) +{ + return (fn + offset) % GSM_MAX_FN; +} + inline void csecs_to_timeval(unsigned csecs, struct timeval *tv) { tv->tv_sec = csecs / 100; tv->tv_usec = (csecs % 100) * 1; diff --git a/src/poll_controller.cpp b/src/poll_controller.cpp index 54e3bc7..f8ab6c9 100644 --- a/src/poll_controller.cpp +++ b/src/poll_controller.cpp @@ -28,35 +28,39 @@ : m_bts(bts) {} +static inline bool elapsed_fn_check(unsigned max_delay, int frame_number, uint32_t from) +{ + uint32_t elapsed = (frame_number + GSM_MAX_FN - from) % GSM_MAX_FN; + + if (elapsed > max_delay && elapsed < 2715400) + return true; + + return false; +} + void PollController::expireTimedout(int frame_number, unsigned max_delay) { struct gprs_rlcmac_dl_tbf *dl_tbf; struct gprs_rlcmac_ul_tbf *ul_tbf; struct gprs_rlcmac_sba *sba, *sba2; LListHead *pos; - uint32_t elapsed; llist_for_each(pos, &m_bts.ul_tbfs()) { ul_tbf = as_ul_tbf(pos->entry()); if (ul_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED) { - elapsed = (frame_number + 2715648 - ul_tbf->poll_fn) - % 2715648; - if (elapsed > max_delay && elapsed < 2715400) + if (elapsed_fn_check(max_delay, frame_number, ul_tbf->poll_fn)) ul_tbf->poll_timeout(); } } llist_for_each(pos, &m_bts.dl_tbfs()) { dl_tbf = as_dl_tbf(pos->entry()); if (dl_tbf->poll_state == GPRS_RLCMAC_POLL_SCHED) { - elapsed = (frame_number + 2715648 - dl_tbf->poll_fn) - % 2715648; - if (elapsed > max_delay && elapsed < 2715400) + if (elapsed_fn_check(max_delay, frame_number, dl_tbf->pol
[PATCH] osmo-hlr[master]: hlr_data.sql: Insert ki and opc instead of op to example data
Review at https://gerrit.osmocom.org/2653 hlr_data.sql: Insert ki and opc instead of op to example data It depends on the cards whether you have op or opc, but the most cards in use for 3G are using the opc. Change the example to reflect that. Change-Id: I8f6051ea9b285ff6261bfe346cfc29d1167921f5 --- M sql/hlr_data.sql 1 file changed, 2 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/53/2653/1 diff --git a/sql/hlr_data.sql b/sql/hlr_data.sql index 939e4c9..0767d48 100644 --- a/sql/hlr_data.sql +++ b/sql/hlr_data.sql @@ -5,9 +5,9 @@ -- 3G only subscriber INSERT INTO subscriber (id, imsi) VALUES (2, '9019902'); -INSERT INTO auc_3g (subscriber_id, algo_id_3g, k, op, sqn) VALUES (2, 5, '000102030405060708090a0b0c0d0e0f', '101112131415161718191a1b1c1d1e1f', 0); +INSERT INTO auc_3g (subscriber_id, algo_id_3g, k, opc, sqn) VALUES (2, 5, '000102030405060708090a0b0c0d0e0f', '101112131415161718191a1b1c1d1e1f', 0); -- 2G + 3G subscriber INSERT INTO subscriber (id, imsi) VALUES (3, '9019903'); INSERT INTO auc_2g (subscriber_id, algo_id_2g, ki) VALUES (3, 1, '000102030405060708090a0b0c0d0e0f'); -INSERT INTO auc_3g (subscriber_id, algo_id_3g, k, op, sqn) VALUES (3, 5, '000102030405060708090a0b0c0d0e0f', '101112131415161718191a1b1c1d1e1f', 0); +INSERT INTO auc_3g (subscriber_id, algo_id_3g, k, opc, sqn) VALUES (3, 5, '000102030405060708090a0b0c0d0e0f', '101112131415161718191a1b1c1d1e1f', 0); -- To view, visit https://gerrit.osmocom.org/2653 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8f6051ea9b285ff6261bfe346cfc29d1167921f5 Gerrit-PatchSet: 1 Gerrit-Project: osmo-hlr Gerrit-Branch: master Gerrit-Owner: daniel
openbsc[master]: Add missing _CFLAGS and _LIBS
Patch Set 1: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/2652 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: If8d57b72f63d79cc0d8efba7466c6ec177207cbb Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Alexander Huemer Gerrit-Reviewer: Max Gerrit-HasComments: No
[PATCH] openbsc[master]: libmsc: Map SMPP command status to GSM 04.11 cause
Hello Neels Hofmeyr, Jenkins Builder, Pablo Neira Ayuso, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/2589 to look at the new patch set (#2). libmsc: Map SMPP command status to GSM 04.11 cause Send SMS RP ERROR with a failure cause that relates to the status returned by the ESME in the deliver_sm_resp. Actual mapping array is limited as most phones I tested don't seem to care about the failure cause anyway, although some will display a different notification for GSM411_RP_CAUSE_MO_NUM_UNASSIGNED Change-Id: I61fb2d9ef4f2d2eabdc49b53d9966ad328d15e51 --- M openbsc/src/libmsc/smpp_openbsc.c M openbsc/src/libmsc/smpp_smsc.c M openbsc/src/libmsc/smpp_smsc.h 3 files changed, 41 insertions(+), 7 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/89/2589/2 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 8111d92..f94968a 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -461,6 +461,37 @@ } } +struct { + uint32_t smpp_status_code; + uint8_t gsm411_cause; +} smpp_to_gsm411_err_array[] = { + + /* Seems like most phones don't care about the failure cause, +* although some will display a different notification for +* GSM411_RP_CAUSE_MO_NUM_UNASSIGNED +* Some provoke a display of "Try again later" +* while others a more definitive "Message sending failed" +*/ + + { ESME_RSYSERR, GSM411_RP_CAUSE_MO_DEST_OUT_OF_ORDER}, + { ESME_RINVDSTADR, GSM411_RP_CAUSE_MO_NUM_UNASSIGNED }, + { ESME_RMSGQFUL,GSM411_RP_CAUSE_MO_CONGESTION }, + { ESME_RINVSRCADR, GSM411_RP_CAUSE_MO_SMS_REJECTED }, + { ESME_RINVMSGID, GSM411_RP_CAUSE_INV_TRANS_REF } +}; + +static int smpp_to_gsm411_err(uint32_t smpp_status_code, int *gsm411_cause) +{ + int i; + for (i = 0; i < ARRAY_SIZE(smpp_to_gsm411_err_array); i++) { + if (smpp_to_gsm411_err_array[i].smpp_status_code != smpp_status_code) + continue; + *gsm411_cause = smpp_to_gsm411_err_array[i].gsm411_cause; + return 0; + } + return -1; +} + static void smpp_cmd_free(struct osmo_smpp_cmd *cmd) { osmo_timer_del(&cmd->response_timer); @@ -501,10 +532,11 @@ smpp_cmd_free(cmd); } -void smpp_cmd_err(struct osmo_smpp_cmd *cmd) +void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status) { struct gsm_subscriber_connection *conn; struct gsm_trans *trans; + int gsm411_cause; conn = connection_for_subscr(cmd->subscr); if (!conn) { @@ -520,14 +552,17 @@ return; } - gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, -GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER); + if (smpp_to_gsm411_err(status, &gsm411_cause) < 0) + gsm411_cause = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER; + + gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, gsm411_cause); + smpp_cmd_free(cmd); } static void smpp_deliver_sm_cb(void *data) { - smpp_cmd_err(data); + smpp_cmd_err(data, ESME_RSYSERR); } static int smpp_cmd_enqueue(struct osmo_esme *esme, diff --git a/openbsc/src/libmsc/smpp_smsc.c b/openbsc/src/libmsc/smpp_smsc.c index bd25918..48a1192 100644 --- a/openbsc/src/libmsc/smpp_smsc.c +++ b/openbsc/src/libmsc/smpp_smsc.c @@ -681,11 +681,10 @@ return -1; } - /* Map SMPP command status to GSM 04.11 cause? */ if (deliver_r.command_status == ESME_ROK) smpp_cmd_ack(cmd); else - smpp_cmd_err(cmd); + smpp_cmd_err(cmd, deliver_r.command_status); LOGP(DSMPP, LOGL_INFO, "[%s] Rx DELIVER-SM RESP (%s)\n", esme->system_id, get_value_string(smpp_status_strs, diff --git a/openbsc/src/libmsc/smpp_smsc.h b/openbsc/src/libmsc/smpp_smsc.h index b95a1f5..d8e82e4 100644 --- a/openbsc/src/libmsc/smpp_smsc.h +++ b/openbsc/src/libmsc/smpp_smsc.h @@ -97,7 +97,7 @@ struct osmo_smpp_cmd *smpp_cmd_find_by_seqnum(struct osmo_esme *esme, uint32_t sequence_number); void smpp_cmd_ack(struct osmo_smpp_cmd *cmd); -void smpp_cmd_err(struct osmo_smpp_cmd *cmd); +void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status); void smpp_cmd_flush_pending(struct osmo_esme *esme); struct smsc { -- To view, visit https://gerrit.osmocom.org/2589 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I61fb2d9ef4f2d2eabdc49b53d9966ad328d15e51 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Keith Whyte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
openbsc[master]: libmsc: Map SMPP command status to GSM 04.11 cause
Patch Set 1: (3 comments) https://gerrit.osmocom.org/#/c/2589/1/openbsc/src/libmsc/smpp_openbsc.c File openbsc/src/libmsc/smpp_openbsc.c: Line 477: .smpp_status_code = ESME_RSYSERR, > This is C99 structure initialization... which is actually a good idea since So, everywhere else I see this in osmo it's like Neels says. I am going to submit patch set 2 as he suggests. I guess it's not for me to get into a debate about whether or not this C99 struct init should be the way. Is that OK? Line 571: } > (No braces needed around single line.) Done Line 574:gsm411_cause); > This fits into the line, so no need to break it. Done -- To view, visit https://gerrit.osmocom.org/2589 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I61fb2d9ef4f2d2eabdc49b53d9966ad328d15e51 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Keith Whyte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
libosmocore[master]: utils/osmo-sim-test.c: strip unused variables
Patch Set 1: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/2648 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Id577d9df5a814ad5aa00e1d04c4790d75d17ad7e Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Vadim Yanitskiy Gerrit-Reviewer: Max Gerrit-HasComments: No
[PATCH] openbsc[master]: Add missing _CFLAGS and _LIBS
Review at https://gerrit.osmocom.org/2652 Add missing _CFLAGS and _LIBS These missing pieces go unnoticed if dependencies are not installed in distinct directories. Change-Id: If8d57b72f63d79cc0d8efba7466c6ec177207cbb --- M openbsc/src/utils/Makefile.am M openbsc/tests/sndcp_xid/Makefile.am 2 files changed, 5 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/52/2652/1 diff --git a/openbsc/src/utils/Makefile.am b/openbsc/src/utils/Makefile.am index 9c3837a..26494e1 100644 --- a/openbsc/src/utils/Makefile.am +++ b/openbsc/src/utils/Makefile.am @@ -109,6 +109,7 @@ osmo_meas_pcap2db_CFLAGS = \ $(LIBOSMOCORE_CFLAGS) \ $(LIBOSMOGSM_CFLAGS) \ + $(LIBOSMOABIS_CFLAGS) \ $(NULL) osmo_meas_udp2db_SOURCES = \ @@ -125,6 +126,7 @@ osmo_meas_udp2db_CFLAGS = \ $(LIBOSMOCORE_CFLAGS) \ $(LIBOSMOGSM_CFLAGS) \ + $(LIBOSMOABIS_CFLAGS) \ $(NULL) meas_json_SOURCES = \ @@ -140,5 +142,6 @@ meas_json_CFLAGS = \ $(LIBOSMOCORE_CFLAGS) \ $(LIBOSMOGSM_CFLAGS) \ + $(LIBOSMOABIS_CFLAGS) \ $(NULL) diff --git a/openbsc/tests/sndcp_xid/Makefile.am b/openbsc/tests/sndcp_xid/Makefile.am index 99b9d1a..d09c41b 100644 --- a/openbsc/tests/sndcp_xid/Makefile.am +++ b/openbsc/tests/sndcp_xid/Makefile.am @@ -15,6 +15,7 @@ $(LIBOSMOGB_LIBS) \ $(LIBCARES_LIBS) \ $(LIBCRYPTO_LIBS) \ - -lgtp -lrt -lm + $(LIBGTP_LIBS) \ + -lrt -lm -- To view, visit https://gerrit.osmocom.org/2652 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If8d57b72f63d79cc0d8efba7466c6ec177207cbb Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Alexander Huemer