<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/23357">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ulc: Fix FN store order upon wrap around<br><br>Change-Id: I0a742f7fa1541b1837739207b9383772f981fb25<br>---<br>M src/pdch_ul_controller.c<br>M tests/ulc/PdchUlcTest.cpp<br>M tests/ulc/PdchUlcTest.err<br>M tests/ulc/PdchUlcTest.ok<br>4 files changed, 99 insertions(+), 55 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/57/23357/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/pdch_ul_controller.c b/src/pdch_ul_controller.c</span><br><span>index 5340bec..d6d4e5e 100644</span><br><span>--- a/src/pdch_ul_controller.c</span><br><span>+++ b/src/pdch_ul_controller.c</span><br><span>@@ -37,6 +37,20 @@</span><br><span>      { 0, NULL }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define GSM_MAX_FN_THRESH (GSM_MAX_FN >> 1)</span><br><span style="color: hsl(120, 100%, 40%);">+/* 0: equal, -1: fn1 BEFORE fn2, 1: fn1 AFTER fn2 */</span><br><span style="color: hsl(120, 100%, 40%);">+static inline int fn_cmp(uint32_t fn1, uint32_t fn2)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       if (fn1 == fn2)</span><br><span style="color: hsl(120, 100%, 40%);">+               return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* FN1 goes before FN2: */</span><br><span style="color: hsl(120, 100%, 40%);">+    if ((fn1 < fn2 && (fn2 - fn1) < GSM_MAX_FN_THRESH) ||</span><br><span style="color: hsl(120, 100%, 40%);">+       (fn1 > fn2 && (fn1 - fn2) > GSM_MAX_FN_THRESH))</span><br><span style="color: hsl(120, 100%, 40%);">+             return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* FN1 goes after FN2: */</span><br><span style="color: hsl(120, 100%, 40%);">+     return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct pdch_ulc *pdch_ulc_alloc(struct gprs_rlcmac_pdch *pdch, void *ctx)</span><br><span> {</span><br><span>     struct pdch_ulc* ulc;</span><br><span>@@ -53,11 +67,13 @@</span><br><span> {</span><br><span>     struct rb_node *node;</span><br><span>        struct pdch_ulc_node *it;</span><br><span style="color: hsl(120, 100%, 40%);">+     int res;</span><br><span>     for (node = rb_first(&ulc->tree_root); node; node = rb_next(node)) {</span><br><span>          it = container_of(node, struct pdch_ulc_node, node);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (it->fn == fn)</span><br><span style="color: hsl(120, 100%, 40%);">+          res = fn_cmp(it->fn, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+          if (res == 0) /* it->fn == fn */</span><br><span>                  return it;</span><br><span style="color: hsl(0, 100%, 40%);">-              if (it->fn > fn)</span><br><span style="color: hsl(120, 100%, 40%);">+                if (res > 0) /* it->fn AFTER fn */</span><br><span>                     break;</span><br><span>       }</span><br><span>    return NULL;</span><br><span>@@ -123,13 +139,15 @@</span><br><span> </span><br><span>     while (*new) {</span><br><span>               struct pdch_ulc_node *it;</span><br><span style="color: hsl(120, 100%, 40%);">+             int res;</span><br><span> </span><br><span>                 it = container_of(*new, struct pdch_ulc_node, node);</span><br><span> </span><br><span>             parent = *new;</span><br><span style="color: hsl(0, 100%, 40%);">-          if (item->fn < it->fn) {</span><br><span style="color: hsl(120, 100%, 40%);">+             res = fn_cmp(item->fn, it->fn);</span><br><span style="color: hsl(120, 100%, 40%);">+         if (res < 0) { /* item->fn "BEFORE" it->fn */</span><br><span>                     new = &((*new)->rb_left);</span><br><span style="color: hsl(0, 100%, 40%);">-                } else if (item->fn > it->fn) {</span><br><span style="color: hsl(120, 100%, 40%);">+              } else if (res > 0) { /* item->fn "AFTER" it->fn */</span><br><span>                       new = &((*new)->rb_right);</span><br><span>            } else {</span><br><span>                     LOGPDCH(ulc->pdch, DRLCMAC, LOGL_ERROR,</span><br><span>@@ -213,13 +231,15 @@</span><br><span> {</span><br><span>      struct gprs_rlcmac_sba *sba;</span><br><span>         struct pdch_ulc_node *item;</span><br><span style="color: hsl(120, 100%, 40%);">+   int res;</span><br><span> </span><br><span>         struct rb_node *first;</span><br><span>       while((first = rb_first(&ulc->tree_root))) {</span><br><span>          item = container_of(first, struct pdch_ulc_node, node);</span><br><span style="color: hsl(0, 100%, 40%);">-         if (item->fn > fn)</span><br><span style="color: hsl(120, 100%, 40%);">+              res = fn_cmp(item->fn, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                if (res > 0) /* item->fn AFTER fn */</span><br><span>                   break;</span><br><span style="color: hsl(0, 100%, 40%);">-          if (item->fn < fn) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (res < 0) { /* item->fn BEFORE fn */</span><br><span>                        /* Sanity check: */</span><br><span>                  LOGPDCH(ulc->pdch, DRLCMAC, LOGL_ERROR,</span><br><span>                           "Expiring FN=%" PRIu32 " but previous FN=%" PRIu32 " is still reserved!\n",</span><br><span>diff --git a/tests/ulc/PdchUlcTest.cpp b/tests/ulc/PdchUlcTest.cpp</span><br><span>index dfc14be..73f1d6f 100644</span><br><span>--- a/tests/ulc/PdchUlcTest.cpp</span><br><span>+++ b/tests/ulc/PdchUlcTest.cpp</span><br><span>@@ -221,14 +221,14 @@</span><br><span>   printf("*** RELEASE fn=%" PRIu32 ":\n", 0);</span><br><span>      rc = pdch_ulc_release_fn(pdch->ulc, 0);</span><br><span>   print_ulc_nodes(pdch->ulc);</span><br><span style="color: hsl(0, 100%, 40%);">-  //OSMO_ASSERT(rc == 0); FIXME: DISABLED DUE TO BUG!</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(rc == 0);</span><br><span> </span><br><span>    /* Expiring last FN should expire all entries */</span><br><span>     printf("*** EXPIRE FN=%" PRIu32 ":\n", last_fn);</span><br><span>         pdch_ulc_expire_fn(pdch->ulc, last_fn);</span><br><span>   print_ulc_nodes(pdch->ulc);</span><br><span>       /* Make sure the store is empty now: */</span><br><span style="color: hsl(0, 100%, 40%);">- //OSMO_ASSERT(!rb_first(&pdch->ulc->tree_root)); FIXME: DISABLED DUE TO BUG!</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(!rb_first(&pdch->ulc->tree_root));</span><br><span> </span><br><span>         talloc_free(bts);</span><br><span>    printf("=== end: %s ===\n", __FUNCTION__);</span><br><span>diff --git a/tests/ulc/PdchUlcTest.err b/tests/ulc/PdchUlcTest.err</span><br><span>index 88e4644..34a090b 100644</span><br><span>--- a/tests/ulc/PdchUlcTest.err</span><br><span>+++ b/tests/ulc/PdchUlcTest.err</span><br><span>@@ -6,26 +6,38 @@</span><br><span> PDCH(bts=0,trx=0,ts=0) Timeout for registered SBA (FN=72, TA=0)</span><br><span> Creating MS object, TLLI = 0x12345678</span><br><span> MS(TLLI=0x12345678, IMSI=, TA=220, 0/0,) Attaching DL TBF: TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=0 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=0): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=4 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=4): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=8 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=8): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=13 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=13): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=17 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=17): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=21 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=21): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=26 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=26): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=30 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=30): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=34 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=34): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=39 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=39): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span> PDCH(bts=0,trx=0,ts=0) Expiring FN=2715613 but previous FN=2715608 is still reserved!</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715608): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(0, 100%, 40%);">-PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715613): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715608): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715613): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=2715617 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715617): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=2715622 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715622): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=2715626 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715626): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=2715630 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715630): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=2715635 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715635): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=2715639 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715639): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=2715643 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=2715643): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=4 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=4): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=8 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=8): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=13 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=13): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=17 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=17): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=21 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=21): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=26 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=26): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=30 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=30): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=34 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=34): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Expiring FN=43 but previous FN=39 is still reserved!</span><br><span style="color: hsl(120, 100%, 40%);">+PDCH(bts=0,trx=0,ts=0) Timeout for registered POLL (FN=39): TBF(TFI=0 TLLI=0x12345678 DIR=DL STATE=RELEASING)</span><br><span>diff --git a/tests/ulc/PdchUlcTest.ok b/tests/ulc/PdchUlcTest.ok</span><br><span>index 7c17f01..f20fb30 100644</span><br><span>--- a/tests/ulc/PdchUlcTest.ok</span><br><span>+++ b/tests/ulc/PdchUlcTest.ok</span><br><span>@@ -56,7 +56,6 @@</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span> *** RESERVE FN=0:</span><br><span style="color: hsl(0, 100%, 40%);">-FN=0 type=POLL</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -66,9 +65,20 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=0 type=POLL</span><br><span> *** RESERVE FN=4:</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715608 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715613 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715617 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715622 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715626 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715630 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715635 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715639 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=2715643 type=POLL</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=8:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -78,10 +88,10 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=8:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=13:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -91,11 +101,11 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=13:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span> FN=13 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=17:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -105,12 +115,12 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=17:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span> FN=13 type=POLL</span><br><span> FN=17 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=21:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -120,13 +130,13 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=21:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span> FN=13 type=POLL</span><br><span> FN=17 type=POLL</span><br><span> FN=21 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=26:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -136,7 +146,6 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=26:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span>@@ -144,6 +153,7 @@</span><br><span> FN=17 type=POLL</span><br><span> FN=21 type=POLL</span><br><span> FN=26 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=30:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -153,7 +163,6 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=30:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span>@@ -162,6 +171,7 @@</span><br><span> FN=21 type=POLL</span><br><span> FN=26 type=POLL</span><br><span> FN=30 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=34:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -171,7 +181,6 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=34:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span>@@ -181,6 +190,7 @@</span><br><span> FN=26 type=POLL</span><br><span> FN=30 type=POLL</span><br><span> FN=34 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+*** RESERVE FN=39:</span><br><span> FN=2715608 type=POLL</span><br><span> FN=2715613 type=POLL</span><br><span> FN=2715617 type=POLL</span><br><span>@@ -190,7 +200,6 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-*** RESERVE FN=39:</span><br><span> FN=0 type=POLL</span><br><span> FN=4 type=POLL</span><br><span> FN=8 type=POLL</span><br><span>@@ -201,15 +210,6 @@</span><br><span> FN=30 type=POLL</span><br><span> FN=34 type=POLL</span><br><span> FN=39 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715608 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715613 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715617 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715622 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715626 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715630 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715635 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715639 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715643 type=POLL</span><br><span> *** EXPIRE FN=2715613:</span><br><span> FN=2715617 type=POLL</span><br><span> FN=2715622 type=POLL</span><br><span>@@ -218,6 +218,16 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=0 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=4 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=8 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=13 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=17 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=21 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=26 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=30 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=34 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=39 type=POLL</span><br><span> *** RELEASE fn=0:</span><br><span> FN=2715617 type=POLL</span><br><span> FN=2715622 type=POLL</span><br><span>@@ -226,12 +236,14 @@</span><br><span> FN=2715635 type=POLL</span><br><span> FN=2715639 type=POLL</span><br><span> FN=2715643 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=4 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=8 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=13 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=17 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=21 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=26 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=30 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=34 type=POLL</span><br><span style="color: hsl(120, 100%, 40%);">+FN=39 type=POLL</span><br><span> *** EXPIRE FN=43:</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715617 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715622 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715626 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715630 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715635 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715639 type=POLL</span><br><span style="color: hsl(0, 100%, 40%);">-FN=2715643 type=POLL</span><br><span> === end: test_fn_wrap_around ===</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/23357">change 23357</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-pcu/+/23357"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I0a742f7fa1541b1837739207b9383772f981fb25 </div>
<div style="display:none"> Gerrit-Change-Number: 23357 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>