mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
				synced 2025-10-31 03:53:54 +00:00 
			
		
		
		
	sms: change rp err cause of smpp_try_deliver errors
smpp_try_deliver could fail with rc < 0. In such cases don't send the MS the rp error sms rejected (cause 21). A rejected message should not be sent again. The spec 04 11 recommends sending cause 41 Temporary failure in unknown cases. Add also a log message and rate counter for such cases. Tweaked-By: Neels Hofmeyr <nhofmeyr@sysmocom.de> Change-Id: Ia03e50ce2bd9a7d1054cc5a6000fd73bd3497c03
This commit is contained in:
		
				
					committed by
					
						 Harald Welte
						Harald Welte
					
				
			
			
				
	
			
			
			
						parent
						
							c2f2ad8a5f
						
					
				
				
					commit
					aa386d29fd
				
			| @@ -198,6 +198,7 @@ enum { | |||||||
| 	MSC_CTR_SMS_DELIVERED, | 	MSC_CTR_SMS_DELIVERED, | ||||||
| 	MSC_CTR_SMS_RP_ERR_MEM, | 	MSC_CTR_SMS_RP_ERR_MEM, | ||||||
| 	MSC_CTR_SMS_RP_ERR_OTHER, | 	MSC_CTR_SMS_RP_ERR_OTHER, | ||||||
|  | 	MSC_CTR_SMS_DELIVER_UNKNOWN_ERROR, | ||||||
| 	MSC_CTR_CALL_MO_SETUP, | 	MSC_CTR_CALL_MO_SETUP, | ||||||
| 	MSC_CTR_CALL_MO_CONNECT_ACK, | 	MSC_CTR_CALL_MO_CONNECT_ACK, | ||||||
| 	MSC_CTR_CALL_MT_SETUP, | 	MSC_CTR_CALL_MT_SETUP, | ||||||
| @@ -216,6 +217,7 @@ static const struct rate_ctr_desc msc_ctr_description[] = { | |||||||
| 	[MSC_CTR_SMS_DELIVERED] = 		{"sms.delivered", "Global SMS Deliver attempts."}, | 	[MSC_CTR_SMS_DELIVERED] = 		{"sms.delivered", "Global SMS Deliver attempts."}, | ||||||
| 	[MSC_CTR_SMS_RP_ERR_MEM] = 		{"sms.rp_err_mem", "CAUSE_MT_MEM_EXCEEDED errors of MS responses on a sms deliver attempt."}, | 	[MSC_CTR_SMS_RP_ERR_MEM] = 		{"sms.rp_err_mem", "CAUSE_MT_MEM_EXCEEDED errors of MS responses on a sms deliver attempt."}, | ||||||
| 	[MSC_CTR_SMS_RP_ERR_OTHER] = 		{"sms.rp_err_other", "Other error of MS responses on a sms delive attempt."}, | 	[MSC_CTR_SMS_RP_ERR_OTHER] = 		{"sms.rp_err_other", "Other error of MS responses on a sms delive attempt."}, | ||||||
|  | 	[MSC_CTR_SMS_DELIVER_UNKNOWN_ERROR] =	{"sms.deliver_unknown_error", "Unknown error occured during sms delivery."}, | ||||||
| 	/* FIXME: count also sms delivered */ | 	/* FIXME: count also sms delivered */ | ||||||
| 	[MSC_CTR_CALL_MO_SETUP] = 		{"call.mo_setup", "Received setup requests from a MS to init a MO call."}, | 	[MSC_CTR_CALL_MO_SETUP] = 		{"call.mo_setup", "Received setup requests from a MS to init a MO call."}, | ||||||
| 	[MSC_CTR_CALL_MO_CONNECT_ACK] = 		{"call.mo_connect_ack", "Received a connect ack from MS of a MO call. Call is now succesful connected up."}, | 	[MSC_CTR_CALL_MO_CONNECT_ACK] = 		{"call.mo_connect_ack", "Received a connect ack from MS of a MO call. Call is now succesful connected up."}, | ||||||
|   | |||||||
| @@ -40,6 +40,7 @@ | |||||||
|  |  | ||||||
| #include <osmocom/gsm/gsm_utils.h> | #include <osmocom/gsm/gsm_utils.h> | ||||||
| #include <osmocom/gsm/gsm0411_utils.h> | #include <osmocom/gsm/gsm0411_utils.h> | ||||||
|  | #include <osmocom/gsm/protocol/gsm_04_11.h> | ||||||
|  |  | ||||||
| #include <openbsc/debug.h> | #include <openbsc/debug.h> | ||||||
| #include <openbsc/gsm_data.h> | #include <openbsc/gsm_data.h> | ||||||
| @@ -294,8 +295,12 @@ int sms_route_mt_sms(struct gsm_subscriber_connection *conn, struct msgb *msg, | |||||||
| 		if (rc == 1) | 		if (rc == 1) | ||||||
| 			goto try_local; | 			goto try_local; | ||||||
| 		if (rc < 0) { | 		if (rc < 0) { | ||||||
| 			rc = 21; /* cause 21: short message transfer rejected */ | 	 		LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.", | ||||||
| 			/* FIXME: handle the error somehow? */ | 			     subscr_name(conn->subscr), rc); | ||||||
|  | 	 		rc = GSM411_RP_CAUSE_MO_TEMP_FAIL; | ||||||
|  | 			/* rc will be logged by gsm411_send_rp_error() */ | ||||||
|  | 	 		rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[ | ||||||
|  | 					MSC_CTR_SMS_DELIVER_UNKNOWN_ERROR]); | ||||||
| 		} | 		} | ||||||
| 		return rc; | 		return rc; | ||||||
| 	} | 	} | ||||||
| @@ -319,8 +324,12 @@ try_local: | |||||||
| 			rc = 1; /* cause 1: unknown subscriber */ | 			rc = 1; /* cause 1: unknown subscriber */ | ||||||
| 			rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); | 			rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); | ||||||
| 		} else if (rc < 0) { | 		} else if (rc < 0) { | ||||||
| 			rc = 21; /* cause 21: short message transfer rejected */ | 	 		LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.", | ||||||
| 			/* FIXME: handle the error somehow? */ | 			     subscr_name(conn->subscr), rc); | ||||||
|  | 	 		rc = GSM411_RP_CAUSE_MO_TEMP_FAIL; | ||||||
|  | 			/* rc will be logged by gsm411_send_rp_error() */ | ||||||
|  | 	 		rate_ctr_inc(&conn->bts->network->msc_ctrs->ctr[ | ||||||
|  | 					MSC_CTR_SMS_DELIVER_UNKNOWN_ERROR]); | ||||||
| 		} | 		} | ||||||
| #else | #else | ||||||
| 		rc = 1; /* cause 1: unknown subscriber */ | 		rc = 1; /* cause 1: unknown subscriber */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user