diff options
author | jack9603301 <jack9603301@163.com> | 2020-11-30 20:03:00 +0800 |
---|---|---|
committer | jack9603301 <jack9603301@163.com> | 2021-01-23 21:45:30 +0800 |
commit | b047855b80754d78cab4d3161ad0e97c21f479bc (patch) | |
tree | bde7384faa2f64a5fa3b6ce1e239f21bdaa424ee /src/migration-scripts/nat66/0-to-1 | |
parent | 6baf79a72cac9e6624d56b140511c32fad2cfbaa (diff) | |
download | vyos-1x-b047855b80754d78cab4d3161ad0e97c21f479bc.tar.gz vyos-1x-b047855b80754d78cab4d3161ad0e97c21f479bc.zip |
nptv6: T2518: Initial support for nat66 (NPT)
Diffstat (limited to 'src/migration-scripts/nat66/0-to-1')
-rwxr-xr-x | src/migration-scripts/nat66/0-to-1 | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/migration-scripts/nat66/0-to-1 b/src/migration-scripts/nat66/0-to-1 new file mode 100755 index 000000000..2bc22061d --- /dev/null +++ b/src/migration-scripts/nat66/0-to-1 @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2020 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from sys import argv,exit +from vyos.configtree import ConfigTree + +if (len(argv) < 1): + print("Must specify file name!") + exit(1) + +file_name = argv[1] + +with open(file_name, 'r') as f: + config_file = f.read() + +config = ConfigTree(config_file) + +def merge_npt(config,base,rule): + merge_base = ['nat66','source','rule',rule] + # Configure migration functions + if config.exists(base + ['description']): + tmp = config.return_value(base + ['description']) + config.set(merge_base + ['description'],value=tmp) + + if config.exists(base + ['disable']): + tmp = config.return_value(base + ['disable']) + config.set(merge_base + ['disable'],value=tmp) + + if config.exists(base + ['outbound-interface']): + tmp = config.return_value(base + ['outbound-interface']) + config.set(merge_base + ['outbound-interface'],value=tmp) + + if config.exists(base + ['source','prefix']): + tmp = config.return_value(base + ['source','prefix']) + config.set(merge_base + ['source','prefix'],value=tmp) + + if config.exists(base + ['translation','prefix']): + tmp = config.return_value(base + ['translation','prefix']) + config.set(merge_base + ['translation','prefix'],value=tmp) + + +if not config.exists(['nat']): + # Nothing to do + exit(0) +else: + if not config.exists(['nat', 'nptv6']): + exit(0) + + for rule in config.list_nodes(['nat', 'nptv6', 'rule']): + base = ['nat', 'nptv6', 'rule', rule] + # Merge 'nat nptv6' to 'nat66 source' + merge_npt(config,base,rule) + + # Delete the original NPT configuration + config.delete(['nat','nptv6']); + + try: + with open(file_name, 'w') as f: + f.write(config.to_string()) + except OSError as e: + print("Failed to save the modified config: {}".format(e)) + exit(1) + |