mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-10-23 08:12:01 +00:00
[nat] Make create_sccp_src_ref return the SCCP Connection.
Right now it was not possible to just find a connection, by returning the connection that is created we will have direct access to it. It will be used by the local connection handling.
This commit is contained in:
@@ -281,7 +281,7 @@ int bsc_nat_filter_sccp_cr(struct bsc_connection *bsc, struct msgb *msg,
|
||||
/**
|
||||
* SCCP patching and handling
|
||||
*/
|
||||
int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parsed);
|
||||
struct sccp_connections *create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parsed);
|
||||
int update_sccp_src_ref(struct sccp_connections *sccp, struct bsc_nat_parsed *parsed);
|
||||
void remove_sccp_src_ref(struct bsc_connection *bsc, struct msgb *msg, struct bsc_nat_parsed *parsed);
|
||||
struct sccp_connections *patch_sccp_src_ref_to_bsc(struct msgb *, struct bsc_nat_parsed *, struct bsc_nat *);
|
||||
|
@@ -644,7 +644,7 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg)
|
||||
case SCCP_MSG_TYPE_CR:
|
||||
if (bsc_nat_filter_sccp_cr(bsc, msg, parsed, &con_type) != 0)
|
||||
goto exit3;
|
||||
if (create_sccp_src_ref(bsc, parsed) != 0)
|
||||
if (!create_sccp_src_ref(bsc, parsed))
|
||||
goto exit2;
|
||||
con = patch_sccp_src_ref_to_msc(msg, parsed, bsc);
|
||||
con->con_type = con_type;
|
||||
|
@@ -82,7 +82,8 @@ static int assign_src_local_reference(struct sccp_source_reference *ref, struct
|
||||
return -1;
|
||||
}
|
||||
|
||||
int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parsed)
|
||||
struct sccp_connections *create_sccp_src_ref(struct bsc_connection *bsc,
|
||||
struct bsc_nat_parsed *parsed)
|
||||
{
|
||||
struct sccp_connections *conn;
|
||||
|
||||
@@ -101,11 +102,11 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse
|
||||
bsc_mgcp_dlcx(conn);
|
||||
llist_del(&conn->list_entry);
|
||||
talloc_free(conn);
|
||||
return -1;
|
||||
return NULL;
|
||||
} else {
|
||||
clock_gettime(CLOCK_MONOTONIC, &conn->creation_time);
|
||||
bsc_mgcp_dlcx(conn);
|
||||
return 0;
|
||||
return conn;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +114,7 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse
|
||||
conn = talloc_zero(bsc->nat, struct sccp_connections);
|
||||
if (!conn) {
|
||||
LOGP(DNAT, LOGL_ERROR, "Memory allocation failure.\n");
|
||||
return -1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
conn->bsc = bsc;
|
||||
@@ -122,7 +123,7 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse
|
||||
if (assign_src_local_reference(&conn->patched_ref, bsc->nat) != 0) {
|
||||
LOGP(DNAT, LOGL_ERROR, "Failed to assign a ref.\n");
|
||||
talloc_free(conn);
|
||||
return -1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bsc_mgcp_init(conn);
|
||||
@@ -134,7 +135,7 @@ int create_sccp_src_ref(struct bsc_connection *bsc, struct bsc_nat_parsed *parse
|
||||
sccp_src_ref_to_int(&conn->real_ref),
|
||||
sccp_src_ref_to_int(&conn->patched_ref), bsc);
|
||||
|
||||
return 0;
|
||||
return conn;
|
||||
}
|
||||
|
||||
int update_sccp_src_ref(struct sccp_connections *sccp, struct bsc_nat_parsed *parsed)
|
||||
|
@@ -273,10 +273,10 @@ static void copy_to_msg(struct msgb *msg, const u_int8_t *data, unsigned int len
|
||||
/* test conn tracking once */
|
||||
static void test_contrack()
|
||||
{
|
||||
int rc;
|
||||
struct bsc_nat *nat;
|
||||
struct bsc_connection *con;
|
||||
struct sccp_connections *con_found;
|
||||
struct sccp_connections *rc_con;
|
||||
struct bsc_nat_parsed *parsed;
|
||||
struct msgb *msg;
|
||||
|
||||
@@ -294,8 +294,8 @@ static void test_contrack()
|
||||
fprintf(stderr, "Con should not exist %p\n", con_found);
|
||||
abort();
|
||||
}
|
||||
rc = create_sccp_src_ref(con, parsed);
|
||||
if (rc != 0) {
|
||||
rc_con = create_sccp_src_ref(con, parsed);
|
||||
if (!rc_con) {
|
||||
fprintf(stderr, "Failed to create a ref\n");
|
||||
abort();
|
||||
}
|
||||
@@ -304,6 +304,10 @@ static void test_contrack()
|
||||
fprintf(stderr, "Failed to find the con: %p\n", con_found);
|
||||
abort();
|
||||
}
|
||||
if (con_found != rc_con) {
|
||||
fprintf(stderr, "Failed to find the right connection.\n");
|
||||
abort();
|
||||
}
|
||||
if (memcmp(msg->data, bsc_cr_patched, sizeof(bsc_cr_patched)) != 0) {
|
||||
fprintf(stderr, "Failed to patch the BSC CR msg.\n");
|
||||
abort();
|
||||
|
Reference in New Issue
Block a user