> On 18 Oct 2015, at 05:26, Marcin Starzyk <marcin.starzyk(a)gmail.com> wrote:
>
Hi!
> Is it acceptable for you?- if so - how should I start? (I've read section for developers on openbsc wiki but still things are not clear to me as to how to start)
0.) The first libdbi corruption has been fixed by a patch[1]. You might just
suffer from this one.
1.) In OpenBSC and when linking against libdbi 0.9 we get crashes on i386.
I have a first analysis here[2] you could see which part fails. E.g. you could
start compiling libdbi/libdi-drivers on your system with the address sanitizer
(ASAN) and see if crashes are already triggered by the builtin testsuite, if
not move on to OpenBSC
2.) Start looking into replacing libdbi calls with direct sqlite3 calls. To store
"BLOB" libdi was wrapping it and we either copy that code or we migrate
the data. E.g. have a look at how we migrate SMS on a schema change.
1st and 2nd are two alternatives, both of them have ups and downs and are
acceptable ways to move forward.
holger
[1] https://github.com/sysmocom/meta-telephony/blob/master/recipes-misc/libdbi/…
[2] http://sourceforge.net/p/libdbi/mailman/message/32607036/
Here is the part of the branch openbsc:neels/gtphub that I believe may be
merged to master at this point. (Holger: please go ahead with the merge, or
tell me to do so...)
The remaining bit is mostly a unit test netcat'ing to a gtphub instance. To do
that properly, gtphub must be configurable. Hence I'm starting to add VTY
config, which is not complete yet. Hence that part is still omitted here.
Neels Hofmeyr (15):
Add GTP hub stub, as simplistic UDP forwarder.
gtphub: add to build
gtphub: add skeletal gtphub.[hc]
gtphub: populate API impl from test prog
gtphub: add a todo comment
gtphub: add TEI map API.
gtphub: add gtphub_test.c (empty)
gtphub: add TEI map test
gtphub: add GTP header validation
gtphub: undup code: memset on a struct.
gtphub: tweak logging
gtphub: index IEs, decode and log a few.
gtphub: split gtp_relay() in r/w funcs
gtphub: map sequence numbers SGSNs<->GGSNs
gtphub: add signal handler to gtphub_main
openbsc/.gitignore | 2 +
openbsc/configure.ac | 1 +
openbsc/include/openbsc/Makefile.am | 3 +-
openbsc/include/openbsc/debug.h | 1 +
openbsc/include/openbsc/gtphub.h | 151 ++++++++
openbsc/src/gprs/Makefile.am | 4 +
openbsc/src/gprs/gtphub.c | 714 ++++++++++++++++++++++++++++++++++++
openbsc/src/gprs/gtphub_main.c | 256 +++++++++++++
openbsc/tests/Makefile.am | 2 +-
openbsc/tests/gtphub/Makefile.am | 15 +
openbsc/tests/gtphub/gtphub_test.c | 117 ++++++
openbsc/tests/gtphub/gtphub_test.ok | 1 +
openbsc/tests/testsuite.at | 7 +
13 files changed, 1272 insertions(+), 2 deletions(-)
create mode 100644 openbsc/include/openbsc/gtphub.h
create mode 100644 openbsc/src/gprs/gtphub.c
create mode 100644 openbsc/src/gprs/gtphub_main.c
create mode 100644 openbsc/tests/gtphub/Makefile.am
create mode 100644 openbsc/tests/gtphub/gtphub_test.c
create mode 100644 openbsc/tests/gtphub/gtphub_test.ok
--
2.1.4
Dear Sir
It's mentioned on the site that the non-secure authorization is feasible
with IMEI/IMSI. How can we authorize any MS using IMEI ??
I mean, the authorization field is in the Subscriber table of the database
so how is it possible to set authorization with IMEI number.
Regards.
From: Pablo Neira Ayuso <pablo(a)soleta.eu>
Holger reports that the bitmap that accounts for available Osmux circuit
IDs is limited to 128, when the maximum number of circuit IDs are
determined by the uint8_t field in the header (ie. 256 circuits).
---
@Holger: Will be revisiting libosmo-netif too, at quick glance I can see
insufficient validation of several functions there that take this
allocated ccid as input parameter.
openbsc/src/libmgcp/mgcp_osmux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/openbsc/src/libmgcp/mgcp_osmux.c b/openbsc/src/libmgcp/mgcp_osmux.c
index 90b7368..d110f42 100644
--- a/openbsc/src/libmgcp/mgcp_osmux.c
+++ b/openbsc/src/libmgcp/mgcp_osmux.c
@@ -530,7 +530,7 @@ int osmux_send_dummy(struct mgcp_endpoint *endp)
}
/* bsc-nat allocates/releases the Osmux circuit ID */
-static uint8_t osmux_cid_bitmap[16];
+static uint8_t osmux_cid_bitmap[(OSMUX_CID_MAX + 1) / 8];
int osmux_get_cid(void)
{
--
2.1.4
Daniel,
your from address had triple l's in them. Just saying in case some config
needs fixing. I noticed because I was replying on a patch and got a
bounce from sysmocom.de.
~Neels
Hello list,
I have compiled OpenBSC stack following the link http://openbsc.osmocom.org/trac/wiki/network_from_scratch.
Everything has been compiled and configured smoothly except osmo-bts.For installing osmo-bts,i git cloned master branch from https://github.com/osmocom/osmo-bts.
Following the link, i did configure --enable-trx and when make osmo-bts, i am getting the following error:
l1_if.c: In function ‘bts_model_l1sap_down’:
l1_if.c:552:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
l1_if.c:553:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
l1_if.c:554:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
l1_if.c:555:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
l1_if.c:580:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
l1_if.c:581:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
l1_if.c:582:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
l1_if.c:583:23: error: ‘struct amr_multirate_conf’ has no member named ‘mode’
make: *** [l1_if.o] Error 1
I have tried it with the change branch: jolly/trx and also tried to make osmo-bts-trx in the src directory of osmo-bts but same error persisits.
Any help in this regard will be a worth.
Thanks
Best Regards
From: Daniel Willmann <dwillmann(a)sysmocom.de>
Hello,
the following patches should complete the usage of RAND_bytes() for
GPRS. Jacob improved the SGSN test case so it would extract the PTMSI
from the LLC frames and use those in the response.
This means the gprs_sgsn patch will not break the test anymore.
Furthermore, I changed the gbproxy implementation and test case to use
RAND_bytes() instead of rand_r(). The test case previously used rand_r()
to (re-)set the seed value for TLLI/PTMSI allocation in order to get
predictable results. With RAND_bytes() this is not possible. Instead the
tests overrides that function, replacing it with a predictable sequence
of random numbers.
Regards
Daniel
Daniel Willmann (3):
gprs: Use RAND_bytes for p-tmsi
gbproxy/test: Add and call cleanup_test function
gprs/gb_proxy: Use RAND_bytes for gbproxy TLLI/TMSI allocation
Jacob Erlbeck (2):
sgsn/test: Add and call cleanup_test function
sgsn/test: Really parse received DL LLC messages
openbsc/include/openbsc/gb_proxy.h | 4 -
openbsc/src/gprs/Makefile.am | 7 +-
openbsc/src/gprs/gb_proxy.c | 16 +-
openbsc/src/gprs/gprs_sgsn.c | 6 +-
openbsc/tests/gbproxy/Makefile.am | 4 +-
openbsc/tests/gbproxy/gbproxy_test.c | 110 +++++---
openbsc/tests/gbproxy/gbproxy_test.ok | 514 +++++++++++++++++-----------------
openbsc/tests/sgsn/Makefile.am | 2 +
openbsc/tests/sgsn/sgsn_test.c | 133 +++++++--
9 files changed, 464 insertions(+), 332 deletions(-)
--
2.1.4
From: Daniel Willmann <dwillmann(a)sysmocom.de>
The following patches uses RAND_bytes() from openssl instead of rand() to
generate TMSI/P-TMSI and auth tuples.
I didn't change the use of rand_r() in gb-proxy because the gbproxy test seems
to depend on predictable randomness.
Daniel Willmann (4):
libmsc: Use RAND_bytes when choosing a tmsi
gprs: Use RAND_bytes for p-tmsi
libmsc: Use RAND_bytes to choose auth tuple
libmsc: Use RAND_bytes to generate a token
openbsc/configure.ac | 2 +-
openbsc/src/gprs/gprs_sgsn.c | 4 +++-
openbsc/src/libmsc/Makefile.am | 2 +-
openbsc/src/libmsc/auth.c | 9 +++++++--
openbsc/src/libmsc/db.c | 12 ++++++++++--
openbsc/src/osmo-nitb/Makefile.am | 2 +-
openbsc/tests/channel/Makefile.am | 2 +-
openbsc/tests/db/Makefile.am | 2 +-
8 files changed, 25 insertions(+), 10 deletions(-)
--
2.1.4
---
gtp/gtp.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/gtp/gtp.c b/gtp/gtp.c
index e6a610d..de6a7b4 100644
--- a/gtp/gtp.c
+++ b/gtp/gtp.c
@@ -614,6 +614,15 @@ int gtp_notification(struct gsn_t *gsn, int version,
return 0;
}
+/* Look for a message in the response queue for the given peer and sequence
+ * number seq. If found, (re-)send the response message and return 0. Otherwise
+ * return nonzero. This allows catching duplicate messages.
+ * A response message stays in the response queue until it times out.
+ * So, for any number of identical requests within that timeout period, the
+ * same packet can be resent.
+ * TODO this only checks the peer and sequence number, and does not verify that
+ * the GTP request is identical to the previous one for this peer and sequence
+ * nr: a mere peer or seq glitch can cause leaks of previous responses. */
int gtp_duplicate(struct gsn_t *gsn, int version,
struct sockaddr_in *peer, uint16_t seq)
{
@@ -873,7 +882,7 @@ int gtp_echo_ind(struct gsn_t *gsn, int version, struct sockaddr_in *peer,
int fd, void *pack, unsigned len)
{
- /* Check if it was a duplicate request */
+ /* Repeat previous response in case of duplicate request */
if (!gtp_duplicate(gsn, 0, peer, get_seq(pack)))
return 0;
@@ -1258,7 +1267,7 @@ int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
uint8_t linked_nsapi = 0;
struct pdp_t *linked_pdp = NULL;
- /* TODO describe what this is all about: */
+ /* Repeat previous response in case of duplicate request */
if (!gtp_duplicate(gsn, version, peer, seq))
return 0;
@@ -1955,10 +1964,9 @@ int gtp_update_pdp_ind(struct gsn_t *gsn, int version,
uint64_t imsi;
uint8_t nsapi;
- /* Is this a duplicate ? */
- if (!gtp_duplicate(gsn, version, peer, seq)) {
- return 0; /* We already sent of response once */
- }
+ /* Repeat previous response in case of duplicate request */
+ if (!gtp_duplicate(gsn, version, peer, seq))
+ return 0;
/* Decode information elements */
if (gtpie_decaps(ie, version, pack + hlen, len - hlen)) {
@@ -2432,10 +2440,9 @@ int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
int n;
int count = 0;
- /* Is this a duplicate ? */
- if (!gtp_duplicate(gsn, version, peer, seq)) {
- return 0; /* We already sent off response once */
- }
+ /* Repeat previous response in case of duplicate request */
+ if (!gtp_duplicate(gsn, version, peer, seq))
+ return 0;
/* Find the linked context in question */
if (pdp_getgtp1(&linked_pdp, get_tei(pack))) {
--
2.1.4