diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-10-21 10:59:54 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-10-27 10:40:43 +0200 |
commit | 76424392e08fcea56e665295830a9fdcc6dba5b5 (patch) | |
tree | cff9e35ebed3e333c1a7c6490f950d27c2613dab /openbsc | |
parent | 0586b0fa47d9bfd4b981e2800b703fc917a8c90a (diff) |
nat: Add vty option for number rewriting
Parse a msg file in case we do have a list.
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/bsc_nat.h | 5 | ||||
-rw-r--r-- | openbsc/src/nat/bsc_nat_vty.c | 25 |
2 files changed, 30 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h index acecba7de..083746f68 100644 --- a/openbsc/include/openbsc/bsc_nat.h +++ b/openbsc/include/openbsc/bsc_nat.h @@ -28,6 +28,7 @@ #include <osmocore/select.h> #include <osmocore/msgb.h> +#include <osmocore/msgfile.h> #include <osmocore/timer.h> #include <osmocore/write_queue.h> #include <osmocore/rate_ctr.h> @@ -237,6 +238,10 @@ struct bsc_nat { /* filter */ char *acc_lst_name; + /* number rewriting */ + char *num_rewr_name; + struct msg_entries *num_rewr; + /* USSD messages we want to match */ char *ussd_lst_name; char *ussd_query; diff --git a/openbsc/src/nat/bsc_nat_vty.c b/openbsc/src/nat/bsc_nat_vty.c index 9eb8ebc75..af7e94c67 100644 --- a/openbsc/src/nat/bsc_nat_vty.c +++ b/openbsc/src/nat/bsc_nat_vty.c @@ -87,6 +87,9 @@ static int config_write_nat(struct vty *vty) if (_nat->ussd_local) vty_out(vty, " ussd-local-ip %s%s", _nat->ussd_local, VTY_NEWLINE); + if (_nat->num_rewr_name) + vty_out(vty, " number-rewrite %s%s", _nat->num_rewr_name, VTY_NEWLINE); + llist_for_each_entry(lst, &_nat->access_lists, list) { write_acc_lst(vty, lst); } @@ -403,6 +406,25 @@ DEFUN(cfg_nat_acc_lst_name, return CMD_SUCCESS; } +DEFUN(cfg_nat_number_rewrite, + cfg_nat_number_rewrite_cmd, + "number-rewrite FILENAME", + "Set the file with rewriting rules.\n" "Filename") +{ + bsc_replace_string(_nat, &_nat->num_rewr_name, argv[0]); + if (_nat->num_rewr_name) { + if (_nat->num_rewr) + talloc_free(_nat->num_rewr); + _nat->num_rewr = msg_entry_parse(_nat, _nat->num_rewr_name); + return _nat->num_rewr == NULL ? CMD_WARNING : CMD_SUCCESS; + } else { + if (_nat->num_rewr) + talloc_free(_nat->num_rewr); + _nat->num_rewr = NULL; + return CMD_SUCCESS; + } +} + DEFUN(cfg_nat_ussd_lst_name, cfg_nat_ussd_lst_name_cmd, "ussd-list-name NAME", @@ -688,6 +710,9 @@ int bsc_nat_vty_init(struct bsc_nat *nat) install_element(NAT_NODE, &cfg_lst_imsi_deny_cmd); install_element(NAT_NODE, &cfg_lst_no_cmd); + /* number rewriting */ + install_element(NAT_NODE, &cfg_nat_number_rewrite_cmd); + /* BSC subgroups */ install_element(NAT_NODE, &cfg_bsc_cmd); install_node(&bsc_node, config_write_bsc); |