VLR: send CHECK-IMEI to EIR/HLR

When check-imei-req is enabled in the VTY config, do not accept IMEIs
sent by the ME directly anymore. Send the IMEI to the EIR/HLR and wait
for its ACK or NACK.

OsmoHLR also accepts all IMEIs at this point, but this allows to
optionally store the IMEI in the HLR DB.

Depends: Ib240474b0c3c603ba840cf26babb38a44dfc9364 (osmo-hlr)
Related: OS#3733
Change-Id: Ife868ed71c36cdd02638072abebf61fc949080a7
diff --git a/src/libvlr/vlr_lu_fsm.c b/src/libvlr/vlr_lu_fsm.c
index 8640d2b..a97e97a 100644
--- a/src/libvlr/vlr_lu_fsm.c
+++ b/src/libvlr/vlr_lu_fsm.c
@@ -653,6 +653,8 @@
 	OSMO_VALUE_STRING(VLR_ULA_E_ID_IMSI),
 	OSMO_VALUE_STRING(VLR_ULA_E_ID_IMEI),
 	OSMO_VALUE_STRING(VLR_ULA_E_ID_IMEISV),
+	OSMO_VALUE_STRING(VLR_ULA_E_HLR_IMEI_ACK),
+	OSMO_VALUE_STRING(VLR_ULA_E_HLR_IMEI_NACK),
 	OSMO_VALUE_STRING(VLR_ULA_E_HLR_LU_RES),
 	OSMO_VALUE_STRING(VLR_ULA_E_UPD_HLR_COMPL),
 	OSMO_VALUE_STRING(VLR_ULA_E_LU_COMPL_SUCCESS),
@@ -1229,9 +1231,17 @@
 				       LU_COMPL_VLR_E_NEW_TMSI_ACK, NULL);
 		break;
 	case VLR_ULA_E_ID_IMEI:
+		/* Got the IMEI from ME, now send it to HLR */
+		vlr_subscr_tx_req_check_imei(lfp->vsub);
+		break;
+	case VLR_ULA_E_HLR_IMEI_ACK:
 		osmo_fsm_inst_dispatch(lfp->lu_compl_vlr_fsm,
 				       LU_COMPL_VLR_E_IMEI_CHECK_ACK, NULL);
 		break;
+	case VLR_ULA_E_HLR_IMEI_NACK:
+		osmo_fsm_inst_dispatch(lfp->lu_compl_vlr_fsm,
+				       LU_COMPL_VLR_E_IMEI_CHECK_NACK, NULL);
+		break;
 	case VLR_ULA_E_LU_COMPL_SUCCESS:
 		lu_fsm_discard_lu_compl_fsm(fi);
 
@@ -1362,7 +1372,9 @@
 				 S(VLR_ULA_E_LU_COMPL_FAILURE) |
 				 S(VLR_ULA_E_NEW_TMSI_ACK) |
 				 S(VLR_ULA_E_ID_IMEI) |
-				 S(VLR_ULA_E_ID_IMEISV),
+				 S(VLR_ULA_E_ID_IMEISV) |
+				 S(VLR_ULA_E_HLR_IMEI_ACK) |
+				 S(VLR_ULA_E_HLR_IMEI_NACK),
 		.out_state_mask = S(VLR_ULA_S_DONE),
 		.name = OSMO_STRINGIFY(VLR_ULA_S_WAIT_LU_COMPL),
 		.action = lu_fsm_wait_lu_compl,