bssgp_rim: move bssgp_parse_rim_ri and bssgp_create_rim_ri to gprs_bssgp_rim

The function bssgp_parse_rim_ri() and bssgp_create_rim_ri() are located
in gprs_bssgp.c, since there is now a gprs_bssgp_rim.c module it makes
more sense to put them there. Also adjust the code a bit so that its
more intuitive to read.

Change-Id: Icd667f41d5735de56cd9fb257670337c679dd258
Related: SYS#5103
diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c
index 530c702..4551427 100644
--- a/src/gb/gprs_bssgp.c
+++ b/src/gb/gprs_bssgp.c
@@ -326,97 +326,6 @@
 	return 8;
 }
 
-/*! Parse a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
- *  \param[out] ri user provided memory to store the parsed results.
- *  \param[in] buf input buffer of the value part of the IE.
- *  \returns length of parsed octets, -EINVAL on error. */
-int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf,
-		       unsigned int len)
-{
-	struct gprs_ra_id raid_temp;
-
-	memset(ri, 0, sizeof(*ri));
-	if (len < 2)
-		return -EINVAL;
-
-	ri->discr = buf[0] & 0x0f;
-
-	switch (ri->discr) {
-	case BSSGP_RIM_ROUTING_INFO_GERAN:
-		if (len < 9)
-			return -EINVAL;
-		ri->geran.cid = bssgp_parse_cell_id(&ri->geran.raid, buf + 1);
-		return 9;
-	case BSSGP_RIM_ROUTING_INFO_UTRAN:
-		if (len < 9)
-			return -EINVAL;
-		gsm48_parse_ra(&ri->utran.raid, buf + 1);
-		ri->utran.rncid = osmo_load16be(buf + 7);
-		return 9;
-	case BSSGP_RIM_ROUTING_INFO_EUTRAN:
-		if (len < 7 || len > 14)
-			return -EINVAL;
-		/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
-		 * Figure 10.5.130 specify MCC/MNC encoding in the same way,
-		 * so we can re-use gsm48_parse_ra() for that. */
-		gsm48_parse_ra(&raid_temp, buf + 1);
-		ri->eutran.tai.mcc = raid_temp.mcc;
-		ri->eutran.tai.mnc = raid_temp.mnc;
-		ri->eutran.tai.mnc_3_digits = raid_temp.mnc_3_digits;
-		ri->eutran.tai.tac = osmo_load16be(buf + 4);
-		memcpy(ri->eutran.global_enb_id, buf + 6, len - 6);
-	        ri->eutran.global_enb_id_len = len - 6;
-		return len;
-	default:
-		return -EINVAL;
-	}
-}
-
-/*! Encode a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
- *  \param[out] buf user provided memory (at least 14 byte) for the generated value part of the IE.
- *  \param[in] ri user provided input data struct.
- *  \returns length of encoded octets, -EINVAL on error. */
-int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri)
-{
-	int rc;
-	struct gprs_ra_id raid_temp;
-
-	buf[0] = ri->discr & 0x0f;
-	buf++;
-
-	switch (ri->discr) {
-	case BSSGP_RIM_ROUTING_INFO_GERAN:
-		rc = bssgp_create_cell_id(buf, &ri->geran.raid, ri->geran.cid);
-		if (rc < 0)
-			return -EINVAL;
-		return rc + 1;
-	case BSSGP_RIM_ROUTING_INFO_UTRAN:
-		gsm48_encode_ra((struct gsm48_ra_id *)buf, &ri->utran.raid);
-		osmo_store16be(ri->utran.rncid, buf + 6);
-		return 9;
-	case BSSGP_RIM_ROUTING_INFO_EUTRAN:
-		/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
-		 * Figure 10.5.130 specify MCC/MNC encoding in the same way,
-		 * so we can re-use gsm48_encode_ra() for that. */
-		raid_temp = (struct gprs_ra_id) {
-			.mcc = ri->eutran.tai.mcc,
-			.mnc = ri->eutran.tai.mnc,
-			.mnc_3_digits = ri->eutran.tai.mnc_3_digits,
-			/* TAC is encoded in the same way as LAC */
-			.lac = ri->eutran.tai.tac,
-		};
-
-		gsm48_encode_ra((struct gsm48_ra_id *)buf, &raid_temp);
-		OSMO_ASSERT(ri->eutran.global_enb_id_len <=
-			    sizeof(ri->eutran.global_enb_id));
-		memcpy(buf + 5, ri->eutran.global_enb_id,
-		       ri->eutran.global_enb_id_len);
-		return ri->eutran.global_enb_id_len + 6;
-	default:
-		return -EINVAL;
-	}
-}
-
 /* Chapter 8.4 BVC-Reset Procedure */
 static int bssgp_rx_bvc_reset(struct msgb *msg, struct tlv_parsed *tp,
 			      uint16_t ns_bvci)
diff --git a/src/gb/gprs_bssgp_rim.c b/src/gb/gprs_bssgp_rim.c
index 3ac405e..0dc6d21 100644
--- a/src/gb/gprs_bssgp_rim.c
+++ b/src/gb/gprs_bssgp_rim.c
@@ -41,6 +41,97 @@
  * (3GPP TS 48.018, sub-clause 11.3.9) but without IE and length octets. */
 #define REP_CELL_ID_LEN 8
 
+/*! Parse a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
+ *  \param[out] ri user provided memory to store the parsed results.
+ *  \param[in] buf input buffer of the value part of the IE.
+ *  \returns length of parsed octets, -EINVAL on error. */
+int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf,
+		       unsigned int len)
+{
+	struct gprs_ra_id raid_temp;
+
+	memset(ri, 0, sizeof(*ri));
+	if (len < 2)
+		return -EINVAL;
+
+	ri->discr = buf[0] & 0x0f;
+	buf++;
+
+	switch (ri->discr) {
+	case BSSGP_RIM_ROUTING_INFO_GERAN:
+		if (len < 9)
+			return -EINVAL;
+		ri->geran.cid = bssgp_parse_cell_id(&ri->geran.raid, buf);
+		return 9;
+	case BSSGP_RIM_ROUTING_INFO_UTRAN:
+		if (len < 9)
+			return -EINVAL;
+		gsm48_parse_ra(&ri->utran.raid, buf);
+		ri->utran.rncid = osmo_load16be(buf + 6);
+		return 9;
+	case BSSGP_RIM_ROUTING_INFO_EUTRAN:
+		if (len < 7 || len > 14)
+			return -EINVAL;
+		/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
+		 * Figure 10.5.130 specify MCC/MNC encoding in the same way,
+		 * so we can re-use gsm48_parse_ra() for that. */
+		gsm48_parse_ra(&raid_temp, buf);
+		ri->eutran.tai.mcc = raid_temp.mcc;
+		ri->eutran.tai.mnc = raid_temp.mnc;
+		ri->eutran.tai.mnc_3_digits = raid_temp.mnc_3_digits;
+		ri->eutran.tai.tac = osmo_load16be(buf + 3);
+		memcpy(ri->eutran.global_enb_id, buf + 5, len - 6);
+	        ri->eutran.global_enb_id_len = len - 6;
+		return len;
+	default:
+		return -EINVAL;
+	}
+}
+
+/*! Encode a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
+ *  \param[out] buf user provided memory (at least 14 byte) for the generated value part of the IE.
+ *  \param[in] ri user provided input data struct.
+ *  \returns length of encoded octets, -EINVAL on error. */
+int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri)
+{
+	int rc;
+	struct gprs_ra_id raid_temp;
+
+	buf[0] = ri->discr & 0x0f;
+	buf++;
+
+	switch (ri->discr) {
+	case BSSGP_RIM_ROUTING_INFO_GERAN:
+		rc = bssgp_create_cell_id(buf, &ri->geran.raid, ri->geran.cid);
+		if (rc < 0)
+			return -EINVAL;
+		return rc + 1;
+	case BSSGP_RIM_ROUTING_INFO_UTRAN:
+		gsm48_encode_ra((struct gsm48_ra_id *)buf, &ri->utran.raid);
+		osmo_store16be(ri->utran.rncid, buf + 6);
+		return 9;
+	case BSSGP_RIM_ROUTING_INFO_EUTRAN:
+		/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
+		 * Figure 10.5.130 specify MCC/MNC encoding in the same way,
+		 * so we can re-use gsm48_encode_ra() for that. */
+		raid_temp = (struct gprs_ra_id) {
+			.mcc = ri->eutran.tai.mcc,
+			.mnc = ri->eutran.tai.mnc,
+			.mnc_3_digits = ri->eutran.tai.mnc_3_digits,
+		};
+
+		gsm48_encode_ra((struct gsm48_ra_id *)buf, &raid_temp);
+		osmo_store16be(ri->eutran.tai.tac, buf + 3);
+		OSMO_ASSERT(ri->eutran.global_enb_id_len <=
+			    sizeof(ri->eutran.global_enb_id));
+		memcpy(buf + 5, ri->eutran.global_enb_id,
+		       ri->eutran.global_enb_id_len);
+		return ri->eutran.global_enb_id_len + 6;
+	default:
+		return -EINVAL;
+	}
+}
+
 /*! Decode a RAN Information Request Application Container for NACC (3GPP TS 48.018, section 11.3.63.1.1).
  *  \param[out] user provided memory for decoded data struct.
  *  \param[in] buf user provided memory with the encoded value data of the IE.