implement support for 3-digit MNC with leading zeros

Add 3-digit flags and use the new RAI and LAI API from libosmocore throughout
the code base to be able to handle an MNC < 100 that has three digits (leading
zeros).

Depends: Id2240f7f518494c9df6c8bda52c0d5092f90f221 (libosmocore),
         Ib7176b1d65a03b76f41f94bc9d3293a8a07d24c6 (libosmocore)
Change-Id: I82f0016d9512ee8722a3489a3cb4b6c704a271fc
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index b928171..18f8412 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -222,15 +222,17 @@
 	struct gsm48_hdr *gh;
 	struct gsm48_loc_area_id *lai;
 	uint8_t *mid;
+	struct osmo_location_area_id laid = {
+		.plmn = conn->network->plmn,
+		.lac = conn->lac,
+	};
 
 	gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh));
 	gh->proto_discr = GSM48_PDISC_MM;
 	gh->msg_type = GSM48_MT_MM_LOC_UPD_ACCEPT;
 
 	lai = (struct gsm48_loc_area_id *) msgb_put(msg, sizeof(*lai));
-	gsm48_generate_lai(lai, conn->network->country_code,
-			   conn->network->network_code,
-			   conn->lac);
+	gsm48_generate_lai2(lai, &laid);
 
 	if (send_tmsi == GSM_RESERVED_TMSI) {
 		/* we did not allocate a TMSI to the MS, so we need to
@@ -381,10 +383,8 @@
 		break;
 	}
 
-	gsm48_decode_lai(&lu->lai, &old_lai.plmn.mcc,
-			 &old_lai.plmn.mnc, &old_lai.lac);
-	new_lai.plmn.mcc = conn->network->country_code;
-	new_lai.plmn.mnc = conn->network->network_code;
+	gsm48_decode_lai2(&lu->lai, &old_lai);
+	new_lai.plmn = conn->network->plmn;
 	new_lai.lac = conn->lac;
 	DEBUGP(DMM, "LU/new-LAC: %u/%u\n", old_lai.lac, new_lai.lac);
 
@@ -701,8 +701,7 @@
 	bool is_utran;
 	int rc;
 
-	lai.plmn.mcc = conn->network->country_code;
-	lai.plmn.mnc = conn->network->network_code;
+	lai.plmn = conn->network->plmn;
 	lai.lac = conn->lac;
 
 	DEBUGP(DMM, "<- CM SERVICE REQUEST ");
@@ -1152,8 +1151,7 @@
 	struct osmo_location_area_id lai;
 	bool is_utran;
 
-	lai.plmn.mcc = conn->network->country_code;
-	lai.plmn.mnc = conn->network->network_code;
+	lai.plmn = conn->network->plmn;
 	lai.lac = conn->lac;
 
 	resp = (struct gsm48_pag_resp *) &gh->data[0];