<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>