From b718ad397e9edc9311d960a93feb6bc3a5bbb2a7 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 25 Jun 2013 09:08:02 +0200 Subject: nat: Add a no number-rewrite command and call it through a VTY test The test is just testing the invocation but does not verify that the side effect of this call. It is good enought for now. --- openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'openbsc/src/osmo-bsc_nat/bsc_nat_vty.c') diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c index 46dc38e14..6774a420f 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c @@ -1,6 +1,6 @@ /* OpenBSC NAT interface to quagga VTY */ -/* (C) 2010-2012 by Holger Hans Peter Freyther - * (C) 2010-2012 by On-Waves +/* (C) 2010-2013 by Holger Hans Peter Freyther + * (C) 2010-2013 by On-Waves * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -554,6 +554,18 @@ DEFUN(cfg_nat_number_rewrite, &_nat->num_rewr, argv[0]); } +DEFUN(cfg_nat_no_number_rewrite, + cfg_nat_no_number_rewrite_cmd, + "no number-rewrite", + NO_STR "Set the file with rewriting rules.\n") +{ + talloc_free(_nat->num_rewr_name); + _nat->num_rewr_name = NULL; + + bsc_nat_num_rewr_entry_adapt(NULL, &_nat->num_rewr, NULL); + return CMD_SUCCESS; +} + DEFUN(cfg_nat_smsc_addr, cfg_nat_smsc_addr_cmd, "rewrite-smsc addr FILENAME", @@ -1112,6 +1124,7 @@ int bsc_nat_vty_init(struct bsc_nat *nat) /* number rewriting */ install_element(NAT_NODE, &cfg_nat_number_rewrite_cmd); + install_element(NAT_NODE, &cfg_nat_no_number_rewrite_cmd); install_element(NAT_NODE, &cfg_nat_smsc_addr_cmd); install_element(NAT_NODE, &cfg_nat_smsc_tpdest_cmd); install_element(NAT_NODE, &cfg_nat_sms_clear_tpsrr_cmd); -- cgit v1.2.3 From ddf191eafc079cb26e2956a611d59e5235de1798 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 25 Jun 2013 11:44:01 +0200 Subject: nat: Allow to use the prefix lookup to rewrite numbers * Increase the rewritten rule to five digits (this is the easiest for the unit test). This will add another 40kb to the runtime size. * Create a unit test that tests adding and removing the prefix rules. * Use the regexp match to replace from one package --- openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'openbsc/src/osmo-bsc_nat/bsc_nat_vty.c') diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c index 6774a420f..5404bfbba 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -138,6 +139,9 @@ static int config_write_nat(struct vty *vty) if (_nat->sms_num_rewr_name) vty_out(vty, " sms-number-rewrite %s%s", _nat->sms_num_rewr_name, VTY_NEWLINE); + if (_nat->num_rewr_trie_name) + vty_out(vty, " prefix-tree %s%s", + _nat->num_rewr_trie_name, VTY_NEWLINE); llist_for_each_entry(lst, &_nat->access_lists, list) write_acc_lst(vty, lst); @@ -633,6 +637,59 @@ DEFUN(cfg_nat_no_sms_number_rewrite, return CMD_SUCCESS; } +DEFUN(cfg_nat_prefix_trie, + cfg_nat_prefix_trie_cmd, + "prefix-tree FILENAME", + "Prefix tree for number rewriting\n" "File to load\n") +{ + /* give up the old data */ + talloc_free(_nat->num_rewr_trie); + _nat->num_rewr_trie = NULL; + + /* replace the file name */ + bsc_replace_string(_nat, &_nat->num_rewr_trie_name, argv[0]); + if (!_nat->num_rewr_trie_name) { + vty_out(vty, "%% prefix-tree no filename is present.%s", VTY_NEWLINE); + return CMD_WARNING; + } + + _nat->num_rewr_trie = nat_rewrite_parse(_nat, _nat->num_rewr_trie_name); + if (!_nat->num_rewr_trie) { + vty_out(vty, "%% prefix-tree parsing has failed.%s", VTY_NEWLINE); + return CMD_WARNING; + } + + vty_out(vty, "%% prefix-tree loaded %zu rules.%s", + _nat->num_rewr_trie->prefixes, VTY_NEWLINE); + return CMD_SUCCESS; +} + +DEFUN(cfg_nat_no_prefix_trie, cfg_nat_no_prefix_trie_cmd, + "no prefix-tree", + NO_STR "Prefix tree for number rewriting\n") +{ + talloc_free(_nat->num_rewr_trie); + _nat->num_rewr_trie = NULL; + talloc_free(_nat->num_rewr_trie_name); + _nat->num_rewr_trie_name = NULL; + + return CMD_SUCCESS; +} + +DEFUN(show_prefix_tree, show_prefix_tree_cmd, + "show prefix-tree", + SHOW_STR "Prefix tree for number rewriting\n") +{ + if (!_nat->num_rewr_trie) { + vty_out(vty, "%% there is now prefix tree loaded.%s", + VTY_NEWLINE); + return CMD_WARNING; + } + + nat_rewrite_dump_vty(vty, _nat->num_rewr_trie); + return CMD_SUCCESS; +} + DEFUN(cfg_nat_ussd_lst_name, cfg_nat_ussd_lst_name_cmd, "ussd-list-name NAME", @@ -1089,6 +1146,7 @@ int bsc_nat_vty_init(struct bsc_nat *nat) install_element_ve(&show_bsc_mgcp_cmd); install_element_ve(&show_acc_lst_cmd); install_element_ve(&show_bar_lst_cmd); + install_element_ve(&show_prefix_tree_cmd); install_element(ENABLE_NODE, &set_last_endp_cmd); install_element(ENABLE_NODE, &block_new_conn_cmd); @@ -1131,6 +1189,8 @@ int bsc_nat_vty_init(struct bsc_nat *nat) install_element(NAT_NODE, &cfg_nat_no_sms_clear_tpsrr_cmd); install_element(NAT_NODE, &cfg_nat_sms_number_rewrite_cmd); install_element(NAT_NODE, &cfg_nat_no_sms_number_rewrite_cmd); + install_element(NAT_NODE, &cfg_nat_prefix_trie_cmd); + install_element(NAT_NODE, &cfg_nat_no_prefix_trie_cmd); install_element(NAT_NODE, &cfg_nat_pgroup_cmd); install_element(NAT_NODE, &cfg_nat_no_pgroup_cmd); -- cgit v1.2.3 From 67e423c2561a5a08ac7331de2ab264a270b238c9 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 25 Jun 2013 15:38:31 +0200 Subject: nat: Implement a post-routing for the NAT software * The post-routing is applied after the first re-writing. To do this the new number is copied back into the called data structure. * Add a testcase that goes from 0172 to 0049 and then back to 0049 using the post rule with a table lookup. --- openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'openbsc/src/osmo-bsc_nat/bsc_nat_vty.c') diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c index 5404bfbba..0cac79470 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c @@ -127,6 +127,10 @@ static int config_write_nat(struct vty *vty) if (_nat->num_rewr_name) vty_out(vty, " number-rewrite %s%s", _nat->num_rewr_name, VTY_NEWLINE); + if (_nat->num_rewr_post_name) + vty_out(vty, " number-rewrite-post %s%s", + _nat->num_rewr_post_name, VTY_NEWLINE); + if (_nat->smsc_rewr_name) vty_out(vty, " rewrite-smsc addr %s%s", _nat->smsc_rewr_name, VTY_NEWLINE); @@ -570,6 +574,27 @@ DEFUN(cfg_nat_no_number_rewrite, return CMD_SUCCESS; } +DEFUN(cfg_nat_number_rewrite_post, + cfg_nat_number_rewrite_post_cmd, + "number-rewrite-post FILENAME", + "Set the file with post-routing rewriting rules.\n" "Filename") +{ + return replace_rules(_nat, &_nat->num_rewr_post_name, + &_nat->num_rewr_post, argv[0]); +} + +DEFUN(cfg_nat_no_number_rewrite_post, + cfg_nat_no_number_rewrite_post_cmd, + "no number-rewrite-post", + NO_STR "Set the file with post-routing rewriting rules.\n") +{ + talloc_free(_nat->num_rewr_post_name); + _nat->num_rewr_post_name = NULL; + + bsc_nat_num_rewr_entry_adapt(NULL, &_nat->num_rewr_post, NULL); + return CMD_SUCCESS; +} + DEFUN(cfg_nat_smsc_addr, cfg_nat_smsc_addr_cmd, "rewrite-smsc addr FILENAME", @@ -1183,6 +1208,8 @@ int bsc_nat_vty_init(struct bsc_nat *nat) /* number rewriting */ install_element(NAT_NODE, &cfg_nat_number_rewrite_cmd); install_element(NAT_NODE, &cfg_nat_no_number_rewrite_cmd); + install_element(NAT_NODE, &cfg_nat_number_rewrite_post_cmd); + install_element(NAT_NODE, &cfg_nat_no_number_rewrite_post_cmd); install_element(NAT_NODE, &cfg_nat_smsc_addr_cmd); install_element(NAT_NODE, &cfg_nat_smsc_tpdest_cmd); install_element(NAT_NODE, &cfg_nat_sms_clear_tpsrr_cmd); -- cgit v1.2.3