Attention is currently required from: neels, laforge, pespin.
jolly has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-abis/+/31033 )
Change subject: Add L1 signals to misdn driver
......................................................................
Patch Set 7:
(5 comments)
File src/input/misdn.c:
https://gerrit.osmocom.org/c/libosmo-abis/+/31033/comment/8385f9a7_7c5e4c9e
PS3, Line 115: LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_LOS_OFF\n");
> I will put the signals into a value_string array. […]
Done
https://gerrit.osmocom.org/c/libosmo-abis/+/31033/comment/59b49fb4_6f3c6e0b
PS3, Line 274: mph_information_ind(line, *((int *)msg->data));
> This field is machine's endian. There is no conversion in the kernel driver.
Done
https://gerrit.osmocom.org/c/libosmo-abis/+/31033/comment/b10e7f37_14b400b9
PS3, Line 636: mph_information_ind(line, *((int *)msg->data));
> I think you forgot to change this one to uint32_t
Done
File src/input/misdn.c:
https://gerrit.osmocom.org/c/libosmo-abis/+/31033/comment/5cea295f_514abb9b
PS4, Line 111: isd.sa_bits & 1, (isd.sa_bits >> 1) & 1, (isd.sa_bits >> 2) & 1, (isd.sa_bits >> 3) & 1,
> usually indentation goes at the same column after function's "(" char. […]
Done
File src/input/misdn.c:
https://gerrit.osmocom.org/c/libosmo-abis/+/31033/comment/3dbe3013_f66e3840
PS5, Line 110: get_value_string(e1inp_signal_names, S_L_INP_LINE_SA_BITS),
> btw, i usually indent to the opening brace because that's what vim does for me, but also simply inde […]
Done
--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/31033
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: Id8b6fad9b073cf92eee92a6906bf5b57af37e2f0
Gerrit-Change-Number: 31033
Gerrit-PatchSet: 7
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr(a)sysmocom.de>
Gerrit-CC: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Comment-Date: Mon, 13 Feb 2023 17:14:28 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: jolly <andreas(a)eversberg.eu>
Comment-In-Reply-To: neels <nhofmeyr(a)sysmocom.de>
Comment-In-Reply-To: laforge <laforge(a)osmocom.org>
Comment-In-Reply-To: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: comment
dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-abis/+/31317 )
Change subject: trau_pcu_ericsson: change loglevel for CPS decoding
......................................................................
trau_pcu_ericsson: change loglevel for CPS decoding
The CPS field is inside the MAC block. When we are unable to decode the
CPS field a message is printed on loglevel NOTICE. However, it is pretty
normal that the CCU often receives noise (always when no MS transmits)
so we see this error very often. Lets change the level to DEBUG.
Change-Id: I1f5adbf9da6be4fec2d8c93e781c5df62ef62238
Related: OS#5198
---
M src/trau/trau_pcu_ericsson.c
1 file changed, 2 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/17/31317/1
diff --git a/src/trau/trau_pcu_ericsson.c b/src/trau/trau_pcu_ericsson.c
index 3a5a6d5..0b0477b 100644
--- a/src/trau/trau_pcu_ericsson.c
+++ b/src/trau/trau_pcu_ericsson.c
@@ -1708,13 +1708,13 @@
osmo_ubit2pbit_ext((pbit_t *) &ind->data, 0, trau_bits, 134, 40, 1);
cps = cps_from_mcs_block(ind->data, ind->cs_hdr, true);
if (cps < 0) {
- LOGP(DLINP, LOGL_NOTICE,
+ LOGP(DLINP, LOGL_DEBUG,
"CCU-DATA-IND-64: unable to read CPS from data block, bad data block received?\n");
break;
}
mcs = mcs_from_cps((uint8_t) cps, ind->cs_hdr);
if (mcs < 0) {
- LOGP(DLINP, LOGL_NOTICE,
+ LOGP(DLINP, LOGL_DEBUG,
"CCU-DATA-IND-64: unable to determine coding scheme (MCS) from CPS, bad data block received?\n");
break;
}
--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/31317
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: I1f5adbf9da6be4fec2d8c93e781c5df62ef62238
Gerrit-Change-Number: 31317
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-MessageType: newchange
Attention is currently required from: osmith, laforge, dexter.
Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-mgw/+/31269
to look at the new patch set (#3).
Change subject: mgcp_e1: be more frugal withe E1 line resources
......................................................................
mgcp_e1: be more frugal withe E1 line resources
At the moment we open an E1 timeslot when needed, but we never
close it even when it is not needed anymore. This may block other
entities from using it. Lets add some logic to detect whether the E1
timeslot is still needed and make sure that it is closed when it is no
longer needed.
Change-Id: Ie6a32abbc5cd984f6d72a384e3b47c1b82ce7058
Related: OS#5198
---
M include/osmocom/mgcp/mgcp_e1.h
M include/osmocom/mgcp/mgcp_trunk.h
M src/libosmo-mgcp/mgcp_e1.c
M src/libosmo-mgcp/mgcp_endp.c
4 files changed, 78 insertions(+), 19 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/69/31269/3
--
To view, visit https://gerrit.osmocom.org/c/osmo-mgw/+/31269
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Change-Id: Ie6a32abbc5cd984f6d72a384e3b47c1b82ce7058
Gerrit-Change-Number: 31269
Gerrit-PatchSet: 3
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-CC: osmith <osmith(a)sysmocom.de>
Gerrit-Attention: osmith <osmith(a)sysmocom.de>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: dexter <pmaier(a)sysmocom.de>
Gerrit-MessageType: newpatchset
dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-abis/+/31315 )
Change subject: trau_sync: allow multiple secondary sync patterns
......................................................................
trau_sync: allow multiple secondary sync patterns
At the moment we can only apply one pattern to synchronize on a TRAU
bitstream. This is sufficient because TRAU framing usually does not
change synchronization patterns. However there may be systems out there
that occasionally switch the synchronization pattern.
Change-Id: Id7de21b2de7d02ae5a8f3cbc003aa7974651a289
Related: OS#5198
---
M include/osmocom/trau/trau_sync.h
M src/trau/trau_sync.c
2 files changed, 62 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/15/31315/1
diff --git a/include/osmocom/trau/trau_sync.h b/include/osmocom/trau/trau_sync.h
index 512b749..35a12bc 100644
--- a/include/osmocom/trau/trau_sync.h
+++ b/include/osmocom/trau/trau_sync.h
@@ -24,3 +24,4 @@
void osmo_trau_sync_rx_ubits(struct osmo_fsm_inst *fi, const ubit_t *bits, size_t n_bits);
void osmo_trau_sync_set_pat(struct osmo_fsm_inst *fi, enum osmo_trau_sync_pat_id pat_id);
+void osmo_trau_sync_set_secondary_pat(struct osmo_fsm_inst *fi, enum osmo_trau_sync_pat_id pat_id, size_t pat_index);
diff --git a/src/trau/trau_sync.c b/src/trau/trau_sync.c
index 4835f85..cf76706 100644
--- a/src/trau/trau_sync.c
+++ b/src/trau/trau_sync.c
@@ -32,6 +32,8 @@
#define S(x) (1 << (x))
#define MAX_TRAU_BYTES 160
+#define MAX_TRAU_SYNC_PATTERN 8
+#define PRIMARY_PATTERN 0
#define T_SYNC 1
@@ -286,16 +288,15 @@
ubit_t history[MAX_TRAU_BYTES*8+1]; /* +1 not required, but helps to expose bugs */
/*! index of next-to-be-written ubit in history */
unsigned int history_idx;
- /*! the pattern we are trying to sync to */
- const struct sync_pattern *pattern;
+ /*! the pattern(s) we are trying to sync to */
+ const struct sync_pattern *pattern[MAX_TRAU_SYNC_PATTERN];
/*! number of consecutive frames without sync */
unsigned int num_consecutive_errors;
};
/* correlate the history (up to the last received bit) against the pattern */
-static int correlate_history_against_pattern(struct trau_rx_sync_state *tss)
+static int correlate_history_against_pattern(struct trau_rx_sync_state *tss, const struct sync_pattern *pattern)
{
- const struct sync_pattern *pattern = tss->pattern;
int i, start, num_wrong = 0;
/* compute index of first bit in history array */
@@ -317,6 +318,33 @@
return num_wrong;
}
+/* correlate the history (up to the last received bit) against multiple patterns */
+static int correlate_history_against_patterns(struct trau_rx_sync_state *tss)
+{
+ size_t pat_index;
+ int num_wrong;
+ int num_wrong_best = MAX_TRAU_BYTES * 8;
+
+ for (pat_index = PRIMARY_PATTERN; pat_index < MAX_TRAU_SYNC_PATTERN; pat_index++) {
+ const struct sync_pattern *pattern;
+
+ pattern = tss->pattern[pat_index];
+ if (!pattern)
+ continue;
+ num_wrong = correlate_history_against_pattern(tss, pattern);
+
+ /* We cannot achieve a better result than 0 errors */
+ if (num_wrong == 0)
+ return 0;
+
+ /* Keep track on the best result */
+ if (num_wrong < num_wrong_best)
+ num_wrong_best = num_wrong;
+ }
+
+ return num_wrong_best;
+}
+
/* add (append) one ubit to the history; wrap as needed */
static void rx_history_add_bit(struct trau_rx_sync_state *tss, ubit_t bit)
{
@@ -328,7 +356,7 @@
/* append bits to history. We assume that this does NOT wrap */
static void rx_history_add_bits(struct trau_rx_sync_state *tss, const ubit_t *bits, size_t n_bits)
{
- unsigned int frame_bits_remaining = tss->pattern->byte_len*8 - tss->history_idx;
+ unsigned int frame_bits_remaining = tss->pattern[PRIMARY_PATTERN]->byte_len*8 - tss->history_idx;
OSMO_ASSERT(frame_bits_remaining >= n_bits);
memcpy(&tss->history[tss->history_idx], bits, n_bits);
tss->history_idx = tss->history_idx + n_bits;
@@ -339,7 +367,7 @@
{
ubit_t tmp[sizeof(tss->history)];
size_t history_size = sizeof(tss->history);
- size_t pattern_bits = tss->pattern->byte_len*8;
+ size_t pattern_bits = tss->pattern[PRIMARY_PATTERN]->byte_len*8;
size_t first_bit = (history_size + tss->history_idx - pattern_bits) % history_size;
int i;
@@ -388,7 +416,9 @@
int rc;
rx_history_add_bit(tss, bit);
- rc = correlate_history_against_pattern(tss);
+
+ /* Apply only the primary pattern while waiting for the alignment */
+ rc = correlate_history_against_pattern(tss, tss->pattern[PRIMARY_PATTERN]);
if (!rc) {
osmo_fsm_inst_state_chg(fi, FRAME_ALIGNED, 0, 0);
/* treat remainder of input bits in correct state */
@@ -407,7 +437,7 @@
struct trau_rx_sync_state *tss = (struct trau_rx_sync_state *) fi->priv;
/* dispatch aligned frame to user */
rx_history_align(tss);
- tss->out_cb(tss->user_data, tss->history, tss->pattern->byte_len*8);
+ tss->out_cb(tss->user_data, tss->history, tss->pattern[PRIMARY_PATTERN]->byte_len*8);
}
static void trau_sync_aligned(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -420,7 +450,7 @@
case TRAUSYNC_E_RX_BITS:
ubb = data;
while (ubb_length(ubb)) {
- unsigned int frame_bits_remaining = tss->pattern->byte_len*8 - tss->history_idx;
+ unsigned int frame_bits_remaining = tss->pattern[PRIMARY_PATTERN]->byte_len*8 - tss->history_idx;
if (ubb_length(ubb) < frame_bits_remaining) {
/* frame not filled by this message; just add data */
rx_history_add_bits(tss, ubb_data(ubb), ubb_length(ubb));
@@ -430,8 +460,8 @@
rx_history_add_bits(tss, ubb_data(ubb), frame_bits_remaining);
ubb_pull(ubb, frame_bits_remaining);
- /* check if we still have frame sync */
- rc = correlate_history_against_pattern(tss);
+ /* check if we still have frame sync using the primary and all secondary patterns */
+ rc = correlate_history_against_patterns(tss);
if (rc > 0) {
tss->num_consecutive_errors++;
if (tss->num_consecutive_errors >= 3) {
@@ -551,7 +581,7 @@
tss->out_cb = frame_out_cb;
tss->user_data = user_data;
- tss->pattern = &sync_patterns[pat_id];
+ tss->pattern[PRIMARY_PATTERN] = &sync_patterns[pat_id];
/* An unusued E1 timeslot normally would send an idle signal that
* has all bits set to one. In order to prevent false-positive
@@ -566,7 +596,25 @@
{
struct trau_rx_sync_state *tss = fi->priv;
- tss->pattern = &sync_patterns[pat_id];
+ /* Clear the pattern list to get rid of all secondary pattern settings */
+ memset(tss->pattern, 0, sizeof(tss->pattern));
+
+ /* Set the primary pattern and reset the FSM */
+ tss->pattern[PRIMARY_PATTERN] = &sync_patterns[pat_id];
+ osmo_fsm_inst_state_chg(fi, FRAME_ALIGNMENT_LOST, 0, 0);
+}
+
+void osmo_trau_sync_set_secondary_pat(struct osmo_fsm_inst *fi, enum osmo_trau_sync_pat_id pat_id, size_t pat_index)
+{
+ struct trau_rx_sync_state *tss = fi->priv;
+
+ OSMO_ASSERT(pat_index > PRIMARY_PATTERN);
+ OSMO_ASSERT(pat_index < ARRAY_SIZE(tss->pattern));
+
+ /* Make sure that only a pattern of the same size can be set as secondary pattern */
+ OSMO_ASSERT(tss->pattern[PRIMARY_PATTERN]->byte_len == sync_patterns[pat_id].byte_len);
+
+ tss->pattern[pat_index] = &sync_patterns[pat_id];
osmo_fsm_inst_state_chg(fi, FRAME_ALIGNMENT_LOST, 0, 0);
}
--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/31315
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: Id7de21b2de7d02ae5a8f3cbc003aa7974651a289
Gerrit-Change-Number: 31315
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-MessageType: newchange