nat: Remember if we have check the imsi.

Return -1 if the IMSI should be filtered, 0 if the IMSI could not
be checked and 1 if the IMSI was checked and allowed to pass. In
the future this will be used to inspect every message coming by.
This commit is contained in:
Holger Hans Peter Freyther
2010-09-15 00:41:19 +08:00
parent 3837f99e89
commit 909e61fddc
3 changed files with 5 additions and 3 deletions

View File

@@ -78,6 +78,7 @@ struct sccp_connections {
/* status */ /* status */
int con_type; int con_type;
int con_local; int con_local;
int imsi_checked;
/* /*
* audio handling. Remember if we have ever send a CRCX, * audio handling. Remember if we have ever send a CRCX,

View File

@@ -713,7 +713,7 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
switch (parsed->sccp_type) { switch (parsed->sccp_type) {
case SCCP_MSG_TYPE_CR: case SCCP_MSG_TYPE_CR:
filter = bsc_nat_filter_sccp_cr(bsc, msg, parsed, &con_type); filter = bsc_nat_filter_sccp_cr(bsc, msg, parsed, &con_type);
if (filter != 0) if (filter < 0)
goto exit3; goto exit3;
if (!create_sccp_src_ref(bsc, parsed)) if (!create_sccp_src_ref(bsc, parsed))
goto exit2; goto exit2;
@@ -721,6 +721,7 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
con->msc_con = bsc->nat->msc_con; con->msc_con = bsc->nat->msc_con;
con_msc = con->msc_con; con_msc = con->msc_con;
con->con_type = con_type; con->con_type = con_type;
con->imsi_checked = filter;
con_bsc = con->bsc; con_bsc = con->bsc;
break; break;
case SCCP_MSG_TYPE_RLSD: case SCCP_MSG_TYPE_RLSD:

View File

@@ -271,7 +271,7 @@ static int auth_imsi(struct bsc_connection *bsc, const char *mi_string)
/* 2. BSC allow */ /* 2. BSC allow */
if (lst_check_allow(bsc_lst, mi_string) == 0) if (lst_check_allow(bsc_lst, mi_string) == 0)
return 0; return 1;
} }
/* 3. NAT deny */ /* 3. NAT deny */
@@ -283,7 +283,7 @@ static int auth_imsi(struct bsc_connection *bsc, const char *mi_string)
} }
} }
return 0; return 1;
} }
static int _cr_check_loc_upd(struct bsc_connection *bsc, uint8_t *data, unsigned int length) static int _cr_check_loc_upd(struct bsc_connection *bsc, uint8_t *data, unsigned int length)