[PATCH] osmocom-bb[master]: host/mobile: use talloc for ms->name allocation

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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()

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Vadim Yanitskiy

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

2017-05-16 Thread Max

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

2017-05-16 Thread Max

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'

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Max

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

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Harald Welte

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

2017-05-16 Thread Harald Welte
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

2017-05-16 Thread Max

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

2017-05-16 Thread daniel

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

2017-05-16 Thread Max

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

2017-05-16 Thread Keith Whyte
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

2017-05-16 Thread Keith Whyte

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

2017-05-16 Thread Max

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

2017-05-16 Thread Alexander Huemer

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