Dear List,
I am in the process of creating the Wiki page for Ettus B200/B210 with OpenBSC, GPRS and Asterisk.
I am quite close, both data and calls are working, but the voice calls are half sided. The downlink direction works, but the uplink does not.
I tried without Asterisk and LCR (between two phones) and still the calls are half sided.
In the mean time I got these messages in the Osmo-BTS log:
<0006> scheduler.c:276 PH-DATA.req: chan_nr=0x0a link_id=0x00 fn=1284768 ts=2 tr x=0
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=1 at f n=1284764 to transmit.
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=2 at f n=1284764 to transmit.
<0006> scheduler.c:379 TCH RTS.ind: chan=TCH/F chan_nr=0x09 fn=1284772 ts=1 trx= 0
<0006> scheduler.c:276 PH-DATA.req: chan_nr=0x09 link_id=0x00 fn=1284772 ts=1 tr x=0
<0006> scheduler.c:379 TCH RTS.ind: chan=TCH/F chan_nr=0x0a fn=1284772 ts=2 trx= 0
<0006> scheduler.c:276 PH-DATA.req: chan_nr=0x0a link_id=0x00 fn=1284772 ts=2 tr x=0
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=1 at f n=1284768 to transmit.
<0006> scheduler.c:1036 TCH/F has not been served !! No prim for trx=0 ts=2 at f n=1284768 to transmit.
SMS and GPRS seems to be fine.
If someone have any idea, I would love to hear it. :-)
Thanks!
Csaba
Hi all,
This patch set adds to libosmocore an optimized Viterbi decodeer for
architecture specific (Intel SSE) and non-specific cases. The
implementation covers codes with constraint lengths of K=5 and K=7 and
rates 1/4 to 3/4, which make up the majority of GSM use cases. Speedup
from the current implementation is in the range of 5 to 20 depending on
the processor and code type. API is unchanged.
Tested on Haswell (i7-4770K) and Atom (D2550). Additional test codes
from osmo-bts are included. Further tests for AWGN bit-error-rate
and benchmarks can be found in the following repository.
https://github.com/ttsou/osmo-conv-test
Here are some examples.
Bit error test for GPRS CS2 with SNR of 5 dB and 100000 bursts.
$ ./conv_test -c 2 -e -r 5 -i 100000
=================================================
[+] Testing: GPRS CS2
[.] Specs: (N=2, K=5, non-recursive, flushed, not punctured)
[.] Input length : ret = 290 exp = 290 -> OK
[.] Output length : ret = 588 exp = 588 -> OK
[.] BER tests:
[..] Testing base:
[..] Input BER.......................... 0.042443
[..] Output BER......................... 0.000006
[..] Output FER......................... 0.001350 (135)
[..] Testing SIMD:
[..] Input BER.......................... 0.042460
[..] Output BER......................... 0.000005
[..] Output FER......................... 0.001240 (124)
Timed AFS benchmark with 8 threads and 100000 bursts per thread.
$ ./conv_test -b -c 10 -j 8 -i 100000
=================================================
[+] Testing: GSM TCH/AFS 6.7
[.] Specs: (N=4, K=5, recursive, flushed, punctured)
[.] Input length : ret = 140 exp = 140 -> OK
[.] Output length : ret = 448 exp = 448 -> OK
[.] Performance benchmark:
[..] Encoding / Decoding 800000 bursts on 8 thread(s):
[..] Testing base:
[..] Elapsed time....................... 4.320001 secs
[..] Rate............................... 25.925920 Mbps
[..] Testing SIMD:
[..] Elapsed time....................... 0.458272 secs
[..] Rate............................... 244.396341 Mbps
[..] Speedup............................ 9.426718
-TT
This commit adds this predicate function which can be used to
avoid the execution of code if a certain log level is not enabled.
The function will only return 0 (false), if it is sure that a logging
call for the same facility and level will not produce any output.
This safety criterion shall ensure, that no logging output is lost
due to the use of this predicate as a guard. On the other hand, even
if the predicate returns != 0 (true), no logging output might get
generated by a similar logging command.
Note that the current implementation is not focussed on performance,
which could be improved by using a lookup table instead of iterating
through every target.
Sponsored-by: On-Waves ehf
---
include/osmocom/core/logging.h | 1 +
src/logging.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+)
diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 1c159d0..290b33d 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -198,6 +198,7 @@ void logp2(int subsys, unsigned int level, const char *file,
int line, int cont, const char *format, ...)
__attribute__ ((format (printf, 6, 7)));
int log_init(const struct log_info *inf, void *talloc_ctx);
+int log_check_level(int subsys, unsigned int level);
/* context management */
void log_reset_context(void);
diff --git a/src/logging.c b/src/logging.c
index 876964a..c7b1999 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -865,4 +865,43 @@ int log_init(const struct log_info *inf, void *ctx)
return 0;
}
+/*! \brief Check whether a log entry will be generated.
+ * \returns != 0 if a log entry might get generated by at least one target */
+int log_check_level(int subsys, unsigned int level)
+{
+ struct log_target *tar;
+
+ if (subsys < 0)
+ subsys = subsys_lib2index(subsys);
+
+ if (subsys > osmo_log_info->num_cat)
+ subsys = DLGLOBAL;
+
+ /* TODO: The following could/should be cached (update on config) */
+
+ llist_for_each_entry(tar, &osmo_log_target_list, entry) {
+ struct log_category *category;
+
+ category = &tar->categories[subsys];
+ /* subsystem is not supposed to be logged */
+ if (!category->enabled)
+ continue;
+
+ /* Check the global log level */
+ if (tar->loglevel != 0 && level < tar->loglevel)
+ continue;
+
+ /* Check the category log level */
+ if (tar->loglevel == 0 && category->loglevel != 0 &&
+ level < category->loglevel)
+ continue;
+
+ /* This might get logged (ignoring filters) */
+ return 1;
+ }
+
+ /* We are sure, that this will not be logged. */
+ return 0;
+}
+
/*! @} */
--
1.9.1
Hi,
here are some patches that I produced while compiling some osmocom
projects and its dependencies on a new box.
Most of them are trivialities that prevent compiler warnings.
The patch for openbsc though fixes a bug that prevents the build when
libgtp from openggsn is not present on the system.
Kind regards,
-Alex
Hi,
I like code-review around mailinglists (mostly everybody can read and learn from
comments or code), it shows that people collaborate and that we move forward.
What I don't like about the current workflow is that we need to manually close things
in patchwork after applying/rejecting/ignoring a patch and that to see if it compiles and
works are done after the review and by the person that applies the changes.
In other projects I have used Gerrit and besides it being a Java monster found it
quite okay to use. One strength is that one can directly push the changes for a branch
for review, the other is that Jenkins and Gerrit can collaborate. This means that after
a commit is pushed make, make check, make distcheck can be executed. Comments
will always be attached to a line and not be lost due me quoting and removing parts
of the mail.
What I am not sure about:
* How do the email notifications look like? E.g. do we just get a "Somebody has
commented" mail or do we get diff + comment sent here? In OpenOCD I see there
is an email with the diff[1] but no mail with the comments.
* Shall we support direct pushes? I think specially in the beginning we should but
the branch name for that would change.
* A change that impacts libopenbsc+OpenBSC is difficult to represent. It would break
"the" build but I don't see any other way.
Is there enough consensus to give it a try?
holger
[1] http://sourceforge.net/p/openocd/mailman/message/34646766/
These functions originate from openbsc/src/gprs but are generic
msgb helper functions.
msgb_copy: This function allocates a new msgb, copies the data
buffer of msg, and adjusts the pointers (incl. l1h-l4h)
accordingly.
msgb_resize_area:
This resizes a sub area of the msgb data and adjusts the
pointers (incl. l1h-l4h) accordingly.
Sponsored-by: On-Waves ehf
---
include/osmocom/core/msgb.h | 3 ++
src/msgb.c | 88 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 91 insertions(+)
diff --git a/include/osmocom/core/msgb.h b/include/osmocom/core/msgb.h
index 644a639..21e363a 100644
--- a/include/osmocom/core/msgb.h
+++ b/include/osmocom/core/msgb.h
@@ -74,6 +74,9 @@ extern struct msgb *msgb_dequeue(struct llist_head *queue);
extern void msgb_reset(struct msgb *m);
uint16_t msgb_length(const struct msgb *msg);
extern const char *msgb_hexdump(const struct msgb *msg);
+extern int msgb_resize_area(struct msgb *msg, uint8_t *area,
+ size_t old_size, size_t new_size);
+extern struct msgb *msgb_copy(const struct msgb *msg, const char *name);
#ifdef MSGB_DEBUG
#include <osmocom/core/panic.h>
diff --git a/src/msgb.c b/src/msgb.c
index b2fe1d2..a257479 100644
--- a/src/msgb.c
+++ b/src/msgb.c
@@ -153,6 +153,94 @@ void msgb_set_talloc_ctx(void *ctx)
tall_msgb_ctx = ctx;
}
+/*! \brief Copy an msgb.
+ *
+ * This function allocates a new msgb, copies the data buffer of msg,
+ * and adjusts the pointers (incl l1h-l4h) accordingly. The cb part
+ * is not copied.
+ * \param[in] msg The old msgb object
+ * \param[in] name Human-readable name to be associated with msgb
+ */
+struct msgb *msgb_copy(const struct msgb *msg, const char *name)
+{
+ struct msgb *new_msg;
+
+ new_msg = msgb_alloc(msg->data_len, name);
+ if (!new_msg)
+ return NULL;
+
+ /* copy data */
+ memcpy(new_msg->_data, msg->_data, new_msg->data_len);
+
+ /* copy header */
+ new_msg->len = msg->len;
+ new_msg->data += msg->data - msg->_data;
+ new_msg->head += msg->head - msg->_data;
+ new_msg->tail += msg->tail - msg->_data;
+
+ if (msg->l1h)
+ new_msg->l1h = new_msg->_data + (msg->l1h - msg->_data);
+ if (msg->l2h)
+ new_msg->l2h = new_msg->_data + (msg->l2h - msg->_data);
+ if (msg->l3h)
+ new_msg->l3h = new_msg->_data + (msg->l3h - msg->_data);
+ if (msg->l4h)
+ new_msg->l4h = new_msg->_data + (msg->l4h - msg->_data);
+
+ return new_msg;
+}
+
+/*! \brief Resize an area within an msgb
+ *
+ * This resizes a sub area of the msgb data and adjusts the pointers (incl
+ * l1h-l4h) accordingly. The cb part is not updated. If the area is extended,
+ * the contents of the extension is undefined. The complete sub area must be a
+ * part of [data,tail].
+ *
+ * \param[inout] msg The msgb object
+ * \param[in] area A pointer to the sub-area
+ * \param[in] old_size The old size of the sub-area
+ * \param[in] new_size The new size of the sub-area
+ * \returns 0 on success, -1 if there is not enough space to extend the area
+ */
+int msgb_resize_area(struct msgb *msg, uint8_t *area,
+ size_t old_size, size_t new_size)
+{
+ int rc;
+ uint8_t *rest = area + old_size;
+ int rest_len = msg->len - old_size - (area - msg->data);
+ int delta_size = (int)new_size - (int)old_size;
+
+ if (area < msg->data || rest > msg->tail)
+ MSGB_ABORT(msg, "Sub area is not fully contained in the msg data\n");
+
+ if (delta_size == 0)
+ return 0;
+
+ if (delta_size > 0) {
+ rc = msgb_trim(msg, msg->len + delta_size);
+ if (rc < 0)
+ return rc;
+ }
+
+ memmove(area + new_size, area + old_size, rest_len);
+
+ if (msg->l1h >= rest)
+ msg->l1h += delta_size;
+ if (msg->l2h >= rest)
+ msg->l2h += delta_size;
+ if (msg->l3h >= rest)
+ msg->l3h += delta_size;
+ if (msg->l4h >= rest)
+ msg->l4h += delta_size;
+
+ if (delta_size < 0)
+ msgb_trim(msg, msg->len + delta_size);
+
+ return 0;
+}
+
+
/*! \brief Return a (static) buffer containing a hexdump of the msg
* \param[in] msg message buffer
* \returns a pointer to a static char array
--
1.9.1
This series imports Pablo Neira Ayuso original gtp-kernel support patch
unmodified to master and applies some fixes ontop of it.
The last patch in the series then add network namespace support to it.
This state is in sync with gtp-kernel patch I posted a few minutes ago.
Andreas
--
Andreas Schultz (3):
ggsn: update gpt-kernel logging to libosmocore
ggsn: fix autotool pkg-config invokation
ggsn: add network namespace support
Pablo Neira Ayuso (1):
ggsn: add support for GTP kernel data encapsulation
configure.ac | 15 ++++
ggsn/Makefile.am | 11 ++-
ggsn/cmdline.c | 48 +++++++++-
ggsn/cmdline.ggo | 4 +
ggsn/cmdline.h | 8 ++
ggsn/ggsn.c | 52 ++++++++++-
ggsn/gtp-kernel.c | 258 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
ggsn/gtp-kernel.h | 53 +++++++++++
lib/Makefile.am | 4 +-
lib/netns.c | 135 ++++++++++++++++++++++++++++
lib/netns.h | 26 ++++++
11 files changed, 607 insertions(+), 7 deletions(-)
create mode 100644 ggsn/gtp-kernel.c
create mode 100644 ggsn/gtp-kernel.h
create mode 100644 lib/netns.c
create mode 100644 lib/netns.h
--
2.5.0
By the example of osmo-sgsn, package osmo-gtphub for debian.
Sponsored-by: On-Waves ehi
---
debian/control | 14 +++
debian/osmocom-gtphub.default | 2 +
debian/osmocom-gtphub.examples | 1 +
debian/osmocom-gtphub.init | 150 +++++++++++++++++++++++
debian/osmocom-gtphub.install | 1 +
debian/rules | 1 +
openbsc/doc/examples/osmo-gtphub/osmo-gtphub.cfg | 23 ++++
7 files changed, 192 insertions(+)
create mode 100644 debian/osmocom-gtphub.default
create mode 100644 debian/osmocom-gtphub.examples
create mode 100755 debian/osmocom-gtphub.init
create mode 100644 debian/osmocom-gtphub.install
create mode 100644 openbsc/doc/examples/osmo-gtphub/osmo-gtphub.cfg
diff --git a/debian/control b/debian/control
index 2447d29..53b6908 100644
--- a/debian/control
+++ b/debian/control
@@ -50,6 +50,12 @@ Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Osmocom Base Station Controller Network Address Translation
Network address translation for BSC.
+Package: osmocom-gtphub
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Osmocom GTP hub
+ Proxy for comms between SGSN and GGSN.
+
Package: osmocom-bsc-dbg
Architecture: any
Section: debug
@@ -105,3 +111,11 @@ Priority: extra
Depends: osmocom-bsc-nat (= ${binary:Version}), ${misc:Depends}
Description: Debug symbols for the OpenBSC Network Address Translation
Make debugging possible
+
+Package: osmocom-gtphub-dbg
+Architecture: any
+Section: debug
+Priority: extra
+Depends: osmocom-gtphub (= ${binary:Version}), ${misc:Depends}
+Description: Debug symbols for Osmocom GTP hub
+ Make debugging possible
diff --git a/debian/osmocom-gtphub.default b/debian/osmocom-gtphub.default
new file mode 100644
index 0000000..6af82da
--- /dev/null
+++ b/debian/osmocom-gtphub.default
@@ -0,0 +1,2 @@
+CONFIG_FILE="/etc/osmocom/osmo-gtphub.cfg"
+
diff --git a/debian/osmocom-gtphub.examples b/debian/osmocom-gtphub.examples
new file mode 100644
index 0000000..48c2dc0
--- /dev/null
+++ b/debian/osmocom-gtphub.examples
@@ -0,0 +1 @@
+openbsc/doc/examples/osmo-gtphub
diff --git a/debian/osmocom-gtphub.init b/debian/osmocom-gtphub.init
new file mode 100755
index 0000000..4dc67b3
--- /dev/null
+++ b/debian/osmocom-gtphub.init
@@ -0,0 +1,150 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: osmo-gtphub
+# Required-Start: $network $local_fs
+# Required-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Osmocom GTP hub
+# Description: Osmocom GTP hub
+### END INIT INFO
+
+# Author: Neels Hofmeyr <nhofmeyr(a)sysmocom.de>
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+NAME=osmo-gtphub # Introduce the short server's name here
+DESC="Osmocom GTP hub" # Introduce a short description here
+DAEMON=/usr/bin/osmo-gtphub # Introduce the server's location here
+SCRIPTNAME=/etc/init.d/osmocom-gtphub
+
+# Exit if the package is not installed
+[ -x $DAEMON ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/osmocom-gtphub ] && . /etc/default/osmocom-gtphub
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+DAEMON_ARGS="$DAEMON_ARGS -D -c $CONFIG_FILE"
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon --start --quiet --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon --start --quiet --exec $DAEMON -- \
+ $DAEMON_ARGS \
+ || return 2
+ # Add code here, if necessary, that waits for the process to be ready
+ # to handle requests from services started subsequently which depend
+ # on this one. As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ # Wait for children to finish too if this is a daemon that forks
+ # and if the daemon is only ever run from this initscript.
+ # If the above conditions are not satisfied then add some other code
+ # that waits for the process to drop all resources that could be
+ # needed by services started subsequently. A last resort is to
+ # sleep for some time.
+ start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+ [ "$?" = 2 ] && return 2
+ return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ start-stop-daemon --stop --signal 1 --quiet $PIDFILE --name $NAME
+ return 0
+}
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ status)
+ status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+ ;;
+ #reload|force-reload)
+ #
+ # If do_reload() is not implemented then leave this commented out
+ # and leave 'force-reload' as an alias for 'restart'.
+ #
+ #log_daemon_msg "Reloading $DESC" "$NAME"
+ #do_reload
+ #log_end_msg $?
+ #;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented then remove the
+ # 'force-reload' alias
+ #
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ *)
+ #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
+ echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+:
diff --git a/debian/osmocom-gtphub.install b/debian/osmocom-gtphub.install
new file mode 100644
index 0000000..908c1a5
--- /dev/null
+++ b/debian/osmocom-gtphub.install
@@ -0,0 +1 @@
+/usr/bin/osmo-gtphub
diff --git a/debian/rules b/debian/rules
index 8047b79..62518d9 100755
--- a/debian/rules
+++ b/debian/rules
@@ -34,6 +34,7 @@ override_dh_strip:
dh_strip -posmocom-sgsn --dbg-package=osmocom-sgsn-dbg
dh_strip -posmocom-gbproxy --dbg-package=osmocom-gbproxy-dbg
dh_strip -posmocom-bsc-nat --dbg-package=osmocom-bsc-nat-dbg
+ dh_strip -posmocom-gtphub --dbg-package=osmocom-gtphub-dbg
override_dh_auto_configure:
echo $(VERSION) > openbsc/.tarball-version
diff --git a/openbsc/doc/examples/osmo-gtphub/osmo-gtphub.cfg b/openbsc/doc/examples/osmo-gtphub/osmo-gtphub.cfg
new file mode 100644
index 0000000..c9bb4cf
--- /dev/null
+++ b/openbsc/doc/examples/osmo-gtphub/osmo-gtphub.cfg
@@ -0,0 +1,23 @@
+!
+! Osmocom gtphub configuration
+!
+
+line vty
+ no login
+
+gtphub
+ ! Local addresses to listen on and send from, each on standard ports
+ ! 2123 and 2152. Setting these addresses is mandatory.
+ bind-to-sgsns 127.0.0.1
+ bind-to-ggsns 127.0.0.2
+
+ ! Local nonstandard ports or separate IPs:
+ !bind-to-sgsns ctrl 127.0.0.1 2342 user 127.0.0.1 4223
+
+ ! Proxy: unconditionally direct all traffic to...
+ !ggsn-proxy 127.0.0.3
+ !sgsn-proxy 127.0.0.4
+
+ ! Proxy with nonstandard ports or separate IPs:
+ !ggsn-proxy ctrl 127.0.0.3 2123 user 127.0.0.5 2152
+
--
2.1.4
Dear Neels,
Today just grabbed the latest OpenBSC master, and got this compile error:
Making all in gtphub
make[3]: Entering directory `/root/new_osmocom/openbsc/openbsc/tests/gtphub'
CC gtphub_test.o
CC ../../src/gprs/gtphub.o
../../src/gprs/gtphub.c:2191:1: fatal error: opening dependency file .deps/../../src/gprs/gtphub.Tpo: No such file or directory
}
^
compilation terminated.
make[3]: *** [../../src/gprs/gtphub.o] Error 1
make[3]: Leaving directory `/root/new_osmocom/openbsc/openbsc/tests/gtphub'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/root/new_osmocom/openbsc/openbsc/tests'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/new_osmocom/openbsc/openbsc'
make: *** [all] Error 2
Do you have any idea why is this happening?
Regards,
Csaba