diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-06-15 18:52:24 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-06-15 20:24:20 +0800 |
commit | ed775e4c1d75dbf5d3027bf831bf6714768243e4 (patch) | |
tree | 3b80bd65c0086a3b6d058499aad290f3b0af2a6b /openbsc/src/nat | |
parent | 91246d724f33485a3c8c498e63b17406476086e9 (diff) |
[nat] Send a GSM48 message within the reject message
Diffstat (limited to 'openbsc/src/nat')
-rw-r--r-- | openbsc/src/nat/bsc_nat.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c index 4b9ea6520..9e6bd2b84 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -44,6 +44,7 @@ #include <openbsc/abis_nm.h> #include <openbsc/telnet_interface.h> +#include <osmocore/gsm0808.h> #include <osmocore/talloc.h> #include <vty/vty.h> @@ -297,8 +298,25 @@ static void bsc_send_data(struct bsc_connection *bsc, const u_int8_t *data, unsi static void bsc_send_con_refuse(struct bsc_connection *bsc, struct bsc_nat_parsed *parsed, int con_type) { + struct msgb *payload; struct msgb *refuse; - refuse = sccp_create_refuse(parsed->src_local_ref, SCCP_REFUSAL_SCCP_FAILURE, NULL, 0); + + if (con_type == NAT_CON_TYPE_LU) { + payload = gsm48_create_loc_upd_rej(GSM48_REJECT_PLMN_NOT_ALLOWED); + gsm0808_prepend_dtap_header(payload, 0); + } else if (con_type == NAT_CON_TYPE_CM_SERV_REQ) { + payload = gsm48_create_mm_serv_rej(GSM48_REJECT_PLMN_NOT_ALLOWED); + gsm0808_prepend_dtap_header(payload, 0); + } + + refuse = sccp_create_refuse(parsed->src_local_ref, + SCCP_REFUSAL_SCCP_FAILURE, + payload ? payload->data : NULL, + payload ? payload->len : 0); + + if (payload) + msgb_free(payload); + if (!refuse) { LOGP(DNAT, LOGL_ERROR, "Creating refuse msg failed for SCCP 0x%x on BSC Nr: %d.\n", |