Change in osmo-bsc[master]: ipaccess-config: Add -G cmdl opt to query OML IP and Unit ID

Pau Espin Pedrol gerrit-no-reply at lists.osmocom.org
Wed Nov 21 13:26:38 UTC 2018


Pau Espin Pedrol has submitted this change and it was merged. ( https://gerrit.osmocom.org/11686 )

Change subject: ipaccess-config: Add -G cmdl opt to query OML IP and Unit ID
......................................................................

ipaccess-config: Add -G cmdl opt to query OML IP and Unit ID

Related: OS#3624
Change-Id: Ida416a969a3309868d6f4e50f34b34f224c32dd6
---
M src/ipaccess/ipaccess-config.c
1 file changed, 62 insertions(+), 10 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Neels Hofmeyr: Looks good to me, approved
  Jenkins Builder: Verified



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

-- 
To view, visit https://gerrit.osmocom.org/11686
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ida416a969a3309868d6f4e50f34b34f224c32dd6
Gerrit-Change-Number: 11686
Gerrit-PatchSet: 8
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-CC: Max <msuraev at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181121/43131adb/attachment.html>


More information about the gerrit-log mailing list