nat: Store the config in the connection instead of the lac
This allows that we can print the Nr. next to the lac and it allows us to change the lac at runtime without reconnecting the BSC.
This commit is contained in:
parent
a7c377d593
commit
47dd4944ae
|
@ -84,8 +84,8 @@ struct bsc_connection {
|
||||||
/* the fd we use to communicate */
|
/* the fd we use to communicate */
|
||||||
struct write_queue write_queue;
|
struct write_queue write_queue;
|
||||||
|
|
||||||
/* the LAC assigned to this connection */
|
/* the BSS associated */
|
||||||
unsigned int lac;
|
struct bsc_config *cfg;
|
||||||
|
|
||||||
/* a timeout node */
|
/* a timeout node */
|
||||||
struct timer_list id_timeout;
|
struct timer_list id_timeout;
|
||||||
|
|
|
@ -377,9 +377,9 @@ static void ipaccess_auth_bsc(struct tlv_parsed *tvp, struct bsc_connection *bsc
|
||||||
llist_for_each_entry(conf, &bsc->nat->bsc_configs, entry) {
|
llist_for_each_entry(conf, &bsc->nat->bsc_configs, entry) {
|
||||||
if (strcmp(conf->token, token) == 0) {
|
if (strcmp(conf->token, token) == 0) {
|
||||||
bsc->authenticated = 1;
|
bsc->authenticated = 1;
|
||||||
bsc->lac = conf->lac;
|
bsc->cfg = conf;
|
||||||
bsc_del_timer(&bsc->id_timeout);
|
bsc_del_timer(&bsc->id_timeout);
|
||||||
LOGP(DNAT, LOGL_NOTICE, "Authenticated bsc %d\n", bsc->lac);
|
LOGP(DNAT, LOGL_NOTICE, "Authenticated bsc nr: %d lac: %d\n", conf->nr, conf->lac);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,9 @@ struct bsc_connection *bsc_nat_find_bsc(struct bsc_nat *nat, struct msgb *msg)
|
||||||
for (i = 1; i < data_length - 1; i += 2) {
|
for (i = 1; i < data_length - 1; i += 2) {
|
||||||
unsigned int _lac = ntohs(*(unsigned int *) &data[i]);
|
unsigned int _lac = ntohs(*(unsigned int *) &data[i]);
|
||||||
llist_for_each_entry(bsc, &nat->bsc_connections, list_entry) {
|
llist_for_each_entry(bsc, &nat->bsc_connections, list_entry) {
|
||||||
if (!bsc->authenticated || _lac != bsc->lac)
|
if (!bsc->cfg)
|
||||||
|
continue;
|
||||||
|
if (!bsc->authenticated || _lac != bsc->cfg->lac)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return bsc;
|
return bsc;
|
||||||
|
|
|
@ -76,8 +76,9 @@ DEFUN(show_sccp, show_sccp_cmd, "show connections sccp",
|
||||||
{
|
{
|
||||||
struct sccp_connections *con;
|
struct sccp_connections *con;
|
||||||
llist_for_each_entry(con, &_nat->sccp_connections, list_entry) {
|
llist_for_each_entry(con, &_nat->sccp_connections, list_entry) {
|
||||||
vty_out(vty, "SCCP for BSC: %d BSC ref: 0x%x Local ref: 0x%x MSC/BSC mux: 0x%x/0x%x%s",
|
vty_out(vty, "SCCP for BSC: Nr: %d lac: %d BSC ref: 0x%x Local ref: 0x%x MSC/BSC mux: 0x%x/0x%x%s",
|
||||||
con->bsc->lac,
|
con->bsc->cfg ? con->bsc->cfg->nr : -1,
|
||||||
|
con->bsc->cfg ? con->bsc->cfg->lac : -1,
|
||||||
sccp_src_ref_to_int(&con->real_ref),
|
sccp_src_ref_to_int(&con->real_ref),
|
||||||
sccp_src_ref_to_int(&con->patched_ref),
|
sccp_src_ref_to_int(&con->patched_ref),
|
||||||
con->msc_timeslot, con->bsc_timeslot,
|
con->msc_timeslot, con->bsc_timeslot,
|
||||||
|
@ -92,8 +93,10 @@ DEFUN(show_bsc, show_bsc_cmd, "show connections bsc",
|
||||||
{
|
{
|
||||||
struct bsc_connection *con;
|
struct bsc_connection *con;
|
||||||
llist_for_each_entry(con, &_nat->bsc_connections, list_entry) {
|
llist_for_each_entry(con, &_nat->bsc_connections, list_entry) {
|
||||||
vty_out(vty, "BSC lac: %d auth: %d fd: %d%s",
|
vty_out(vty, "BSC lac: %d, %d auth: %d fd: %d%s",
|
||||||
con->lac, con->authenticated, con->write_queue.bfd.fd, VTY_NEWLINE);
|
con->cfg ? con->cfg->nr : -1,
|
||||||
|
con->cfg ? con->cfg->lac : -1,
|
||||||
|
con->authenticated, con->write_queue.bfd.fd, VTY_NEWLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
|
|
|
@ -332,13 +332,15 @@ static void test_paging(void)
|
||||||
struct bsc_nat *nat;
|
struct bsc_nat *nat;
|
||||||
struct bsc_connection *con;
|
struct bsc_connection *con;
|
||||||
struct bsc_nat_parsed *parsed;
|
struct bsc_nat_parsed *parsed;
|
||||||
|
struct bsc_config cfg;
|
||||||
struct msgb *msg;
|
struct msgb *msg;
|
||||||
|
|
||||||
fprintf(stderr, "Testing paging by lac.\n");
|
fprintf(stderr, "Testing paging by lac.\n");
|
||||||
|
|
||||||
nat = bsc_nat_alloc();
|
nat = bsc_nat_alloc();
|
||||||
con = bsc_connection_alloc(nat);
|
con = bsc_connection_alloc(nat);
|
||||||
con->lac = 23;
|
con->cfg = &cfg;
|
||||||
|
cfg.lac = 23;
|
||||||
con->authenticated = 1;
|
con->authenticated = 1;
|
||||||
llist_add(&con->list_entry, &nat->bsc_connections);
|
llist_add(&con->list_entry, &nat->bsc_connections);
|
||||||
msg = msgb_alloc(4096, "test");
|
msg = msgb_alloc(4096, "test");
|
||||||
|
@ -360,7 +362,7 @@ static void test_paging(void)
|
||||||
talloc_free(parsed);
|
talloc_free(parsed);
|
||||||
|
|
||||||
/* Test by finding it */
|
/* Test by finding it */
|
||||||
con->lac = 8213;
|
cfg.lac = 8213;
|
||||||
copy_to_msg(msg, paging_by_lac_cmd, sizeof(paging_by_lac_cmd));
|
copy_to_msg(msg, paging_by_lac_cmd, sizeof(paging_by_lac_cmd));
|
||||||
parsed = bsc_nat_parse(msg);
|
parsed = bsc_nat_parse(msg);
|
||||||
if (bsc_nat_find_bsc(nat, msg) != con) {
|
if (bsc_nat_find_bsc(nat, msg) != con) {
|
||||||
|
|
Loading…
Reference in New Issue