<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/14100">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">cbch: Implement support for DEFAULT message<br><br>The BSC can not only send us each to-be-sent message separately, but<br>it can also configure a DEFAULT message, which is then to be sent<br>instead of the NULL message.  Let's add support for this<br><br>Change-Id: I65a79215b54155d128c26d2ca11ff9ff3ed2cdba<br>Closes: OS#4013<br>---<br>M include/osmo-bts/gsm_data_shared.h<br>M src/common/cbch.c<br>2 files changed, 38 insertions(+), 13 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/00/14100/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/gsm_data_shared.h b/include/osmo-bts/gsm_data_shared.h</span><br><span>index 72d9710..6974e62 100644</span><br><span>--- a/include/osmo-bts/gsm_data_shared.h</span><br><span>+++ b/include/osmo-bts/gsm_data_shared.h</span><br><span>@@ -737,6 +737,7 @@</span><br><span>      struct {</span><br><span>             struct llist_head queue;        /* list of struct smscb_msg */</span><br><span>               struct smscb_msg *cur_msg;      /* current SMS-CB */</span><br><span style="color: hsl(120, 100%, 40%);">+          struct smscb_msg *default_msg;  /* default broadcast message; NULL if none */</span><br><span>        } smscb_state;</span><br><span> </span><br><span>   float min_qual_rach;    /* minimum quality for RACH bursts */</span><br><span>diff --git a/src/common/cbch.c b/src/common/cbch.c</span><br><span>index 817489f..185386a 100644</span><br><span>--- a/src/common/cbch.c</span><br><span>+++ b/src/common/cbch.c</span><br><span>@@ -101,9 +101,14 @@</span><br><span>                block_type->lb = 0;</span><br><span> </span><br><span>   if (block_nr == 4) {</span><br><span style="color: hsl(0, 100%, 40%);">-            /* delete any fully-transmitted normal message (or superseded default) */</span><br><span style="color: hsl(0, 100%, 40%);">-               talloc_free(bts->smscb_state.cur_msg);</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->smscb_state.cur_msg = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (msg != bts->smscb_state.default_msg) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 DEBUGPGT(DLSMS, g_time, "deleting fully-transmitted message %p\n", msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                    /* delete any fully-transmitted normal message (or superseded default) */</span><br><span style="color: hsl(120, 100%, 40%);">+                     talloc_free(bts->smscb_state.cur_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                     bts->smscb_state.cur_msg = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      DEBUGPGT(DLSMS, g_time, "keeping fully-transmitted default message %p\n", msg);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    }</span><br><span> </span><br><span>        return block_type->lb;</span><br><span>@@ -160,16 +165,25 @@</span><br><span>    case RSL_CB_CMD_TYPE_SCHEDULE:</span><br><span>       case RSL_CB_CMD_TYPE_NULL:</span><br><span>           /* def_bcast is ignored as per Section 9.3.41 of 3GPP TS 48.058 */</span><br><span style="color: hsl(120, 100%, 40%);">+            llist_add_tail(&scm->list, &bts->smscb_state.queue);</span><br><span style="color: hsl(120, 100%, 40%);">+            /* FIXME: limit queue size and optionally send CBCH LOAD Information (overflow) via RSL */</span><br><span>           break;</span><br><span>       case RSL_CB_CMD_TYPE_DEFAULT:</span><br><span style="color: hsl(0, 100%, 40%);">-           /* use def_bcast, ignore command  */</span><br><span style="color: hsl(0, 100%, 40%);">-            /* def_bcast == 0: normal mess */</span><br><span style="color: hsl(120, 100%, 40%);">+             /* old default msg will be free'd in get_smscb_block() if it is currently in transit</span><br><span style="color: hsl(120, 100%, 40%);">+               * and we set a new default_msg here */</span><br><span style="color: hsl(120, 100%, 40%);">+               if (bts->smscb_state.cur_msg && bts->smscb_state.cur_msg == bts->smscb_state.default_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+                    talloc_free(bts->smscb_state.cur_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+             if (cmd_type.def_bcast == RSL_CB_CMD_DEFBCAST_NORMAL)</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* def_bcast == 0: normal message */</span><br><span style="color: hsl(120, 100%, 40%);">+                  bts->smscb_state.default_msg = scm;</span><br><span style="color: hsl(120, 100%, 40%);">+                else {</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* def_bcast == 1: NULL message */</span><br><span style="color: hsl(120, 100%, 40%);">+                    bts->smscb_state.default_msg = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+                       talloc_free(scm);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            break;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   llist_add_tail(&scm->list, &bts->smscb_state.queue);</span><br><span style="color: hsl(0, 100%, 40%);">-      /* FIXME: limit queue size and optionally send CBCH LOAD Information (overflow) via RSL */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>   return 0;</span><br><span> }</span><br><span> </span><br><span>@@ -178,13 +192,23 @@</span><br><span>   struct smscb_msg *msg;</span><br><span> </span><br><span>   msg = llist_first_entry_or_null(&bts->smscb_state.queue, struct smscb_msg, list);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!msg) {</span><br><span style="color: hsl(0, 100%, 40%);">-             /* FIXME: send CBCH LOAD Information (underflow) via RSL */</span><br><span style="color: hsl(0, 100%, 40%);">-             return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (msg) {</span><br><span style="color: hsl(120, 100%, 40%);">+            llist_del(&msg->list);</span><br><span style="color: hsl(120, 100%, 40%);">+         DEBUGP(DLSMS, "%s: Dequeued msg\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+              return msg;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   llist_del(&msg->list);</span><br><span style="color: hsl(0, 100%, 40%);">-   return msg;</span><br><span style="color: hsl(120, 100%, 40%);">+   /* FIXME: send CBCH LOAD Information (underflow) via RSL */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* choose the default message, if any */</span><br><span style="color: hsl(120, 100%, 40%);">+      msg = bts->smscb_state.default_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (msg) {</span><br><span style="color: hsl(120, 100%, 40%);">+            DEBUGP(DLSMS, "%s: Using default msg\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+         return msg;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   DEBUGP(DLSMS, "%s: No queued msg nor default\n", __func__);</span><br><span style="color: hsl(120, 100%, 40%);">+ return NULL;</span><br><span> }</span><br><span> </span><br><span> /* call-back from bts model specific code when it wants to obtain a CBCH</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14100">change 14100</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/14100"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I65a79215b54155d128c26d2ca11ff9ff3ed2cdba </div>
<div style="display:none"> Gerrit-Change-Number: 14100 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>