From d7e04b9956bb7d579697604fff6ba67fc6b9e52d Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Sat, 4 Apr 2015 22:28:32 +0200 Subject: filter: Cease out "struct bsc_nat" from the API This means we need to require a talloc context and simply operate on the list. I had considered creating a structure to hold the list head but I didn't find any other members so omitted it for now. --- openbsc/include/openbsc/bsc_msg_filter.h | 7 +++---- openbsc/src/libfilter/bsc_msg_acc.c | 12 ++++++------ openbsc/src/libfilter/bsc_msg_filter.c | 4 ++-- openbsc/src/libfilter/bsc_msg_vty.c | 19 +++++++++---------- openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 2 +- openbsc/src/osmo-bsc_nat/bsc_ussd.c | 2 +- openbsc/tests/bsc-nat/bsc_nat_test.c | 4 ++-- 7 files changed, 24 insertions(+), 26 deletions(-) diff --git a/openbsc/include/openbsc/bsc_msg_filter.h b/openbsc/include/openbsc/bsc_msg_filter.h index bff326fc7..80dc37abf 100644 --- a/openbsc/include/openbsc/bsc_msg_filter.h +++ b/openbsc/include/openbsc/bsc_msg_filter.h @@ -10,7 +10,6 @@ struct vty; /* TODO: remove */ -struct bsc_nat; struct bsc_nat_parsed; struct bsc_connection; struct nat_sccp_connection; @@ -73,12 +72,12 @@ int bsc_nat_filter_dt(struct bsc_connection *bsc, struct msgb *msg, struct bsc_nat_reject_cause *cause); /* IMSI allow/deny handling */ -struct bsc_nat_acc_lst *bsc_nat_acc_lst_find(struct bsc_nat *nat, const char *name); -struct bsc_nat_acc_lst *bsc_nat_acc_lst_get(struct bsc_nat *nat, const char *name); +struct bsc_nat_acc_lst *bsc_nat_acc_lst_find(struct llist_head *lst, const char *name); +struct bsc_nat_acc_lst *bsc_nat_acc_lst_get(void *ctx, struct llist_head *lst, const char *name); void bsc_nat_acc_lst_delete(struct bsc_nat_acc_lst *lst); struct bsc_nat_acc_lst_entry *bsc_nat_acc_lst_entry_create(struct bsc_nat_acc_lst *); int bsc_nat_lst_check_allow(struct bsc_nat_acc_lst *lst, const char *imsi); -void bsc_nat_lst_vty_init(struct bsc_nat *nat, int node); +void bsc_nat_lst_vty_init(void *ctx, struct llist_head *lst, int node); void bsc_nat_acc_lst_write(struct vty *vty, struct bsc_nat_acc_lst *lst); diff --git a/openbsc/src/libfilter/bsc_msg_acc.c b/openbsc/src/libfilter/bsc_msg_acc.c index 947a7b2ed..cc6c44405 100644 --- a/openbsc/src/libfilter/bsc_msg_acc.c +++ b/openbsc/src/libfilter/bsc_msg_acc.c @@ -52,29 +52,29 @@ int bsc_nat_lst_check_allow(struct bsc_nat_acc_lst *lst, const char *mi_string) return 1; } -struct bsc_nat_acc_lst *bsc_nat_acc_lst_find(struct bsc_nat *nat, const char *name) +struct bsc_nat_acc_lst *bsc_nat_acc_lst_find(struct llist_head *head, const char *name) { struct bsc_nat_acc_lst *lst; if (!name) return NULL; - llist_for_each_entry(lst, &nat->access_lists, list) + llist_for_each_entry(lst, head, list) if (strcmp(lst->name, name) == 0) return lst; return NULL; } -struct bsc_nat_acc_lst *bsc_nat_acc_lst_get(struct bsc_nat *nat, const char *name) +struct bsc_nat_acc_lst *bsc_nat_acc_lst_get(void *ctx, struct llist_head *head, const char *name) { struct bsc_nat_acc_lst *lst; - lst = bsc_nat_acc_lst_find(nat, name); + lst = bsc_nat_acc_lst_find(head, name); if (lst) return lst; - lst = talloc_zero(nat, struct bsc_nat_acc_lst); + lst = talloc_zero(ctx, struct bsc_nat_acc_lst); if (!lst) { LOGP(DNAT, LOGL_ERROR, "Failed to allocate access list"); return NULL; @@ -89,7 +89,7 @@ struct bsc_nat_acc_lst *bsc_nat_acc_lst_get(struct bsc_nat *nat, const char *nam INIT_LLIST_HEAD(&lst->fltr_list); lst->name = talloc_strdup(lst, name); - llist_add_tail(&lst->list, &nat->access_lists); + llist_add_tail(&lst->list, head); return lst; } diff --git a/openbsc/src/libfilter/bsc_msg_filter.c b/openbsc/src/libfilter/bsc_msg_filter.c index 8f2e1cabf..1f7a14e63 100644 --- a/openbsc/src/libfilter/bsc_msg_filter.c +++ b/openbsc/src/libfilter/bsc_msg_filter.c @@ -168,8 +168,8 @@ static int auth_imsi(struct bsc_connection *bsc, const char *imsi, } - bsc_lst = bsc_nat_acc_lst_find(bsc->nat, bsc->cfg->acc_lst_name); - nat_lst = bsc_nat_acc_lst_find(bsc->nat, bsc->nat->acc_lst_name); + bsc_lst = bsc_nat_acc_lst_find(&bsc->nat->access_lists, bsc->cfg->acc_lst_name); + nat_lst = bsc_nat_acc_lst_find(&bsc->nat->access_lists, bsc->nat->acc_lst_name); if (bsc_lst) { diff --git a/openbsc/src/libfilter/bsc_msg_vty.c b/openbsc/src/libfilter/bsc_msg_vty.c index 070a03da6..79cf03db1 100644 --- a/openbsc/src/libfilter/bsc_msg_vty.c +++ b/openbsc/src/libfilter/bsc_msg_vty.c @@ -18,13 +18,13 @@ */ #include -#include #include #include #include -static struct bsc_nat *_nat; +static struct llist_head *_acc_lst; +static void *_ctx; DEFUN(cfg_lst_no, cfg_lst_no_cmd, @@ -33,7 +33,7 @@ DEFUN(cfg_lst_no, "The access-list to remove\n") { struct bsc_nat_acc_lst *acc; - acc = bsc_nat_acc_lst_find(_nat, argv[0]); + acc = bsc_nat_acc_lst_find(_acc_lst, argv[0]); if (!acc) return CMD_WARNING; @@ -47,7 +47,7 @@ DEFUN(show_acc_lst, SHOW_STR "IMSI access list\n" "Name of the access list\n") { struct bsc_nat_acc_lst *acc; - acc = bsc_nat_acc_lst_find(_nat, argv[0]); + acc = bsc_nat_acc_lst_find(_acc_lst, argv[0]); if (!acc) return CMD_WARNING; @@ -68,7 +68,7 @@ DEFUN(cfg_lst_imsi_allow, struct bsc_nat_acc_lst *acc; struct bsc_nat_acc_lst_entry *entry; - acc = bsc_nat_acc_lst_get(_nat, argv[0]); + acc = bsc_nat_acc_lst_get(_ctx, _acc_lst, argv[0]); if (!acc) return CMD_WARNING; @@ -94,7 +94,7 @@ DEFUN(cfg_lst_imsi_deny, struct bsc_nat_acc_lst *acc; struct bsc_nat_acc_lst_entry *entry; - acc = bsc_nat_acc_lst_get(_nat, argv[0]); + acc = bsc_nat_acc_lst_get(_ctx, _acc_lst, argv[0]); if (!acc) return CMD_WARNING; @@ -127,11 +127,10 @@ void bsc_nat_acc_lst_write(struct vty *vty, struct bsc_nat_acc_lst *lst) } } - -void bsc_nat_lst_vty_init(struct bsc_nat *nat, int node) +void bsc_nat_lst_vty_init(void *ctx, struct llist_head *lst, int node) { - _nat = nat; - + _ctx = ctx; + _acc_lst = lst; install_element_ve(&show_acc_lst_cmd); /* access-list */ diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c index 89b9742a9..3a53dd402 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c @@ -1171,7 +1171,7 @@ int bsc_nat_vty_init(struct bsc_nat *nat) install_element(NAT_NODE, &cfg_nat_ussd_local_cmd); install_element(NAT_NODE, &cfg_nat_use_ipa_for_mgcp_cmd); - bsc_nat_lst_vty_init(nat, NAT_NODE); + bsc_nat_lst_vty_init(nat, &nat->access_lists, NAT_NODE); /* number rewriting */ install_element(NAT_NODE, &cfg_nat_number_rewrite_cmd); diff --git a/openbsc/src/osmo-bsc_nat/bsc_ussd.c b/openbsc/src/osmo-bsc_nat/bsc_ussd.c index 48626b1ad..f27453bc3 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_ussd.c +++ b/openbsc/src/osmo-bsc_nat/bsc_ussd.c @@ -416,7 +416,7 @@ int bsc_ussd_check(struct nat_sccp_connection *con, struct bsc_nat_parsed *parse if (msg_type == GSM0480_MTYPE_REGISTER) { /* now check if it is a IMSI we care about */ - lst = bsc_nat_acc_lst_find(con->bsc->nat, + lst = bsc_nat_acc_lst_find(&con->bsc->nat->access_lists, con->bsc->nat->ussd_lst_name); if (!lst) return 0; diff --git a/openbsc/tests/bsc-nat/bsc_nat_test.c b/openbsc/tests/bsc-nat/bsc_nat_test.c index 105fec92b..8ee8e3945 100644 --- a/openbsc/tests/bsc-nat/bsc_nat_test.c +++ b/openbsc/tests/bsc-nat/bsc_nat_test.c @@ -879,8 +879,8 @@ static void test_cr_filter() bsc->cfg->acc_lst_name = "bsc"; nat->acc_lst_name = "nat"; - nat_lst = bsc_nat_acc_lst_get(nat, "nat"); - bsc_lst = bsc_nat_acc_lst_get(nat, "bsc"); + nat_lst = bsc_nat_acc_lst_get(nat, &nat->access_lists, "nat"); + bsc_lst = bsc_nat_acc_lst_get(nat, &nat->access_lists, "bsc"); bsc_entry = bsc_nat_acc_lst_entry_create(bsc_lst); nat_entry = bsc_nat_acc_lst_entry_create(nat_lst); -- cgit v1.2.3