19a4365d0SYoshinobu Inoue#! @LOCALPREFIX@/bin/perl 29a4365d0SYoshinobu Inoue 39a4365d0SYoshinobu Inoueif ($< != 0) { 49a4365d0SYoshinobu Inoue print STDERR "must be root to invoke this\n"; 59a4365d0SYoshinobu Inoue exit 1; 69a4365d0SYoshinobu Inoue} 79a4365d0SYoshinobu Inoue 89a4365d0SYoshinobu Inoue$mode = 'add'; 99a4365d0SYoshinobu Inouewhile ($i = shift @ARGV) { 109a4365d0SYoshinobu Inoue if ($i eq '-d') { 119a4365d0SYoshinobu Inoue $mode = 'delete'; 129a4365d0SYoshinobu Inoue } else { 139a4365d0SYoshinobu Inoue print STDERR "usage: scriptdump [-d]\n"; 149a4365d0SYoshinobu Inoue exit 1; 159a4365d0SYoshinobu Inoue } 169a4365d0SYoshinobu Inoue} 179a4365d0SYoshinobu Inoue 189a4365d0SYoshinobu Inoueopen(IN, "setkey -D |") || die; 199a4365d0SYoshinobu Inoueforeach $_ (<IN>) { 209a4365d0SYoshinobu Inoue if (/^[^\t]/) { 219a4365d0SYoshinobu Inoue ($src, $dst) = split(/\s+/, $_); 223c62e87aSJun-ichiro itojun Hagino } elsif (/^\t(esp|ah) mode=(\S+) spi=(\d+).*reqid=(\d+)/) { 233c62e87aSJun-ichiro itojun Hagino ($proto, $ipsecmode, $spi, $reqid) = ($1, $2, $3, $4); 249a4365d0SYoshinobu Inoue } elsif (/^\tE: (\S+) (.*)/) { 259a4365d0SYoshinobu Inoue $ealgo = $1; 269a4365d0SYoshinobu Inoue $ekey = $2; 279a4365d0SYoshinobu Inoue $ekey =~ s/\s//g; 289a4365d0SYoshinobu Inoue $ekey =~ s/^/0x/g; 299a4365d0SYoshinobu Inoue } elsif (/^\tA: (\S+) (.*)/) { 309a4365d0SYoshinobu Inoue $aalgo = $1; 319a4365d0SYoshinobu Inoue $akey = $2; 329a4365d0SYoshinobu Inoue $akey =~ s/\s//g; 339a4365d0SYoshinobu Inoue $akey =~ s/^/0x/g; 34*232bdaf6SHajimu UMEMOTO } elsif (/^\tseq=(0x\d+) replay=(\d+) flags=(0x\d+) state=/) { 3533841545SHajimu UMEMOTO print "$mode $src $dst $proto $spi"; 36*232bdaf6SHajimu UMEMOTO $replay = $2; 373c62e87aSJun-ichiro itojun Hagino print " -u $reqid" if $reqid; 389a4365d0SYoshinobu Inoue if ($mode eq 'add') { 3933841545SHajimu UMEMOTO print " -m $ipsecmode -r $replay" if $replay; 409a4365d0SYoshinobu Inoue if ($proto eq 'esp') { 419a4365d0SYoshinobu Inoue print " -E $ealgo $ekey" if $ealgo; 429a4365d0SYoshinobu Inoue print " -A $aalgo $akey" if $aalgo; 439a4365d0SYoshinobu Inoue } elsif ($proto eq 'ah') { 449a4365d0SYoshinobu Inoue print " -A $aalgo $akey" if $aalgo; 459a4365d0SYoshinobu Inoue } 469a4365d0SYoshinobu Inoue } 479a4365d0SYoshinobu Inoue print ";\n"; 489a4365d0SYoshinobu Inoue 499a4365d0SYoshinobu Inoue $src = $dst = $upper = $proxy = ''; 509a4365d0SYoshinobu Inoue $ealgo = $ekey = $aalgo = $akey = ''; 519a4365d0SYoshinobu Inoue } 529a4365d0SYoshinobu Inoue} 539a4365d0SYoshinobu Inoueclose(IN); 549a4365d0SYoshinobu Inoue 559a4365d0SYoshinobu Inoueexit 0; 56