File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ipsec-tools / src / setkey / scriptdump.pl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:39:10 2012 UTC (13 years, 4 months ago) by misho
Branches: ipsec-tools, MAIN
CVS tags: v0_8_2p2, v0_8_1p0, v0_8_1, v0_8_0p0, v0_8_0, HEAD
ipsec-tools

    1: #! @LOCALPREFIX@/bin/perl
    2: 
    3: if ($< != 0) {
    4: 	print STDERR "must be root to invoke this\n";
    5: 	exit 1;
    6: }
    7: 
    8: $mode = 'add';
    9: while ($i = shift @ARGV) {
   10: 	if ($i eq '-d') {
   11: 		$mode = 'delete';
   12: 	} else {
   13: 		print STDERR "usage: scriptdump [-d]\n";
   14: 		exit 1;
   15: 	}
   16: }
   17: 
   18: open(IN, "setkey -D |") || die;
   19: foreach $_ (<IN>) {
   20: 	if (/^[^\t]/) {
   21: 		($src, $dst) = split(/\s+/, $_);
   22: 	} elsif (/^\t(esp|ah) mode=(\S+) spi=(\d+).*reqid=(\d+)/) {
   23: 		($proto, $ipsecmode, $spi, $reqid) = ($1, $2, $3, $4);
   24: 	} elsif (/^\tE: (\S+) (.*)/) {
   25: 		$ealgo = $1;
   26: 		$ekey = $2;
   27: 		$ekey =~ s/\s//g;
   28: 		$ekey =~ s/^/0x/g;
   29: 	} elsif (/^\tA: (\S+) (.*)/) {
   30: 		$aalgo = $1;
   31: 		$akey = $2;
   32: 		$akey =~ s/\s//g;
   33: 		$akey =~ s/^/0x/g;
   34: 	} elsif (/^\tseq=(0x\d+) replay=(\d+) flags=(0x\d+) state=/) {
   35: 		print "$mode $src $dst $proto $spi";
   36: 		$replay = $2;
   37: 		print " -u $reqid" if $reqid;
   38: 		if ($mode eq 'add') {
   39: 			print " -m $ipsecmode -r $replay" if $replay;
   40: 			if ($proto eq 'esp') {
   41: 				print " -E $ealgo $ekey" if $ealgo;
   42: 				print " -A $aalgo $akey" if $aalgo;
   43: 			} elsif ($proto eq 'ah') {
   44: 				print " -A $aalgo $akey" if $aalgo;
   45: 			}
   46: 		} 
   47: 		print ";\n";
   48: 
   49: 		$src = $dst = $upper = $proxy = '';
   50: 		$ealgo = $ekey = $aalgo = $akey = '';
   51: 	}
   52: }
   53: close(IN);
   54: 
   55: exit 0;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>