<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/23471">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gprs_ns2_sns: Rename BSS-side states to include 'bss' in name<br><br>Clearly separate those states that only occur on the BSS side from<br>those of the SGSN side (which already have a prefix)<br><br>Change-Id: Iebc97637063b2676abff4a7dce50272d9b4e336b<br>Related: OS#3373<br>---<br>M src/gb/gprs_ns2_sns.c<br>1 file changed, 48 insertions(+), 47 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/71/23471/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c</span><br><span>index 51b3ea8..2bcd0df 100644</span><br><span>--- a/src/gb/gprs_ns2_sns.c</span><br><span>+++ b/src/gb/gprs_ns2_sns.c</span><br><span>@@ -66,11 +66,12 @@</span><br><span>         GPRS_SNS_ROLE_SGSN,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* BSS-side-only states _ST_BSS_; SGSN-side only states _ST_SGSN_; others shared */</span><br><span> enum gprs_sns_bss_state {</span><br><span>      GPRS_SNS_ST_UNCONFIGURED,</span><br><span style="color: hsl(0, 100%, 40%);">-       GPRS_SNS_ST_SIZE,               /*!< SNS-SIZE procedure ongoing */</span><br><span style="color: hsl(0, 100%, 40%);">-   GPRS_SNS_ST_CONFIG_BSS,         /*!< SNS-CONFIG procedure (BSS->SGSN) ongoing */</span><br><span style="color: hsl(0, 100%, 40%);">-  GPRS_SNS_ST_CONFIG_SGSN,        /*!< SNS-CONFIG procedure (SGSN->BSS) ongoing */</span><br><span style="color: hsl(120, 100%, 40%);">+        GPRS_SNS_ST_BSS_SIZE,                   /*!< SNS-SIZE procedure ongoing */</span><br><span style="color: hsl(120, 100%, 40%);">+ GPRS_SNS_ST_BSS_CONFIG_BSS,             /*!< SNS-CONFIG procedure (BSS->SGSN) ongoing */</span><br><span style="color: hsl(120, 100%, 40%);">+        GPRS_SNS_ST_BSS_CONFIG_SGSN,            /*!< SNS-CONFIG procedure (SGSN->BSS) ongoing */</span><br><span>       GPRS_SNS_ST_CONFIGURED,</span><br><span>      GPRS_SNS_ST_SGSN_WAIT_CONFIG,           /* !< SGSN role: Wait for CONFIG from BSS */</span><br><span>      GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK,       /* !< SGSN role: Wait for CONFIG-ACK from BSS */</span><br><span>@@ -711,14 +712,14 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void ns2_sns_st_unconfigured(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ns2_sns_st_bss_unconfigured(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span>        struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span>    OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_BSS);</span><br><span>      /* empty state - SNS Select will start by ns2_sns_st_all_action() */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void ns2_sns_st_size(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ns2_sns_st_bss_size(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span>   struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span>    struct gprs_ns2_nse *nse = nse_inst_from_fi(fi);</span><br><span>@@ -735,7 +736,7 @@</span><br><span>                                gprs_ns2_cause_str(*TLVP_VAL(tp, NS_IE_CAUSE)));</span><br><span>                    /* TODO: What to do? */</span><br><span>              } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_CONFIG_BSS,</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_BSS_CONFIG_BSS,</span><br><span>                                              nsi->timeout[NS_TOUT_TSNS_PROV], 2);</span><br><span>              }</span><br><span>            break;</span><br><span>@@ -850,7 +851,7 @@</span><br><span> }</span><br><span> </span><br><span> /* setup all dynamic SNS settings, create a new nsvc and send the SIZE */</span><br><span style="color: hsl(0, 100%, 40%);">-static void ns2_sns_st_size_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ns2_sns_st_bss_size_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span> {</span><br><span>      struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span> </span><br><span>@@ -859,7 +860,7 @@</span><br><span>  /* on a generic failure, the timer callback will recover */</span><br><span>  if (old_state != GPRS_SNS_ST_UNCONFIGURED)</span><br><span>           ns2_prim_status_ind(gss->nse, NULL, 0, GPRS_NS2_AFF_CAUSE_SNS_FAILURE);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (old_state != GPRS_SNS_ST_SIZE)</span><br><span style="color: hsl(120, 100%, 40%);">+    if (old_state != GPRS_SNS_ST_BSS_SIZE)</span><br><span>               gss->N = 0;</span><br><span> </span><br><span>   gss->alive = false;</span><br><span>@@ -895,7 +896,7 @@</span><br><span>                 ns2_tx_sns_size(gss->sns_nsvc, true, gss->num_max_nsvcs, -1, gss->num_max_ip6_remote);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void ns2_sns_st_config_bss(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ns2_sns_st_bss_config_bss(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span>    struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span>    struct gprs_ns2_nse *nse = nse_inst_from_fi(fi);</span><br><span>@@ -911,7 +912,7 @@</span><br><span>                                                        gprs_ns2_cause_str(*TLVP_VAL(tp, NS_IE_CAUSE)));</span><br><span>                    /* TODO: What to do? */</span><br><span>              } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_CONFIG_SGSN, nse->nsi->timeout[NS_TOUT_TSNS_PROV], 3);</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_BSS_CONFIG_SGSN, nse->nsi->timeout[NS_TOUT_TSNS_PROV], 3);</span><br><span>             }</span><br><span>            break;</span><br><span>       default:</span><br><span>@@ -919,13 +920,13 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void ns2_sns_st_config_bss_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ns2_sns_st_bss_config_bss_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span> {</span><br><span>  struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span> </span><br><span>        OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_BSS);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (old_state != GPRS_SNS_ST_CONFIG_BSS)</span><br><span style="color: hsl(120, 100%, 40%);">+      if (old_state != GPRS_SNS_ST_BSS_CONFIG_BSS)</span><br><span>                 gss->N = 0;</span><br><span> </span><br><span>   /* Transmit SNS-CONFIG */</span><br><span>@@ -1006,17 +1007,17 @@</span><br><span>  return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void ns2_sns_st_config_sgsn_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ns2_sns_st_bss_config_sgsn_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span> {</span><br><span>        struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span> </span><br><span>        OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_BSS);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (old_state != GPRS_SNS_ST_CONFIG_SGSN)</span><br><span style="color: hsl(120, 100%, 40%);">+     if (old_state != GPRS_SNS_ST_BSS_CONFIG_SGSN)</span><br><span>                gss->N = 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void ns2_sns_st_config_sgsn(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ns2_sns_st_bss_config_sgsn(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span> {</span><br><span>   struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span>    struct gprs_ns2_nse *nse = nse_inst_from_fi(fi);</span><br><span>@@ -1326,39 +1327,39 @@</span><br><span> static const struct osmo_fsm_state ns2_sns_bss_states[] = {</span><br><span>    [GPRS_SNS_ST_UNCONFIGURED] = {</span><br><span>               .in_event_mask = 0, /* handled by all_state_action */</span><br><span style="color: hsl(0, 100%, 40%);">-           .out_state_mask = S(GPRS_SNS_ST_SIZE),</span><br><span style="color: hsl(120, 100%, 40%);">+                .out_state_mask = S(GPRS_SNS_ST_BSS_SIZE),</span><br><span>           .name = "UNCONFIGURED",</span><br><span style="color: hsl(0, 100%, 40%);">-               .action = ns2_sns_st_unconfigured,</span><br><span style="color: hsl(120, 100%, 40%);">+            .action = ns2_sns_st_bss_unconfigured,</span><br><span>       },</span><br><span style="color: hsl(0, 100%, 40%);">-      [GPRS_SNS_ST_SIZE] = {</span><br><span style="color: hsl(120, 100%, 40%);">+        [GPRS_SNS_ST_BSS_SIZE] = {</span><br><span>           .in_event_mask = S(GPRS_SNS_EV_RX_SIZE_ACK),</span><br><span>                 .out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |</span><br><span style="color: hsl(0, 100%, 40%);">-                           S(GPRS_SNS_ST_SIZE) |</span><br><span style="color: hsl(0, 100%, 40%);">-                           S(GPRS_SNS_ST_CONFIG_BSS),</span><br><span style="color: hsl(0, 100%, 40%);">-            .name = "SIZE",</span><br><span style="color: hsl(0, 100%, 40%);">-               .action = ns2_sns_st_size,</span><br><span style="color: hsl(0, 100%, 40%);">-              .onenter = ns2_sns_st_size_onenter,</span><br><span style="color: hsl(120, 100%, 40%);">+                             S(GPRS_SNS_ST_BSS_SIZE) |</span><br><span style="color: hsl(120, 100%, 40%);">+                             S(GPRS_SNS_ST_BSS_CONFIG_BSS),</span><br><span style="color: hsl(120, 100%, 40%);">+              .name = "BSS_SIZE",</span><br><span style="color: hsl(120, 100%, 40%);">+         .action = ns2_sns_st_bss_size,</span><br><span style="color: hsl(120, 100%, 40%);">+                .onenter = ns2_sns_st_bss_size_onenter,</span><br><span>      },</span><br><span style="color: hsl(0, 100%, 40%);">-      [GPRS_SNS_ST_CONFIG_BSS] = {</span><br><span style="color: hsl(120, 100%, 40%);">+  [GPRS_SNS_ST_BSS_CONFIG_BSS] = {</span><br><span>             .in_event_mask = S(GPRS_SNS_EV_RX_CONFIG_ACK),</span><br><span>               .out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |</span><br><span style="color: hsl(0, 100%, 40%);">-                           S(GPRS_SNS_ST_CONFIG_BSS) |</span><br><span style="color: hsl(0, 100%, 40%);">-                             S(GPRS_SNS_ST_CONFIG_SGSN) |</span><br><span style="color: hsl(0, 100%, 40%);">-                            S(GPRS_SNS_ST_SIZE),</span><br><span style="color: hsl(0, 100%, 40%);">-          .name = "CONFIG_BSS",</span><br><span style="color: hsl(0, 100%, 40%);">-         .action = ns2_sns_st_config_bss,</span><br><span style="color: hsl(0, 100%, 40%);">-                .onenter = ns2_sns_st_config_bss_onenter,</span><br><span style="color: hsl(120, 100%, 40%);">+                               S(GPRS_SNS_ST_BSS_CONFIG_BSS) |</span><br><span style="color: hsl(120, 100%, 40%);">+                               S(GPRS_SNS_ST_BSS_CONFIG_SGSN) |</span><br><span style="color: hsl(120, 100%, 40%);">+                              S(GPRS_SNS_ST_BSS_SIZE),</span><br><span style="color: hsl(120, 100%, 40%);">+            .name = "BSS_CONFIG_BSS",</span><br><span style="color: hsl(120, 100%, 40%);">+           .action = ns2_sns_st_bss_config_bss,</span><br><span style="color: hsl(120, 100%, 40%);">+          .onenter = ns2_sns_st_bss_config_bss_onenter,</span><br><span>        },</span><br><span style="color: hsl(0, 100%, 40%);">-      [GPRS_SNS_ST_CONFIG_SGSN] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ [GPRS_SNS_ST_BSS_CONFIG_SGSN] = {</span><br><span>            .in_event_mask = S(GPRS_SNS_EV_RX_CONFIG) |</span><br><span>                           S(GPRS_SNS_EV_RX_CONFIG_END),</span><br><span>               .out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |</span><br><span style="color: hsl(0, 100%, 40%);">-                           S(GPRS_SNS_ST_CONFIG_SGSN) |</span><br><span style="color: hsl(120, 100%, 40%);">+                                  S(GPRS_SNS_ST_BSS_CONFIG_SGSN) |</span><br><span>                             S(GPRS_SNS_ST_CONFIGURED) |</span><br><span style="color: hsl(0, 100%, 40%);">-                             S(GPRS_SNS_ST_SIZE),</span><br><span style="color: hsl(0, 100%, 40%);">-          .name = "CONFIG_SGSN",</span><br><span style="color: hsl(0, 100%, 40%);">-                .action = ns2_sns_st_config_sgsn,</span><br><span style="color: hsl(0, 100%, 40%);">-               .onenter = ns2_sns_st_config_sgsn_onenter,</span><br><span style="color: hsl(120, 100%, 40%);">+                              S(GPRS_SNS_ST_BSS_SIZE),</span><br><span style="color: hsl(120, 100%, 40%);">+            .name = "BSS_CONFIG_SGSN",</span><br><span style="color: hsl(120, 100%, 40%);">+          .action = ns2_sns_st_bss_config_sgsn,</span><br><span style="color: hsl(120, 100%, 40%);">+         .onenter = ns2_sns_st_bss_config_sgsn_onenter,</span><br><span>       },</span><br><span>   [GPRS_SNS_ST_CONFIGURED] = {</span><br><span>                 .in_event_mask = S(GPRS_SNS_EV_RX_ADD) |</span><br><span>@@ -1366,7 +1367,7 @@</span><br><span>                              S(GPRS_SNS_EV_RX_CHANGE_WEIGHT) |</span><br><span>                            S(GPRS_SNS_EV_REQ_NSVC_ALIVE),</span><br><span>              .out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |</span><br><span style="color: hsl(0, 100%, 40%);">-                           S(GPRS_SNS_ST_SIZE),</span><br><span style="color: hsl(120, 100%, 40%);">+                                  S(GPRS_SNS_ST_BSS_SIZE),</span><br><span>           .name = "CONFIGURED",</span><br><span>              .action = ns2_sns_st_configured,</span><br><span>             .onenter = ns2_sns_st_configured_onenter,</span><br><span>@@ -1386,7 +1387,7 @@</span><br><span>                    LOGPFSML(fi, LOGL_ERROR, "NSE %d: Size retries failed. Selecting next IP-SNS endpoint.\n", nse->nsei);</span><br><span>                  osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_REQ_SELECT_ENDPOINT, NULL);</span><br><span>           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_SIZE, nsi->timeout[NS_TOUT_TSNS_PROV], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                 osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_BSS_SIZE, nsi->timeout[NS_TOUT_TSNS_PROV], 1);</span><br><span>            }</span><br><span>            break;</span><br><span>       case 2:</span><br><span>@@ -1394,7 +1395,7 @@</span><br><span>                      LOGPFSML(fi, LOGL_ERROR, "NSE %d: BSS Config retries failed. Selecting next IP-SNS endpoint.\n", nse->nsei);</span><br><span>                    osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_REQ_SELECT_ENDPOINT, NULL);</span><br><span>           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_CONFIG_BSS, nsi->timeout[NS_TOUT_TSNS_PROV], 2);</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_BSS_CONFIG_BSS, nsi->timeout[NS_TOUT_TSNS_PROV], 2);</span><br><span>              }</span><br><span>            break;</span><br><span>       case 3:</span><br><span>@@ -1402,7 +1403,7 @@</span><br><span>                      LOGPFSML(fi, LOGL_ERROR, "NSE %d: SGSN Config retries failed. Selecting next IP-SNS endpoint.\n", nse->nsei);</span><br><span>                   osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_REQ_SELECT_ENDPOINT, NULL);</span><br><span>           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_CONFIG_SGSN, nsi->timeout[NS_TOUT_TSNS_PROV], 3);</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_BSS_CONFIG_SGSN, nsi->timeout[NS_TOUT_TSNS_PROV], 3);</span><br><span>             }</span><br><span>            break;</span><br><span>       case 4:</span><br><span>@@ -1427,11 +1428,11 @@</span><br><span>            case GPRS_SNS_ST_UNCONFIGURED:</span><br><span>                       osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_REQ_SELECT_ENDPOINT, NULL);</span><br><span>                   break;</span><br><span style="color: hsl(0, 100%, 40%);">-          case GPRS_SNS_ST_SIZE:</span><br><span style="color: hsl(120, 100%, 40%);">+                case GPRS_SNS_ST_BSS_SIZE:</span><br><span>                   /* TODO: add the ip4 element to the list */</span><br><span>                  break;</span><br><span style="color: hsl(0, 100%, 40%);">-          case GPRS_SNS_ST_CONFIG_BSS:</span><br><span style="color: hsl(0, 100%, 40%);">-            case GPRS_SNS_ST_CONFIG_SGSN:</span><br><span style="color: hsl(120, 100%, 40%);">+         case GPRS_SNS_ST_BSS_CONFIG_BSS:</span><br><span style="color: hsl(120, 100%, 40%);">+              case GPRS_SNS_ST_BSS_CONFIG_SGSN:</span><br><span>            case GPRS_SNS_ST_CONFIGURED:</span><br><span>                         /* TODO: add to SNS-IP procedure queue & add nsvc() */</span><br><span>                   break;</span><br><span>@@ -1442,7 +1443,7 @@</span><br><span>               switch (fi->state) {</span><br><span>              case GPRS_SNS_ST_UNCONFIGURED:</span><br><span>                       break;</span><br><span style="color: hsl(0, 100%, 40%);">-          case GPRS_SNS_ST_SIZE:</span><br><span style="color: hsl(120, 100%, 40%);">+                case GPRS_SNS_ST_BSS_SIZE:</span><br><span>                   /* TODO: remove the ip4 element from the list */</span><br><span>                     llist_for_each_entry_safe(nsvc, nsvc2, &nse->nsvc, list) {</span><br><span>                            if (nsvc->bind == sbind->bind) {</span><br><span>@@ -1450,8 +1451,8 @@</span><br><span>                               }</span><br><span>                    }</span><br><span>                    break;</span><br><span style="color: hsl(0, 100%, 40%);">-          case GPRS_SNS_ST_CONFIG_BSS:</span><br><span style="color: hsl(0, 100%, 40%);">-            case GPRS_SNS_ST_CONFIG_SGSN:</span><br><span style="color: hsl(120, 100%, 40%);">+         case GPRS_SNS_ST_BSS_CONFIG_BSS:</span><br><span style="color: hsl(120, 100%, 40%);">+              case GPRS_SNS_ST_BSS_CONFIG_SGSN:</span><br><span>            case GPRS_SNS_ST_CONFIGURED:</span><br><span>                         /* TODO: do an delete SNS-IP procedure */</span><br><span>                    /* TODO: remove the ip4 element to the list */</span><br><span>@@ -1508,7 +1509,7 @@</span><br><span>               }</span><br><span> </span><br><span>                gss->reselection_running = false;</span><br><span style="color: hsl(0, 100%, 40%);">-            osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_SIZE, nse->nsi->timeout[NS_TOUT_TSNS_PROV], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_BSS_SIZE, nse->nsi->timeout[NS_TOUT_TSNS_PROV], 1);</span><br><span>            break;</span><br><span>       default:</span><br><span>             ns2_sns_st_all_action(fi, event, data);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/23471">change 23471</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/libosmocore/+/23471"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Iebc97637063b2676abff4a7dce50272d9b4e336b </div>
<div style="display:none"> Gerrit-Change-Number: 23471 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>