diff options
Diffstat (limited to 'kernel/xpp/utils/migrate_xpp')
-rwxr-xr-x | kernel/xpp/utils/migrate_xpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/kernel/xpp/utils/migrate_xpp b/kernel/xpp/utils/migrate_xpp new file mode 100755 index 0000000..98d45e7 --- /dev/null +++ b/kernel/xpp/utils/migrate_xpp @@ -0,0 +1,102 @@ +#! /usr/bin/perl -w +use strict; +use POSIX; +# +# Migrate the information from XPP_PRI_SETUP variable in +# /etc/sysconig/zaptel or /etc/default/zaptel into the +# modern configuration: +# - pri_protocol defined in /etc/xpp.conf +# - pri_termtype defined in /etc/genconf_parameters +# + +my $conf_rh="/etc/sysconfig/zaptel"; +my $conf_debian="/etc/default/zaptel"; +my $conf; +my $marker = '##'; +my @origlines; +my @lines; + +if (-f "$conf_rh") { + $conf="$conf_rh"; +} elsif (-f "$conf_debian") { + $conf="$conf_debian"; +} else { + warn "$0: No '$conf_rh' and no '$conf_debian'. Skipping"; + exit 0; +} + +print STDERR "$0: Reading old config from '$conf'\n"; +open(F, ". $conf; echo \$XPP_PRI_SETUP |") || die "$0: Failed: $!"; +my $line = <F>; +close F; + +sub write_file($@) { + my $fname = shift; + my @lines = @_; + + open(G, ">$fname.new") || die "$0: Failed opening $fname.new: $!\n"; + print G @lines; + close G; + rename($fname, "$fname.backup") || + die "$0: rename($fname, $fname.backup): $!"; + rename("$fname.new", $fname) || + die "$0: rename($fname.new, $fname): $!"; +} + +my @wordlist = split(/\s+/, $line); +my @spans; +my $global_pri_protocol; +foreach my $w (@wordlist) { + my ($span, $val) = split(/=/, $w); + my ($termtype, $pri_protocol) = split(/,/, $val); + if(! defined $global_pri_protocol) { + $global_pri_protocol = $pri_protocol; + } elsif($global_pri_protocol ne $pri_protocol) { + die "different pri_protocol (E1/T1/J1) in different spans\n"; + } + push(@spans, "$span\t$termtype"); +} + +my $xppconf = '/etc/xpp.conf'; +print STDERR "$0: Updating PRI protocol in $xppconf\n"; +open(F, "$xppconf") || die "$0: Failed opening $xppconf: $!\n"; +@origlines = <F>; +close F; +undef @lines; +foreach (@origlines) { + next if /^#$marker:/; + if(s/^pri_protocol.*/pri_protocol\t$global_pri_protocol/) { + $_ = + "#$marker: Automatically copied from '$conf'\n" . + sprintf("#$marker: On %s", ctime(time)) . + $_; + } + push(@lines, $_); +} +write_file($xppconf, @lines); + +my $genconf = '/etc/genconf_parameters'; +undef @origlines; +undef @lines; +print STDERR "$0: Updating PRI termtypes in '$genconf'\n"; +open(F, "$genconf") || die "$0: Failed opening $genconf: $!\n"; +my $in_termtype_block = 0; +while(<F>) { + next if /^#$marker:/; + next if $in_termtype_block && /^\s+/; + if(/^pri_termtype/) { + $in_termtype_block = 1; + next; + } + push(@lines, $_); +} +close F; +my $pri_termtype = + "#$marker: Automatically copied from '$conf'\n" . + sprintf("#$marker: On %s", ctime(time)) . + "pri_termtype\n"; +foreach my $span (@spans) { + $pri_termtype .= "\t$span\n"; +} +push(@lines, $pri_termtype); +write_file($genconf, @lines); |