[PATCH] osmo-bts[master]: Remove code duplication

Max gerrit-no-reply at lists.osmocom.org
Mon Jan 2 20:45:11 UTC 2017


Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/1521

to look at the new patch set (#2).

Remove code duplication

Use functions and definitions from libosmocore. Requires libosmocore
with commits with I9c3bc15662949654e7bba6aad5488c69ee7d0c45 and
Ieaaaed19da9c069fe451faa53d24c5b84d7d5615 IDs.

Change-Id: Ia4980062ea88ffe9019b201f84e92e006ae3c2e3
---
M src/common/oml.c
1 file changed, 7 insertions(+), 128 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/21/1521/2

diff --git a/src/common/oml.c b/src/common/oml.c
index c4f3d7e..0700aa2 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -42,110 +42,11 @@
 #include <osmo-bts/bts.h>
 #include <osmo-bts/signal.h>
 
-/* FIXME: move this to libosmocore */
-static struct tlv_definition abis_nm_att_tlvdef_ipa = {
-	.def = {
-		/* ip.access specifics */
-		[NM_ATT_IPACC_DST_IP] =		{ TLV_TYPE_FIXED, 4 },
-		[NM_ATT_IPACC_DST_IP_PORT] =	{ TLV_TYPE_FIXED, 2 },
-		[NM_ATT_IPACC_STREAM_ID] =	{ TLV_TYPE_TV, },
-		[NM_ATT_IPACC_SEC_OML_CFG] =	{ TLV_TYPE_FIXED, 6 },
-		[NM_ATT_IPACC_IP_IF_CFG] =	{ TLV_TYPE_FIXED, 8 },
-		[NM_ATT_IPACC_IP_GW_CFG] =	{ TLV_TYPE_FIXED, 12 },
-		[NM_ATT_IPACC_IN_SERV_TIME] =	{ TLV_TYPE_FIXED, 4 },
-		[NM_ATT_IPACC_LOCATION] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_PAGING_CFG] =	{ TLV_TYPE_FIXED, 2 },
-		[NM_ATT_IPACC_UNIT_ID] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_UNIT_NAME] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_SNMP_CFG] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_PRIM_OML_CFG_LIST] = { TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_NV_FLAGS] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_FREQ_CTRL] =	{ TLV_TYPE_FIXED, 2 },
-		[NM_ATT_IPACC_PRIM_OML_FB_TOUT] = { TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_CUR_SW_CFG] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_TIMING_BUS] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_CGI] =		{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_RAC] =		{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_OBJ_VERSION] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_GPRS_PAGING_CFG]= { TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_NSEI] =		{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_BVCI] =		{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_NSVCI] =		{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_NS_CFG] =		{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_BSSGP_CFG] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_NS_LINK_CFG] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_RLC_CFG] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_ALM_THRESH_LIST]=	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_MONIT_VAL_LIST] = { TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_TIB_CONTROL] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_SUPP_FEATURES] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_CODING_SCHEMES] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_RLC_CFG_2] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_HEARTB_TOUT] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_UPTIME] =		{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_RLC_CFG_3] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_SSL_CFG] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_SEC_POSSIBLE] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_IML_SSL_STATE] =	{ TLV_TYPE_TL16V },
-		[NM_ATT_IPACC_REVOC_DATE] =	{ TLV_TYPE_TL16V },
-	},
-};
-
 static int oml_ipa_set_attr(struct gsm_bts *bts, struct msgb *msg);
 
 /*
  * support
  */
-
-struct tlv_parsed *tlvp_copy(const struct tlv_parsed *tp_orig, void *ctx)
-{
-	struct tlv_parsed *tp_out;
-	unsigned int i;
-
-	tp_out = talloc_zero(ctx, struct tlv_parsed);
-	if (!tp_out)
-		return NULL;
-
-	/* if the original is NULL, return empty tlvp */
-	if (!tp_orig)
-		return tp_out;
-
-	for (i = 0; i < ARRAY_SIZE(tp_orig->lv); i++) {
-		unsigned int len = tp_orig->lv[i].len;
-		tp_out->lv[i].len = len;
-		if (len && tp_out->lv[i].val) {
-			tp_out->lv[i].val = talloc_zero_size(tp_out, len);
-			if (!tp_out->lv[i].val) {
-				talloc_free(tp_out);
-				return NULL;
-			}
-			memcpy((uint8_t *)tp_out->lv[i].val, tp_orig->lv[i].val, len);
-		}
-	}
-
-	return tp_out;
-}
-
-/* merge all attributes of 'new' into 'out' */
-int tlvp_merge(struct tlv_parsed *out, const struct tlv_parsed *new)
-{
-	unsigned int i;
-
-	for (i = 0; i < ARRAY_SIZE(out->lv); i++) {
-		unsigned int len = new->lv[i].len;
-		if (len == 0 || new->lv[i].val == NULL)
-			continue;
-		if (out->lv[i].val) {
-			talloc_free((uint8_t *) out->lv[i].val);
-			out->lv[i].len = 0;
-		}
-		out->lv[i].val = talloc_zero_size(out, len);
-		if (!out->lv[i].val)
-			return -ENOMEM;
-		memcpy((uint8_t *) out->lv[i].val, new->lv[i].val, len);
-	}
-	return 0;
-}
 
 static int oml_tlv_parse(struct tlv_parsed *tp, const uint8_t *buf, int len)
 {
@@ -369,28 +270,6 @@
 	return oml_mo_send_msg(mo, nmsg, NM_MT_SW_ACTIVATED_REP);
 }
 
-/* TS 12.21 9.4.53 */
-enum abis_nm_t200_idx {
-	T200_SDCCH		= 0,
-	T200_FACCH_F		= 1,
-	T200_FACCH_H		= 2,
-	T200_SACCH_TCH_SAPI0	= 3,
-	T200_SACCH_SDCCH	= 4,
-	T200_SDCCH_SAPI3	= 5,
-	T200_SACCH_TCH_SAPI3	= 6
-};
-
-/* TS 12.21 9.4.53 */
-static const uint8_t abis_nm_t200_mult[] = {
-	[T200_SDCCH]		= 5,
-	[T200_FACCH_F]		= 5,
-	[T200_FACCH_H]		= 5,
-	[T200_SACCH_TCH_SAPI0]	= 10,
-	[T200_SACCH_SDCCH]	= 10,
-	[T200_SDCCH_SAPI3]	= 5,
-	[T200_SACCH_TCH_SAPI3]	= 10
-};
-
 /* the below defaults correpsond to the libocmocore default of 1s for
  * DCCH and 2s for ACCH. The BSC should overried this via OML anyway. */
 const unsigned int oml_default_t200_ms[7] = {
@@ -483,8 +362,8 @@
 	}
 
 	/* merge existing BTS attributes with new attributes */
-	tp_merged = tlvp_copy(bts->mo.nm_attr, bts);
-	tlvp_merge(tp_merged, &tp);
+	tp_merged = osmo_tlvp_copy(bts->mo.nm_attr, bts);
+	osmo_tlvp_merge(tp_merged, &tp);
 
 	/* Ask BTS driver to validate new merged attributes */
 	rc = bts_model_check_oml(bts, foh->msg_type, bts->mo.nm_attr, tp_merged, bts);
@@ -531,7 +410,7 @@
 	if (TLVP_PRESENT(&tp, NM_ATT_T200)) {
 		payload = TLVP_VAL(&tp, NM_ATT_T200);
 		for (i = 0; i < ARRAY_SIZE(btsb->t200_ms); i++) {
-			uint32_t t200_ms = payload[i] * abis_nm_t200_mult[i];
+			uint32_t t200_ms = payload[i] * abis_nm_t200_ms[i];
 #if 0
 			btsb->t200_ms[i] = t200_ms;
 			DEBUGP(DOML, "T200[%u]: OML=%u, mult=%u => %u ms\n",
@@ -619,8 +498,8 @@
 		return oml_fom_ack_nack(msg, NM_NACK_INCORR_STRUCT);
 
 	/* merge existing BTS attributes with new attributes */
-	tp_merged = tlvp_copy(trx->mo.nm_attr, trx->bts);
-	tlvp_merge(tp_merged, &tp);
+	tp_merged = osmo_tlvp_copy(trx->mo.nm_attr, trx->bts);
+	osmo_tlvp_merge(tp_merged, &tp);
 
 	/* Ask BTS driver to validate new merged attributes */
 	rc = bts_model_check_oml(trx->bts, foh->msg_type, trx->mo.nm_attr, tp_merged, trx);
@@ -794,8 +673,8 @@
 	}
 
 	/* merge existing BTS attributes with new attributes */
-	tp_merged = tlvp_copy(ts->mo.nm_attr, bts);
-	tlvp_merge(tp_merged, &tp);
+	tp_merged = osmo_tlvp_copy(ts->mo.nm_attr, bts);
+	osmo_tlvp_merge(tp_merged, &tp);
 
 	/* Call into BTS driver to check attribute values */
 	rc = bts_model_check_oml(bts, foh->msg_type, ts->mo.nm_attr, tp_merged, ts);

-- 
To view, visit https://gerrit.osmocom.org/1521
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ia4980062ea88ffe9019b201f84e92e006ae3c2e3
Gerrit-PatchSet: 2
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder


More information about the gerrit-log mailing list