<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11686">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Neels Hofmeyr: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ipaccess-config: Add -G cmdl opt to query OML IP and Unit ID<br><br>Related: OS#3624<br>Change-Id: Ida416a969a3309868d6f4e50f34b34f224c32dd6<br>---<br>M src/ipaccess/ipaccess-config.c<br>1 file changed, 62 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/ipaccess/ipaccess-config.c b/src/ipaccess/ipaccess-config.c</span><br><span>index 657dad1..9e3dc39 100644</span><br><span>--- a/src/ipaccess/ipaccess-config.c</span><br><span>+++ b/src/ipaccess/ipaccess-config.c</span><br><span>@@ -27,6 +27,7 @@</span><br><span> #include <getopt.h></span><br><span> #include <errno.h></span><br><span> #include <ctype.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span> #include <sys/fcntl.h></span><br><span> #include <sys/stat.h></span><br><span> </span><br><span>@@ -59,6 +60,7 @@</span><br><span> </span><br><span> static int net_listen_testnr;</span><br><span> static int restart;</span><br><span style="color: hsl(120, 100%, 40%);">+static bool get_attr;</span><br><span> static char *prim_oml_ip;</span><br><span> static char *bts_ip_addr, *bts_ip_mask, *bts_ip_gw;</span><br><span> static char *unit_id;</span><br><span>@@ -269,6 +271,33 @@</span><br><span>   return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int print_attr_rep(struct msgb *mb)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Parse using nanoBTS own formatting for Get Attribute Response */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct abis_om_hdr *oh = msgb_l2(mb);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct abis_om_fom_hdr *foh = msgb_l3(mb);</span><br><span style="color: hsl(120, 100%, 40%);">+    struct e1inp_sign_link *sign_link = mb->dst;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct gsm_bts_trx *trx = sign_link->trx;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm_bts *bts = trx->bts;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct tlv_parsed tp;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct in_addr ia = {0};</span><br><span style="color: hsl(120, 100%, 40%);">+      char oml_ip[20] = {0};</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t oml_port = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        char unit_id[40]  = {0};</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%);">+  abis_nm_tlv_parse(&tp, bts, foh->data, oh->length-sizeof(*foh));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  abis_nm_tlv_attr_primary_oml(&tp, &ia, &oml_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_strlcpy(oml_ip, inet_ntoa(ia), sizeof(oml_ip));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        abis_nm_tlv_attr_unit_id(&tp, unit_id,  sizeof(unit_id));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       fprintf(stdout, "{ primary_oml_ip: \"%s\", primary_oml_port: %" PRIu16 ", unit_id: \"%s\" }\n",</span><br><span style="color: hsl(120, 100%, 40%);">+               oml_ip, oml_port, unit_id);</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int nm_state_event(int evt, uint8_t obj_class, void *obj,</span><br><span>                     struct gsm_nm_state *old_state, struct gsm_nm_state *new_state,</span><br><span>                      struct abis_om_obj_inst *obj_inst);</span><br><span>@@ -278,6 +307,7 @@</span><br><span> {</span><br><span>     struct ipacc_ack_signal_data *ipacc_data;</span><br><span>    struct nm_statechg_signal_data *nsd;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct msgb *oml_msg;</span><br><span> </span><br><span>    switch (signal) {</span><br><span>    case S_NM_IPACC_NACK:</span><br><span>@@ -300,6 +330,11 @@</span><br><span>                 nm_state_event(signal, nsd->obj_class, nsd->obj, nsd->old_state,</span><br><span>                            nsd->new_state, nsd->obj_inst);</span><br><span>                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case S_NM_GET_ATTR_REP:</span><br><span style="color: hsl(120, 100%, 40%);">+               fprintf(stderr, "Received SIGNAL S_NM_GET_ATTR_REP\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             oml_msg = signal_data;</span><br><span style="color: hsl(120, 100%, 40%);">+                print_attr_rep(oml_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              exit(0);</span><br><span>     default:</span><br><span>             break;</span><br><span>       }</span><br><span>@@ -493,18 +528,23 @@</span><br><span> </span><br><span> static void bootstrap_om(struct gsm_bts_trx *trx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- struct msgb *nmsg = msgb_alloc(1024, "nested msgb");</span><br><span style="color: hsl(120, 100%, 40%);">+        struct msgb *nmsg_get = msgb_alloc(1024, "nested get msgb");</span><br><span style="color: hsl(120, 100%, 40%);">+        struct msgb *nmsg_set = msgb_alloc(1024, "nested set msgb");</span><br><span>       int need_to_set_attr = 0;</span><br><span>    int len;</span><br><span> </span><br><span>         printf("OML link established using TRX %d\n", trx->nr);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      if (get_attr) {</span><br><span style="color: hsl(120, 100%, 40%);">+               msgb_put_u8(nmsg_get, NM_ATT_IPACC_PRIM_OML_CFG);</span><br><span style="color: hsl(120, 100%, 40%);">+             msgb_put_u8(nmsg_get, NM_ATT_IPACC_UNIT_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span>    if (unit_id) {</span><br><span>               len = strlen(unit_id);</span><br><span style="color: hsl(0, 100%, 40%);">-          if (len > nmsg->data_len-10)</span><br><span style="color: hsl(120, 100%, 40%);">+            if (len > nmsg_set->data_len-10)</span><br><span>                       goto out_err;</span><br><span>                printf("setting Unit ID to '%s'\n", unit_id);</span><br><span style="color: hsl(0, 100%, 40%);">-         nv_put_unit_id(nmsg, unit_id);</span><br><span style="color: hsl(120, 100%, 40%);">+                nv_put_unit_id(nmsg_set, unit_id);</span><br><span>           need_to_set_attr = 1;</span><br><span>        }</span><br><span>    if (prim_oml_ip) {</span><br><span>@@ -517,13 +557,13 @@</span><br><span>           }</span><br><span> </span><br><span>                printf("setting primary OML link IP to '%s'\n", inet_ntoa(ia));</span><br><span style="color: hsl(0, 100%, 40%);">-               nv_put_prim_oml(nmsg, ntohl(ia.s_addr), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+           nv_put_prim_oml(nmsg_set, ntohl(ia.s_addr), 0);</span><br><span>              need_to_set_attr = 1;</span><br><span>        }</span><br><span>    if (nv_mask) {</span><br><span>               printf("setting NV Flags/Mask to 0x%04x/0x%04x\n",</span><br><span>                         nv_flags, nv_mask);</span><br><span style="color: hsl(0, 100%, 40%);">-             nv_put_flags(nmsg, nv_flags, nv_mask);</span><br><span style="color: hsl(120, 100%, 40%);">+                nv_put_flags(nmsg_set, nv_flags, nv_mask);</span><br><span>           need_to_set_attr = 1;</span><br><span>        }</span><br><span>    if (bts_ip_addr && bts_ip_mask) {</span><br><span>@@ -542,7 +582,7 @@</span><br><span>              }</span><br><span> </span><br><span>                printf("setting static IP Address/Mask\n");</span><br><span style="color: hsl(0, 100%, 40%);">-           nv_put_ip_if_cfg(nmsg, ntohl(ia_addr.s_addr), ntohl(ia_mask.s_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+         nv_put_ip_if_cfg(nmsg_set, ntohl(ia_addr.s_addr), ntohl(ia_mask.s_addr));</span><br><span>            need_to_set_attr = 1;</span><br><span>        }</span><br><span>    if (bts_ip_gw) {</span><br><span>@@ -556,12 +596,18 @@</span><br><span> </span><br><span>                 printf("setting static IP Gateway\n");</span><br><span>             /* we only set the default gateway with zero addr/mask */</span><br><span style="color: hsl(0, 100%, 40%);">-               nv_put_gw_cfg(nmsg, 0, 0, ntohl(ia_gw.s_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+               nv_put_gw_cfg(nmsg_set, 0, 0, ntohl(ia_gw.s_addr));</span><br><span>          need_to_set_attr = 1;</span><br><span>        }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (get_attr) {</span><br><span style="color: hsl(120, 100%, 40%);">+               fprintf(stderr, "getting Attributes (%d): %s\n", nmsg_get->len, osmo_hexdump(msgb_data(nmsg_get), msgb_length(nmsg_get)));</span><br><span style="color: hsl(120, 100%, 40%);">+               abis_nm_get_attr(trx->bts, NM_OC_BASEB_TRANSC, 0, trx->nr, 0xff, nmsg_get->head, nmsg_get->len);</span><br><span style="color: hsl(120, 100%, 40%);">+          oml_state = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (need_to_set_attr) {</span><br><span style="color: hsl(0, 100%, 40%);">-         abis_nm_ipaccess_set_nvattr(trx, nmsg->head, nmsg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+                abis_nm_ipaccess_set_nvattr(trx, nmsg_set->head, nmsg_set->len);</span><br><span>               oml_state = 1;</span><br><span>       }</span><br><span> </span><br><span>@@ -571,7 +617,8 @@</span><br><span>  }</span><br><span> </span><br><span> out_err:</span><br><span style="color: hsl(0, 100%, 40%);">-       msgb_free(nmsg);</span><br><span style="color: hsl(120, 100%, 40%);">+      msgb_free(nmsg_get);</span><br><span style="color: hsl(120, 100%, 40%);">+  msgb_free(nmsg_set);</span><br><span> }</span><br><span> </span><br><span> static int nm_state_event(int evt, uint8_t obj_class, void *obj,</span><br><span>@@ -833,6 +880,7 @@</span><br><span>      printf("Commands for writing to the BTS:\n");</span><br><span>      printf("  -u --unit-id UNIT_ID\t\tSet the Unit ID of the BTS\n");</span><br><span>  printf("  -o --oml-ip IP\t\tSet primary OML IP (IP of your BSC)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("  -G --get-attr\t\tGet several attributes from BTS\n");</span><br><span>    printf("  -i --ip-address IP/MASK\tSet static IP address + netmask of BTS\n");</span><br><span>     printf("  -g --ip-gateway IP\t\tSet static IP gateway of BTS\n");</span><br><span>  printf("  -r --restart\t\t\tRestart the BTS (after other operations)\n");</span><br><span>@@ -910,6 +958,7 @@</span><br><span>            unsigned long ul;</span><br><span>            char *slash;</span><br><span>                 static struct option long_options[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+                       { "get-attr", 0, 0, 'G' },</span><br><span>                         { "unit-id", 1, 0, 'u' },</span><br><span>                  { "oml-ip", 1, 0, 'o' },</span><br><span>                   { "ip-address", 1, 0, 'i' },</span><br><span>@@ -931,13 +980,16 @@</span><br><span>                       { 0, 0, 0, 0 },</span><br><span>              };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-          c = getopt_long(argc, argv, "u:o:i:g:rn:S:U:l:L:hs:d:f:wcpH", long_options,</span><br><span style="color: hsl(120, 100%, 40%);">+         c = getopt_long(argc, argv, "Gu:o:i:g:rn:S:U:l:L:hs:d:f:wcpH", long_options,</span><br><span>                               &option_index);</span><br><span> </span><br><span>              if (c == -1)</span><br><span>                         break;</span><br><span> </span><br><span>           switch (c) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case 'G':</span><br><span style="color: hsl(120, 100%, 40%);">+                     get_attr = true;</span><br><span style="color: hsl(120, 100%, 40%);">+                      break;</span><br><span>               case 'u':</span><br><span>                    if (!check_unitid_fmt(optarg))</span><br><span>                               exit(2);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11686">change 11686</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/11686"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ida416a969a3309868d6f4e50f34b34f224c32dd6 </div>
<div style="display:none"> Gerrit-Change-Number: 11686 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: Max <msuraev@sysmocom.de> </div>