File v6eval-3.0.12-linux.patch of Package tahi-linux

diff -urN tahi-linux-3.0.12/bin/autorun/autorun tahi-linux-3.0.12-linux/bin/autorun/autorun
--- tahi-linux-3.0.12/bin/autorun/autorun	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/bin/autorun/autorun	2007-12-10 20:48:56.000000000 +0100
@@ -0,0 +1,1047 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# Yokogawa Electric Corporation,
+# YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
+# All rights reserved.
+# 
+# Redistribution and use of this software in source and binary forms, with 
+# or without modification, are permitted provided that the following 
+# conditions and disclaimer are agreed and accepted by the user:
+# 
+# 1. Redistributions of source code must retain the above copyright 
+# notice, this list of conditions and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright 
+# notice, this list of conditions and the following disclaimer in the 
+# documentation and/or other materials provided with the distribution.
+# 
+# 3. Neither the names of the copyrighters, the name of the project which 
+# is related to this software (hereinafter referred to as "project") nor 
+# the names of the contributors may be used to endorse or promote products 
+# derived from this software without specific prior written permission.
+# 
+# 4. No merchantable use may be permitted without prior written 
+# notification to the copyrighters. However, using this software for the 
+# purpose of testing or evaluating any products including merchantable 
+# products may be permitted without any notification to the copyrighters.
+# 
+# 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
+# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
+# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
+# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+# THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $TAHI: v6eval/bin/autorun/autorun.pl,v 1.32 2004/09/14 06:14:04 akisada Exp $
+
+use Digest::MD5;
+
+use V6evalCommon;
+use File::Basename;
+use Config;
+use Pod::Html;
+
+sub printHeader();
+sub printTitle($);
+sub printINDEX();
+sub printResult();
+sub printFooter();
+sub mkComment(%);
+sub printTableData($;$$);
+sub getStatus($);
+sub execScript($$$$$);
+sub checkPacket($$);
+sub seq2html($$);
+sub insertMD5($);
+sub getDateString();
+sub parseArgs();
+sub printReport();
+sub parseIndex();
+sub makeFrame();
+sub printSummary();
+
+$|=1;
+pathinit();
+parseArgs();
+
+if (-e "index.html" && !$opt_f) {
+	print "Error : Already exist index.html.\n";
+	print "        please run after delete index.html or run with -f option.\n";
+	exit 2;
+}
+
+if($opt_tiny != 0) {
+	if(-e "summary.html" && !$opt_f) {
+		print "Error : Already exist summary.html.\n";
+		print "        please run after delete summary.html or run with -f option.\n";
+		exit 2;
+	}
+
+	if(-e "report.html" && !$opt_f) {
+		print "Error : Already exist report.html.\n";
+		print "        please run after delete report.html or run with -f option.\n";
+		exit 2;
+	}
+}
+
+$SIG{INT} = sub {exit 2;};
+
+# get signal name & number
+my %sig_num;
+my @sig_name;
+unless($Config{sig_name} && $Config{sig_num}) {
+	die "No sigs?";
+} else {
+	my @names = split ' ', $Config{sig_name};
+	my @num = split ' ', $Config{sig_num};
+	@sig_num{@names} = @num;
+	foreach (@names) {
+		$sig_name[$sig_num{$_}] ||= $_;
+	}
+}
+
+# get tool & test version
+my $dummy;
+($dummy,$VERTOOLS) = ('$Name: REL_3_0_12 $' =~ /\$(Name): (.*) \$/ );
+$VERTOOLS='undefined' if(!$VERTOOLS);
+
+$StartTime=getDateString();
+@INDEX=@ARGV;
+
+parseIndex();
+
+my $num;
+for($num=1;$status[$num]{type};$num++) {
+	local (*current)=$status[$num];
+	next if($current{type} ne "DO");
+	my $rc;
+	if($dochk){
+		print "===== Check $current{packet} =====\n";
+		$rc=checkPacket($current{packet},$current{opt});
+		$statusStr=getStatus($rc);
+		$statusStr =~ s/<.*?>//g;
+		print "  -> $statusStr\n";
+	}
+	last if(($rc>>8) == 64 || $rc == $sig_num{INT});
+
+	if($dogen){
+		print "== Generate HTML Document from $current{script} ==\n";
+		$rc=seq2html($current{script}, $current{doc});
+		$current{status}=0;
+		$current{type}="DOTEST";
+	}
+	last if(($rc>>8) == 64 || $rc == $sig_num{INT});
+
+	if($dotest){
+		if($opt_tiny != 0) {
+			makeFrame();
+			printSummary();
+		}
+
+		printReport();
+		print "========== TEST $current{number} ==========\n";
+		$rc=execScript( $current{script},
+				$current{packet},
+				$current{opt},
+				$current{log},
+				$current{desc});
+		$current{status}=$rc;
+		$current{type}="DOTEST";
+		$statusStr=getStatus($rc);
+		$statusStr =~ s/<.*?>//g;
+		print "  -> $statusStr\n";
+	}
+	last if(($rc>>8) == 64 || $rc == $sig_num{INT});
+}
+
+$EndTime=getDateString();
+0;
+
+END {
+	if($mkindex) {
+		if($opt_tiny != 0) {
+			makeFrame();
+			printSummary();
+		}
+
+		printReport()
+	}
+
+	if($dogen){
+		unlink("pod2html-dircache");
+		unlink("pod2html-itemcache");
+	}
+}
+
+sub parseIndex(){
+	my $testnum=1;
+	my $num;
+	for($num=1;<>;$num++) {
+		chomp;
+		$status[$num]{type}="";
+		local (*current)=$status[$num];
+		#print "$num($testnum) -- $_\n";
+		$VERTESTS = $2 if( /\$(Name): (.*) \$/ );
+		if(/^\s*$/ || /^#/) {       # remove comment
+			$current{type}="COMMENT";
+			next;
+		}
+
+		if(/^&print:(.*)/){ # print comment
+			$current{type}="PRINT";
+			$current{strings}="$1";
+			next;
+		}
+
+		if(/^&pause:(.*)/){ # make pause
+			$current{type}="PAUSE";
+			$current{strings}="$1";
+			next;
+		}
+
+		if($StartNum > $testnum || $testnum > $EndNum || /^&\#/ ) {
+			s/^&\#//;
+			$current{type}="SKIP";
+			$current{status}= 73 << 8;
+			$skip ++;
+		}
+		else {
+			$current{type}="DO";
+			$current{status}= 72 << 8;
+		}
+
+		my ($script,$packet,$opt,$doc,$desc,$links) = split ':';
+		($script) = ( $script =~ /^\s*(\S*)\s*$/  );
+		($packet) = ( $packet =~ /^\s*(\S*)\s*$/  );
+		($doc)    = ( $doc    =~ /^\s*(\S*)\s*$/  );
+		($desc)   = ( $desc   =~ /^\s*(.*\S)\s*$/ );
+		($links)  = ( $links  =~ /^\s*(\S*)\s*$/  );
+		my ($SeqName,$SeqDir,$SeqSuffix) = fileparse($script,'.seq');
+		$desc||=$SeqName;
+		$current{number}=$testnum;
+		$current{script}=$script;
+		$current{packet}=$packet;
+		$current{opt}=$opt;
+		$current{log}="$testnum.html";
+		$current{desc}=$desc;
+		$current{SeqName}=$SeqName;
+		$current{SeqDir}=$SeqDir;
+		$current{doc}=$doc;
+		$current{links}=$links ? $links : 1;
+		$testnum++;
+		$total ++;
+	}
+	$VERTESTS = "undefined" if(!$VERTESTS);
+}
+
+
+#
+# Generate Report Index
+#
+sub printReport() {
+	if($opt_tiny != 0) {
+		open LOG ,">report.html";    
+	} else {
+		open LOG ,">index.html";    
+	}
+
+	printHeader();
+
+	if($opt_tiny == 0) {
+		printTitle(LOG);
+		#sub printINDEX();
+		print LOG "<HR>\n";
+	}
+
+	printResult();
+	printFooter();
+	close LOG;
+
+	insertMD5($opt_tiny ? "report.html" : "index.html");
+
+	return;
+}
+
+sub printHeader() {
+if($opt_profile) {
+    print LOG <<ECHO;
+<HTML>
+<HEAD>
+<TITLE>IPv6 Test Specification</TITLE>
+<META NAME="GENERATOR" CONTENT="TAHI IPv6 Conformance Test Suite">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+ECHO
+} else {
+    print LOG <<ECHO;
+<HTML>
+<HEAD>
+<TITLE>$Title</TITLE>
+<META NAME="GENERATOR" CONTENT="TAHI IPv6 Conformance Test Suite">
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+ECHO
+}
+}
+
+sub printTitle($){
+	my($fd) = @_;
+
+	if($opt_tiny != 0) {
+	if($opt_profile) {
+	print $fd <<ECHO;
+<CENTER>
+<H1>$Title</H1>
+</CENTER>
+ECHO
+	} else {	# if($opt_profile)
+	print $fd <<ECHO;
+<CENTER>
+<H1>$Title</H1>
+</CENTER>
+<HR>
+<TABLE>
+<TR><TD>Tool Version</TD><TD>:</TD><TD>$VERTOOLS</TD></TR>
+<TR><TD>Test Program Version</TD><TD>:</TD><TD>$VERTESTS</TD></TR>
+</TABLE>
+<HR>
+<TABLE>
+<TR><TD>Start</TD><TD>:</TD><TD>$StartTime</TD></TR>
+<TR><TD>End</TD><TD>:</TD><TD>$EndTime</TD></TR>
+</TABLE>
+ECHO
+	}		# if($opt_profile)
+	} else {
+	if($opt_profile) {
+	print $fd <<ECHO;
+<CENTER>
+<H1>$Title</H1>
+ECHO
+	} else {	# if($opt_profile)
+	print $fd <<ECHO;
+<CENTER>
+<H1>$Title</H1>
+<HR>
+<TABLE BORDER=0>
+<TR><TD>Tool Version :</TD><TD>$VERTOOLS</TD></TR>
+<TR><TD>Test Program Version :</TD><TD>$VERTESTS</TD></TR>
+</TABLE>
+<HR>
+<TABLE BORDER=0>
+<TR><TD>Start:</TD><TD>$StartTime</TD></TR>
+<TR><TD>End :</TD><TD>$EndTime</TD></TR>
+</TABLE>
+<HR>
+ECHO
+	}		# if($opt_profile)
+	}
+}
+
+sub printINDEX(){
+	#
+	# Output Test Report Index
+	#
+	print LOG "INDEX: ";
+	foreach(@INDEX) {
+		print LOG "<A HREF=\"$_\">$_</A> ";
+	}
+}
+
+sub printResult(){
+	#
+	# print result table
+	#
+
+	my @color = ('#EEEEEE', '#DDDDDD');
+	my $flag = 0;
+ 
+	if($opt_tiny != 0) {
+		print LOG "<CENTER>";
+	}
+
+	if($opt_tiny) {
+		if($opt_profile) {
+			print LOG <<ECHO;
+<TABLE WIDTH="100%" BORDER=1>
+<TR BGCOLOR=\"#CCCCCC\">
+<TH>No.</TH><TH>Title</TH>
+ECHO
+		} else {
+			print LOG <<ECHO;
+<TABLE BORDER=1>
+<TR BGCOLOR=\"#CCCCCC\">
+<TH>No.</TH><TH>Title</TH>
+<TH>Result</TH><TH>Log</TH><TH>Script</TH><TH>Packet</TH><TH>Dump<BR>(bin)</TH>
+ECHO
+		}
+	} else {
+		if($opt_profile) {
+			print LOG <<ECHO;
+<TABLE WIDTH="100%" BORDER=1>
+<TR>
+<TH>No.</TH><TH>Title</TH>
+ECHO
+		} else {
+			print LOG <<ECHO;
+<TABLE BORDER=1>
+<TR>
+<TH>No.</TH><TH>Title</TH>
+<TH>Result</TH><TH>Log</TH><TH>Script</TH><TH>Packet</TH><TH>Dump<BR>(bin)</TH>
+ECHO
+		}
+	}
+
+	unless($opt_profile) {
+		print LOG "<TH>Dump<BR>(txt)</TH>" if $opt_dump2txt;
+	}
+
+	print LOG "</TR>\n";
+	my $num;
+	for($num=1;$status[$num]{type};$num++) {
+		local (*current)=$status[$num];
+		if ($current{type} eq "DOTEST" || $current{type} eq "DO" ) {
+			if($opt_tiny != 0) {
+				print LOG "<TR BGCOLOR=\"@color[$flag]\">\n";
+
+				if($flag != 0) {
+					$flag = 0;
+				} else {
+					$flag = 1;
+				}
+			} else {
+				print LOG "<TR>\n";
+			}
+
+			$htmldoc = $current{doc} ? $current{doc} :
+					"$current{SeqDir}$current{SeqName}.html";
+			$htmldoc = "" if(! -r $htmldoc);
+			printTableData("$current{number}");
+			printTableData("$current{desc}",$htmldoc);
+
+			unless($opt_profile) {
+			$statusStr=getStatus($current{status});
+			if(($current{status} == 3 << 8 || $current{status} == 32 << 8) && !$opt_F){
+				mkComment(\%current);
+				$statusStr.= ", <A HREF=\"$current{number}.comment.html\">Why</A>";
+			}
+			if($opt_nolcna) {
+				#printTableData("-","","ALIGN=\"CENTER\"");
+				printTableData("<FONT COLOR=\"#00FF00\">Not support LCNA<FONT>","","ALIGN=\"CENTER\"");
+			} elsif($opt_onlylcna) {
+				#printTableData("-","","ALIGN=\"CENTER\"");
+				printTableData("<FONT COLOR=\"#00FF00\">Support only LCNA<FONT>","","ALIGN=\"CENTER\"");
+			} else {
+				printTableData("$statusStr","","ALIGN=\"CENTER\"");
+			}
+			if($mklink) {
+			    printTableData("X","$current{log}","ALIGN=\"CENTER\"");
+			} else {
+			    printTableData("-","","ALIGN=\"CENTER\"");
+			}
+			printTableData("X","$current{script}","ALIGN=\"CENTER\"");
+			if($current{packet} =~ /^\//){
+				printTableData("-","","ALIGN=\"CENTER\"");
+			}else {
+				printTableData("X","$current{packet}","ALIGN=\"CENTER\"");
+			}
+			undef $dumplink;
+			undef $dumplinktxt;
+			if($mklink) {
+			    for($i=0;$i<$current{links};$i++) {
+				$dumplink    .= "<A HREF=\"$current{log}.Link$i.dump\">Link$i</A> ";
+				$dumplinktxt .= "<A HREF=\"$current{log}.Link$i.dump.txt\">Link$i</A> ";
+			    }
+			    printTableData("$dumplink","","ALIGN=\"CENTER\"");
+			    printTableData("$dumplinktxt","","ALIGN=\"CENTER\"") if $opt_dump2txt;
+			} else {
+			    printTableData("-","","ALIGN=\"CENTER\"");
+			    printTableData("-","","ALIGN=\"CENTER\"") if $opt_dump2txt;
+			}
+			}	# unless($opt_profile)
+
+			print LOG "</TR>\n";
+		}
+		elsif ($current{type} eq "SKIP" ) {
+			if($opt_tiny != 0) {
+				print LOG "<TR BGCOLOR=\"@color[$flag]\">\n";
+
+				if($flag != 0) {
+					$flag = 0;
+				} else {
+					$flag = 1;
+				}
+			} else {
+				print LOG "<TR>\n";
+			}
+
+			$htmldoc = $current{doc} ? $current{doc} :
+					"$current{SeqDir}$current{SeqName}.html";
+			$htmldoc = "" if(! -r $htmldoc);
+			printTableData("$current{number}");
+			printTableData("$current{desc}",$htmldoc);
+
+			unless($opt_profile) {
+			$statusStr=getStatus($current{status});
+			printTableData("$statusStr","","ALIGN=\"CENTER\"");
+			printTableData("-","","ALIGN=\"CENTER\"");
+			printTableData("X","$current{script}","ALIGN=\"CENTER\"");
+			if($current{packet} =~ /^\//){
+				printTableData("-","","ALIGN=\"CENTER\"");
+			}else {
+				printTableData("X","$current{packet}","ALIGN=\"CENTER\"");
+			}
+			printTableData("-","","ALIGN=\"CENTER\"");
+			printTableData("-","","ALIGN=\"CENTER\"") if $opt_dump2txt;
+			}	# unless($opt_profile)
+
+			print LOG "</TR>\n";
+		}
+		elsif ($status[$num]{type} eq "PRINT") {
+			print LOG "<TR>";
+			printTableData("<BR>");
+			printTableData("$current{strings}");
+			unless($opt_profile) {
+			printTableData("<BR>");
+			printTableData("<BR>");
+			printTableData("<BR>");
+			printTableData("<BR>");
+			printTableData("<BR>");
+			printTableData("<BR>") if $opt_dump2txt;
+			}
+			print LOG "</TR>\n";
+		}
+		elsif ($status[$num]{type} eq "PAUSE") {
+		        print STDERR ($current{strings}=~/^\s*$/ ?
+				      "Hit [enter] key " : $current{strings});
+			<STDIN>;
+		}
+	}
+
+	print LOG "</TABLE>\n";
+	print LOG "</CENTER>\n";
+}
+
+sub printFooter() {
+	if(($opt_tiny != 0) || ($opt_nofooter)) {
+		print LOG "</BODY>\n";
+		print LOG "</HTML>\n";
+	} else {
+		if(-e ".footer") {
+			print LOG "<HR>\n";
+			open FOOTER, ".footer" or die;
+			while(<FOOTER>){
+			    print LOG $_;
+			}
+			close FOOTER;
+		}
+
+		if($opt_profile) {
+		print LOG <<ECHO;
+<HR>
+</BODY>
+</HTML>
+ECHO
+		} else {
+		print LOG <<ECHO;
+<HR>
+This Report was generated by
+<A HREF=\"http://www.tahi.org/\">TAHI</A> IPv6 Conformance Test Suite
+</BODY>
+</HTML>
+ECHO
+		}
+	}
+}
+
+sub mkComment(%) { local (
+	*status
+    ) = @_;
+
+	my $htmldoc = $status{doc} ? $status{doc}: "$status{SeqDir}$status{SeqName}.html";
+	$htmldoc = "" if(! -r $htmldoc);
+
+	my $pktlink= "<A HREF=\"$status{packet}\">X</A>";
+	$pktlink = "-" if($status{packet} =~ /^\//);
+	$pktlink = "<A HREF=\"packet.def\">X</A>" if($status{packet} eq "");
+
+	undef $dumplink;
+	undef $dumplinktxt;
+	for($i=0;$i<$status{links};$i++) {
+		$dumplink    .= "<A HREF=\"$status{log}.Link$i.dump\">Link$i</A> ";
+		$dumplinktxt .= "<A HREF=\"$status{log}.Link$i.dump.txt\">Link$i</A> ";
+	}
+
+	$statusStr=getStatus($status{status});
+
+	open COMMENT, ">$status{number}.comment.html" or die;
+	print COMMENT <<ECHO;
+<HTML>
+<HEAD>
+<TITLE>Comments about the test</TITLE>
+</HEAD>
+<BODY BGCOLOR=\"#FFFFFF\">
+<CENTER><H1>Comments about the test</H1></CENTER>
+
+<TABLE BORDER=1>
+<TR>
+  <TH>No.</TH>
+  <TH>Title</TH>
+  <TH>Result</TH>
+  <TH>Log</TH>
+  <TH>Script</TH>
+  <TH>Packet</TH>
+  <TH>Dump<BR>(bin)</TH>
+  <TH>Dump<BR>(txt)</TH>
+</TR>
+
+<TR>
+  <TD>$status{number}</TD>
+  <TD><A HREF=\"$htmldoc\">$status{desc}</A></TD>
+  <TD ALIGN=\"CENTER\">$statusStr</TD>
+  <TD ALIGN=\"CENTER\"><A HREF=\"$status{log}\">X</A></TD>
+  <TD ALIGN=\"CENTER\"><A HREF=\"$status{script}\">X</A></TD>
+  <TD ALIGN=\"CENTER\">$pktlink</TD>
+  <TD ALIGN=\"CENTER\">$dumplink</TD>
+  <TD ALIGN=\"CENTER\">$dumplinktxt</TD>
+</TR>
+</TABLE>
+
+<H2>Category</H2>
+
+<H2>Commentaries</H2>
+<P><FONT COLOR=\"#FF0000\"> Now analyzing.</FONT>
+
+<H2>References</H2>
+
+<H2>Notes</H2>
+
+<H2>Implementors information</H2>
+
+<HR>
+<A HREF="mailto:contact\@tahi.org">contact\@tahi.org</A>
+</BODY>
+</HTML>
+ECHO
+	close COMMENT;
+}
+
+sub printTableData($;$$) { my (
+	$desc,
+	$link,
+	$td_opt
+    ) = @_;
+	$td_opt = " $td_opt" if $td_opt;
+	print LOG "<TD$td_opt>";
+	print LOG "<A HREF=\"$link\">" if $link;
+	print LOG "$desc";
+	print LOG "</A>" if $link;
+	print LOG "</TD>";
+}
+
+sub getStatus($) { my (
+	$status
+    ) = @_;
+	$result{0}="PASS";
+	if(!$dotest){
+		$result{1}="error";
+		if(($opt_nolcna) || ($opt_onlylcna)) {
+			$result{73}="<FONT COLOR=\"#AAAAAA\">SKIP</FONT>";
+		}
+	} else {
+		$result{1} ="-";
+		$result{2} ="<FONT COLOR=\"#00FF00\">Not yet supported</FONT>";
+		$result{3} ="<FONT COLOR=\"#00FF00\">WARN</FONT>";
+		$result{4} ="<FONT COLOR=\"#00FF00\">Host Only<FONT>";
+		$result{5} ="<FONT COLOR=\"#00FF00\">Router Only</FONT>";
+		$result{6} ="<FONT COLOR=\"#00FF00\">Special Only</FONT>";
+		$result{7} ="<FONT COLOR=\"#00FF00\">Except Host<FONT>";
+		$result{8} ="<FONT COLOR=\"#00FF00\">Except Router</FONT>";
+		$result{9} ="<FONT COLOR=\"#00FF00\">Except Special</FONT>";
+		$result{10}="<FONT COLOR=\"#AAAAAA\">SKIP</FONT>";
+		$result{11}="<FONT COLOR=\"#00FF00\">Type Mismatch</FONT>";
+		$result{32}="<FONT COLOR=\"#FF0000\">FAIL</FONT>";
+		$result{33}="<FONT COLOR=\"#FF0000\">Initialization Fail</FONT>";
+		$result{34}="<FONT COLOR=\"#FF0000\">Cleanup Fail</FONT>";
+		$result{64}="<FONT COLOR=\"#FF0000\">internal error</FONT>";
+		$result{72}="TBD";
+		$result{73}="<FONT COLOR=\"#AAAAAA\">SKIP</FONT>";
+	}
+	my $rc="internal error";
+		   
+	if ($status == 0){
+		$rc=$result{0};
+	}
+	elsif ($status == 0xff00){
+		$rc = "no test sequence";
+	}
+	elsif ($status  > 0x80){
+		my $err = $status >> 8;
+		$rc = $result{$err} ||
+		      "<FONT COLOR=\"#FF0000\">FAIL ($err)</FONT>";
+	}
+	elsif ($status < 0x80) {
+		$rc = "<FONT COLOR=\"#FF0000\">SIGNAL ($status)</FONT>";
+	}
+	$rc;
+}
+
+sub execScript($$$$$) { my (
+	$script,
+	$packet,
+	$opt,
+	$log,
+	$desc  
+    ) = @_;
+	my $cmd= $script;
+	$cmd.=" -pkt $packet" if $packet;
+	$cmd.=" $opt" if $opt;
+	$cmd.=" -log $log" if $log;
+	$cmd.=" -ti \"$desc\"" if $desc;
+	print "$cmd\n";
+	$rc = system($cmd);
+	$rc;
+}
+
+sub checkPacket($$) { my (
+	$packet,
+	$opt
+    ) = @_;
+	my $cmd=searchPath($V6EVALBIN, "pktlint") || "pktlint";
+	$cmd.=" -pkt $packet" if $packet;
+	$cmd.=" $opt" if $opt;
+	$cmd.=" -log /dev/null";
+	$rc = 0xffff & system($cmd);
+	$rc;
+}
+
+sub seq2html($$) { my (
+	$script,
+	$doc
+    ) = @_;
+	my $rc;
+	my ($SeqName,$SeqDir,$SeqSuffix) = fileparse($script,'.seq');
+	my $outfile= $doc ? $doc : "${SeqDir}${SeqName}.html";
+	if(-f $outfile && !$opt_f) {
+		print "$outfile: Already exist\n";
+		return 0;
+	}
+	$rc=pod2html(
+		     "--infile=$script",
+		     "--outfile=$outfile",
+		     "--noindex");
+	if($rc == 0 && !-r $outfile) {
+		print "warning : manual part is not included in $script .\n";
+	}
+	$rc;
+}
+
+
+
+#--------------------------------------------------------------#
+# void insertMD5(char **, char *);                             #
+#--------------------------------------------------------------#
+sub
+insertMD5($) {
+	my($log) = @_;
+
+	local(*LOG);
+
+	unless(open(LOG, $log)) {
+		return;
+	}
+
+	my $ctx = Digest::MD5->new;
+
+	$ctx->addfile(*LOG);
+
+	my $digest = $ctx->hexdigest;
+
+	close(LOG);
+
+	unless(open(LOG, ">> $log")) {
+		return;
+	}
+
+	print LOG "<!-- $digest -->\n";
+
+	close(LOG);
+
+	return;
+}
+
+sub getDateString() {
+	my ($sec,$min,$hour,$day,$mon,$year) = localtime;
+	my $datestr = sprintf '%04d/%02d/%02d %02d:%02d:%02d',
+			$year+1900, $mon+1, $day, $hour, $min, $sec;
+	$datestr;
+}
+
+
+
+#
+# make frame
+#
+################################################################
+sub makeFrame() {
+	open(FRAME ,">index.html");
+
+	print FRAME "<HTML>\n";
+	print FRAME "<HEAD>\n";
+
+	if($opt_profile) {
+		print FRAME "<TITLE>IPv6 Test Specification</TITLE>\n";
+	} else {
+		print FRAME "<TITLE>$Title</TITLE>\n";
+	}
+
+	print FRAME "</HEAD>\n";
+	print FRAME "<FRAMESET COLS=\"30%,70%\">\n";
+	print FRAME "<FRAME SRC=\"summary.html\">\n";
+	print FRAME "<FRAME SRC=\"report.html\">\n";
+	print FRAME "</FRAMESET>\n";
+	print FRAME "</HTML>\n";
+
+	close(FRAME);
+
+	insertMD5("index.html");
+
+	return;
+}
+
+
+
+#
+# print summary.html
+#
+################################################################
+sub printSummary() {
+	my $total = 0;
+	my $tbd = 0;
+	my $skip = 0;
+	my $pass = 0;
+	my $fail = 0;
+	my $warn = 0;
+	my $na = 0;
+
+	open(SUMMARY ,">summary.html");
+
+	print SUMMARY "<HTML>\n";
+	print SUMMARY "<HEAD>\n";
+
+	if($opt_profile) {
+		print SUMMARY "<TITLE>IPv6 Test Specification</TITLE>\n";
+	} else {
+		print SUMMARY "<TITLE>$Title</TITLE>\n";
+	}
+
+	print SUMMARY "</HEAD>\n";
+	print SUMMARY "<BODY BGCOLOR=\"#FFFFFF\">\n";
+
+	printTitle(SUMMARY);
+
+	print SUMMARY "<HR>\n";
+
+	for(my $d = 1; $status[$d]{type}; $d ++) {
+		if($status[$d]{type} eq "DO" ) {
+			$tbd ++;
+			$total ++;
+			next;
+		}
+
+		if($status[$d]{type} eq "DOTEST") {
+			my $s = $status[$d]{status};
+
+			if($s == 0) {
+				if(($opt_nolcna) || ($opt_onlylcna)) {
+					$na ++;
+				} else {
+					$pass ++;
+				}
+			} elsif($s > 0x80) {
+				my $err = $s >> 8;
+
+				if($err == 3) {
+					$warn ++;
+				} elsif($err == 32) {
+					$fail ++;
+				} else {
+					$na ++;
+				}
+			} else {
+				$na ++;
+			}
+
+			$total ++;
+			next;
+		}
+
+		if($status[$d]{type} eq "SKIP") {
+			$skip ++;
+			$total ++;
+			next;
+		}
+	}
+
+	print SUMMARY "Test Results\n";
+	print SUMMARY "<BLOCKQUOTE>\n";
+	print SUMMARY "<TABLE>\n";
+	print SUMMARY "<TR><TD><B>TOTAL</B></TD><TD>:</TD><TD>$total</TD></TR>\n";
+	print SUMMARY "<TR><TD><B>PASS</B></TD><TD>:</TD><TD>$pass</TD></TR>\n";
+	print SUMMARY "<TR><TD><B><FONT COLOR=\"#FF0000\">FAIL</FONT></B></TD><TD>:</TD><TD>$fail</TD></TR>\n";
+	print SUMMARY "<TR><TD><B><FONT COLOR=\"#00FF00\">WARN</FONT></B></TD><TD>:</TD><TD>$warn</TD></TR>\n";
+	print SUMMARY "<TR><TD><B><FONT COLOR=\"#AAAAAA\">SKIP</FONT></B></TD><TD>:</TD><TD>$skip</TD></TR>\n";
+	print SUMMARY "<TR><TD><B>N/A</B></TD><TD>:</TD><TD>$na</TD></TR>\n";
+
+	if($tbd != 0) {
+		print SUMMARY "<TR><TD><B>TBD</B></TD><TD>:</TD><TD>$tbd</TD></TR>\n";
+	}
+
+	print SUMMARY "</TABLE>\n";
+	print SUMMARY "</BLOCKQUOTE>\n";
+
+	print SUMMARY "<HR>\n";
+
+	if(-e ".footer") {
+		if(defined(open(FOOTER, ".footer"))) {
+			while(<FOOTER>){
+				my $str = $_;
+				$str =~ s/<A /<A TARGET="_top" /;
+
+				print SUMMARY $str;
+			}
+
+			close FOOTER;
+		}
+	}
+
+	print SUMMARY "<HR>\n";
+
+	print SUMMARY "This Report was generated by<BR>\n";
+	print SUMMARY "<A HREF=\"http://www.tahi.org/\">TAHI</A> IPv6 Conformance Test Suite<BR>\n";
+
+	print SUMMARY "</BODY>\n";
+	print SUMMARY "</HTML>\n";
+
+	close(SUMMARY);
+
+	insertMD5("summary.html");
+
+	return;
+}
+
+########################################################################
+#	parse Args
+#
+#	Getopt::Long module is used for argument parse
+#-----------------------------------------------------------------------
+sub parseArgs() {
+	use Getopt::Long;
+	$Getopt::Long::ignorecase=undef;
+	my $optStat = GetOptions(
+		"t|TestMode!",
+		"g|GenerateMode!",
+		"G|GenerateMode2!",
+		"s|Start=s",
+		"e|End=s",
+		"f!",
+		"title=s",
+		"dump2txt!",
+		"F!",
+		"nolcna",
+		"onlylcna",
+		"tiny",
+		"profile",
+		"nofooter",
+	);
+	                  $dotest=1; $dochk=0; $dogen=0; $mkindex=1; $mklink=1;
+	if($opt_profile) {
+		$dotest=0;
+		$dogen=1;
+	}
+
+	if($opt_t)      { $dotest=0; $dochk=1;           $mkindex=0;}
+	if($opt_g)      { $dotest=0;           $dogen=1;}
+	if($opt_G)      { $dotest=0;           $dogen=1;             $mklink=0}
+	if($opt_nolcna) { $dotest=0;           $dogen=1;             $mklink=0}
+	if($opt_onlylcna) { $dotest=0;           $dogen=1;             $mklink=0}
+	$StartNum= $opt_s ? $opt_s : 0;
+	$EndNum= $opt_e ? $opt_e : 0xffff; # xxx
+	if($StartNum > $EndNum) {
+		print "Start Test Number greater than End Test Number\n";
+		exit 1;
+	}
+	$Title= $opt_title ? $opt_title : "IPv6 Conformance Test";
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+B<autorun> - run all Conformance Test Script in INDEX.
+
+=head1 SYNOPSIS
+
+B<autorun> [C<-t>] [C<-g>|C<-G>] [C<-f>] [I<INDEX> ...]
+
+=head1 DESCRIPTION
+
+B<autorun> run Test Script by order in INDEX file.
+
+The options are as follows:
+
+=over 1
+
+=item -t
+Check Packet Definition syntax.
+
+=item -g
+Genarate HTML document from test sequence file.
+
+=item -G
+This option is same as -g option except
+not generating links of log and tcpdump.
+
+=item -f
+Force to generate index.html even if the file already exists.
+
+=item -F
+Not generate "Why link".
+
+=back 1
+
+=head2 INDEX file format
+
+This file specify how to run tests. This file has the following
+format :
+
+    Empty lines and lines starting with '#' are comments.
+
+    Each line five field separated ':'. the fields are :
+
+       1'st field specify test sequence script.
+
+       2'nd field specify packet definition file.
+
+       3'rd field specify option for test script.
+
+       4'th field specify HTML document if you use insted of auto
+       generate document from test script specified 1st field.
+
+       5'th field specify test name.
+
+       6'th field specify # of used Links.
+
+=head1 OUTPUT
+
+B<autorun> output index.html. It is result of tests, you can see
+the result report by Web Browser.
diff -urN tahi-linux-3.0.12/bin/autorun/Makefile tahi-linux-3.0.12-linux/bin/autorun/Makefile
--- tahi-linux-3.0.12/bin/autorun/Makefile	2000-08-02 16:42:33.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/autorun/Makefile	2007-12-10 20:30:38.000000000 +0100
@@ -2,6 +2,7 @@
 beforeinstall:
 	${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
 		${.CURDIR}/autorun.pl ${DESTDIR}${BINDIR}/autorun
-
-.include <bsd.prog.mk>
+all:
+	cp autorun.pl autorun
+# .include <bsd.prog.mk>
 
Dateien tahi-linux-3.0.12/bin/checker/checker und tahi-linux-3.0.12-linux/bin/checker/checker sind verschieden.
diff -urN tahi-linux-3.0.12/bin/checker/Makefile tahi-linux-3.0.12-linux/bin/checker/Makefile
--- tahi-linux-3.0.12/bin/checker/Makefile	2006-08-31 03:57:53.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/checker/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,14 +1,21 @@
-CXXFLAGS+=	-I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
-LDFLAGS+=	-L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
-LDADD+=	-lPkt -lPz -lCm -lcrypto
-SRCS=	checker.cc 
-PROG_CXX=	$(SRCS:.cc=)
-PROG=	${PROG_CXX}
-NOMAN=
-NO_MAN=
-CLEANFILES+=	.depend
-
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+CC=c++
+Cm=../../lib/Cm/
+Pz=../../lib/Pz/
+pkt=../../lib/pkt/
+CXXFLAGS+= -I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
+LDFLAGS += -L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
+LDADD   += -lPkt -lPz -lPz2 -lCm -lcrypto
+SRCS	= checker.cc 
+PROG_CXX= $(SRCS:.cc=)
+PROG	= ${PROG_CXX}
+NOMAN	=
+NO_MAN	=
 
+# .include "../Makefile.inc"
+# .include "bsd.prog.mk"
 $(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
+all:
+	$(CC) $(SRCS) -o checker $(LDADD) $(CXXFLAGS) $(LDFLAGS) -fno-strict-aliasing -pipe -g -Wall -Woverloaded-virtual
+
+clean:
+	- rm checker
Dateien tahi-linux-3.0.12/bin/dhcomp/dhcomp und tahi-linux-3.0.12-linux/bin/dhcomp/dhcomp sind verschieden.
diff -urN tahi-linux-3.0.12/bin/dhcomp/Makefile tahi-linux-3.0.12-linux/bin/dhcomp/Makefile
--- tahi-linux-3.0.12/bin/dhcomp/Makefile	2006-08-31 03:57:53.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/dhcomp/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -40,20 +40,28 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 # THE POSSIBILITY OF SUCH DAMAGE.
 #
-# $TAHI: v6eval/bin/dhcomp/Makefile,v 1.5 2006/08/31 01:57:53 akisada Exp $
+# $TAHI: v6eval/bin/dhcomp/Makefile,v 1.4 2005/05/09 09:35:21 akisada Exp $
 #
 ######################################################################
 
-CXXFLAGS+=	-I/usr/local/include
-CXXFLAGS+=	-DTAHI
-LDFLAGS +=	-L/usr/local/lib
-LDADD+=	-lcrypto
-SRCS=	dhcomp.cc 
-PROG_CXX=	$(SRCS:.cc=)
-PROG=	${PROG_CXX}
-NOMAN=
-NO_MAN=
-CLEANFILES+=	.depend
+CC = c++
+CXXFLAGS+= -I/usr/local/include
+CXXFLAGS+= -DTAHI
+LDFLAGS += -L/usr/local/lib
+LDADD   += -lcrypto
+SRCS	= dhcomp.cc 
+PROG_CXX	= $(SRCS:.cc=)
+PROG	= ${PROG_CXX}
+NOMAN	=
+NO_MAN	=
+
+# .include "../Makefile.inc"
+# .include "bsd.prog.mk"
+all:    dhcomp
+
+dhcomp:
+	$(CC) $(CXXFLAGS) $(LDADD) $(LDFLAGS) $(SRCS) -o $(PROG) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:
+	- rm dhcomp
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
Dateien tahi-linux-3.0.12/bin/dhgen/dhgen und tahi-linux-3.0.12-linux/bin/dhgen/dhgen sind verschieden.
diff -urN tahi-linux-3.0.12/bin/dhgen/Makefile tahi-linux-3.0.12-linux/bin/dhgen/Makefile
--- tahi-linux-3.0.12/bin/dhgen/Makefile	2006-08-31 03:57:53.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/dhgen/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -40,20 +40,28 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 # THE POSSIBILITY OF SUCH DAMAGE.
 #
-# $TAHI: v6eval/bin/dhgen/Makefile,v 1.5 2006/08/31 01:57:53 akisada Exp $
+# $TAHI: v6eval/bin/dhgen/Makefile,v 1.4 2005/05/09 09:35:21 akisada Exp $
 #
 ######################################################################
 
-CXXFLAGS+=	-I/usr/local/include
-CXXFLAGS+=	-DTAHI
-LDFLAGS+=	-L/usr/local/lib
-LDADD+=	-lcrypto
-SRCS=	dhgen.cc 
-PROG_CXX=	$(SRCS:.cc=)
-PROG=	${PROG_CXX}
-NOMAN=
-NO_MAN=
-CLEANFILES+=	.depend
+CC=c++
+CXXFLAGS+= -I/usr/local/include
+CXXFLAGS+= -DTAHI
+LDFLAGS += -L/usr/local/lib
+LDADD   += -lcrypto
+SRCS	= dhgen.cc 
+PROG_CXX	= $(SRCS:.cc=)
+PROG	= ${PROG_CXX}
+NOMAN	=
+NO_MAN	=
+
+# .include "../Makefile.inc"
+# .include "bsd.prog.mk"
+all:    dhgen
+
+dhgen:
+	$(CC) $(CXXFLAGS) $(LDADD) $(LDFLAGS) $(SRCS) -o $(PROG) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:
+	- rm dhgen
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
Dateien tahi-linux-3.0.12/bin/file2hex/file2hex und tahi-linux-3.0.12-linux/bin/file2hex/file2hex sind verschieden.
diff -urN tahi-linux-3.0.12/bin/file2hex/Makefile tahi-linux-3.0.12-linux/bin/file2hex/Makefile
--- tahi-linux-3.0.12/bin/file2hex/Makefile	2006-08-31 03:57:54.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/file2hex/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,6 +1,5 @@
 #
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-# Yokogawa Electric Corporation,
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
 # YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
 # All rights reserved.
 # 
@@ -40,16 +39,23 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 # THE POSSIBILITY OF SUCH DAMAGE.
 #
-# $TAHI: v6eval/bin/file2hex/Makefile,v 1.2 2006/08/31 01:57:54 akisada Exp $
+# $TAHI: v6eval/bin/file2hex/Makefile,v 1.1 2005/05/25 06:26:33 akisada Exp $
 #
 ########################################################################
 
-PROG=	file2hex
-SRCS=	file2hex.c
+PROG=		file2hex
+SRCS=		file2hex.c
 CFLAGS+=	-Wall -g
 NOMAN=
 NO_MAN=
-CLEANFILES+=	.depend
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+# .include "../Makefile.inc"
+# .include "bsd.prog.mk"
+all:    file2hex
+
+file2hex:
+	$(CC) $(CFLAGS) $(LDADD) $(SRCS) -o $(PROG) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:
+	- rm file2hex
+
Dateien tahi-linux-3.0.12/bin/ivcomp/ivcomp und tahi-linux-3.0.12-linux/bin/ivcomp/ivcomp sind verschieden.
diff -urN tahi-linux-3.0.12/bin/ivcomp/Makefile tahi-linux-3.0.12-linux/bin/ivcomp/Makefile
--- tahi-linux-3.0.12/bin/ivcomp/Makefile	2006-08-31 03:57:54.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/ivcomp/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,6 +1,5 @@
 #
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-# Yokogawa Electric Corporation,
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
 # YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
 # All rights reserved.
 # 
@@ -40,17 +39,24 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 # THE POSSIBILITY OF SUCH DAMAGE.
 #
-# $TAHI: v6eval/bin/ivcomp/Makefile,v 1.3 2006/08/31 01:57:54 akisada Exp $
+# $TAHI: v6eval/bin/ivcomp/Makefile,v 1.2 2005/05/09 09:35:21 akisada Exp $
 #
 ########################################################################
 
-PROG=	ivcomp
-SRCS=	ivcomp.c
+PROG=		ivcomp
+SRCS=		ivcomp.c
 CFLAGS+=	-Wall -g
-LDADD+=	-lcrypto
+LDADD+=		-lcrypto
 NOMAN=
 NO_MAN=
-CLEANFILES+=	.depend
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+# .include "../Makefile.inc"
+# .include "bsd.prog.mk"
+all:    ivcomp
+
+ivcomp:
+	$(CC) $(CFLAGS) $(LDADD) $(SRCS) -o $(PROG) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:
+	- rm ivcomp
+
diff -urN tahi-linux-3.0.12/bin/Makefile tahi-linux-3.0.12-linux/bin/Makefile
--- tahi-linux-3.0.12/bin/Makefile	2005-05-25 08:52:09.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/Makefile	2007-12-10 20:46:52.000000000 +0100
@@ -1,4 +1,23 @@
 SUBDIR=pktbuf pktctl pktsend pktrecv checker autorun pktlint remotes dhgen dhcomp prfcomp ivcomp x509dec sigcomp file2hex
+PREFIX=/usr/local/v6eval
 
-.MAIN: depend all
-.include <bsd.subdir.mk>
+all:
+	for dir in $(SUBDIR); do \
+	 $(MAKE) -C $$dir all; \
+	done
+clean:
+	for dir in $(SUBDIR); do \
+	 $(MAKE) -C $$dir clean; \
+	done
+install:
+	mkdir $(PREFIX)/bin
+	for dir in $(SUBDIR); do \
+         cp -v $$dir/$$dir $(PREFIX)/bin/$$dir; \
+        done
+	cp autorun/autorun.pl $(PREFIX)/bin/
+	cd remotes; make install; cd ..
+
+
+
+# .MAIN: depend all # no idea what it does :)
+# .include <bsd.subdir.mk>
diff -urN tahi-linux-3.0.12/bin/Makefile.inc tahi-linux-3.0.12-linux/bin/Makefile.inc
--- tahi-linux-3.0.12/bin/Makefile.inc	2002-12-02 13:31:27.000000000 +0100
+++ tahi-linux-3.0.12-linux/bin/Makefile.inc	2007-12-09 23:19:55.000000000 +0100
@@ -1,5 +1,5 @@
 BINDIR?=	/usr/local/v6eval/bin
-MANDIR=	/usr/local/v6eval/man/man
+MANDIR=	/usr/local/v6eval/man
 l=../../lib
 Cm=$l/Cm
 Pz=$l/Pz
diff -urN tahi-linux-3.0.12/bin/pktbuf/Makefile tahi-linux-3.0.12-linux/bin/pktbuf/Makefile
--- tahi-linux-3.0.12/bin/pktbuf/Makefile	2006-08-31 03:57:54.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/pktbuf/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,14 +1,22 @@
-CXXFLAGS+=	-I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
-LDFLAGS +=	-L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
-LDADD+=	-lPkt -lPz -lCm -lcrypto
-SRCS=	pktbuf.cc 
-PROG_CXX=	pktbuf
-PROG=	${PROG_CXX}
-NOMAN=
-NO_MAN=
-CLEANFILES+=	.depend
+CC=c++
+Cm=../../lib/Cm/
+Pz=../../lib/Pz/
+pkt=../../lib/pkt/
+CXXFLAGS+= -I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
+LDFLAGS += -L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
+LDADD   += -lPkt -lPz -lPz2 -lCm -lcrypto
+SRCS	= pktbuf.cc 
+PROG_CXX= pktbuf
+PROG	= ${PROG_CXX}
+NOMAN	=
+NO_MAN	=
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+#.include "../Makefile.inc"
+#.include "bsd.prog.mk"
+# $(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
+all:
+	$(CC) $(SRCS) -o $(PROG_CXX) $(LDADD) $(CXXFLAGS) $(LDFLAGS) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:  
+	- rm $(PROG_CXX)
 
-$(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
Dateien tahi-linux-3.0.12/bin/pktbuf/pktbuf und tahi-linux-3.0.12-linux/bin/pktbuf/pktbuf sind verschieden.
diff -urN tahi-linux-3.0.12/bin/pktctl/Makefile tahi-linux-3.0.12-linux/bin/pktctl/Makefile
--- tahi-linux-3.0.12/bin/pktctl/Makefile	2006-08-31 03:57:54.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/pktctl/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,12 +1,20 @@
-CXXFLAGS+=	-I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
-LDFLAGS +=	-L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
-LDADD+=	-lPkt -lPz -lCm -lcrypto
-SRCS=	pktctl.cc 
-PROG_CXX=	pktctl
-PROG=	${PROG_CXX}
-CLEANFILES+=	.depend
+CC=c++
+Cm=../../lib/Cm/
+Pz=../../lib/Pz/
+pkt=../../lib/pkt/
+CXXFLAGS+= -I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
+LDFLAGS += -L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
+LDADD   += -lPkt -lPz -lPz2 -lCm -lcrypto
+SRCS	= pktctl.cc 
+PROG_CXX= pktctl
+PROG	= ${PROG_CXX}
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+#.include "../Makefile.inc"
+#.include "bsd.prog.mk"
+#$(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
+all:
+	$(CC) $(SRCS) -o $(PROG_CXX) $(LDADD) $(CXXFLAGS) $(LDFLAGS) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:  
+	- rm $(PROG_CXX)
 
-$(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
Dateien tahi-linux-3.0.12/bin/pktctl/pktctl und tahi-linux-3.0.12-linux/bin/pktctl/pktctl sind verschieden.
diff -urN tahi-linux-3.0.12/bin/pktlint/Makefile tahi-linux-3.0.12-linux/bin/pktlint/Makefile
--- tahi-linux-3.0.12/bin/pktlint/Makefile	2000-08-02 16:42:33.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/pktlint/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -2,6 +2,8 @@
 beforeinstall:
 	${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
 		${.CURDIR}/pktlint.pl ${DESTDIR}${BINDIR}/pktlint
-
-.include <bsd.prog.mk>
+all:
+	cp pktlint.pl pktlint
+	
+#.include <bsd.prog.mk>
 
diff -urN tahi-linux-3.0.12/bin/pktlint/pktlint tahi-linux-3.0.12-linux/bin/pktlint/pktlint
--- tahi-linux-3.0.12/bin/pktlint/pktlint	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/bin/pktlint/pktlint	2007-12-10 20:48:56.000000000 +0100
@@ -0,0 +1,460 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# Yokogawa Electric Corporation,
+# YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
+# All rights reserved.
+# 
+# Redistribution and use of this software in source and binary forms, with 
+# or without modification, are permitted provided that the following 
+# conditions and disclaimer are agreed and accepted by the user:
+# 
+# 1. Redistributions of source code must retain the above copyright 
+# notice, this list of conditions and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright 
+# notice, this list of conditions and the following disclaimer in the 
+# documentation and/or other materials provided with the distribution.
+# 
+# 3. Neither the names of the copyrighters, the name of the project which 
+# is related to this software (hereinafter referred to as "project") nor 
+# the names of the contributors may be used to endorse or promote products 
+# derived from this software without specific prior written permission.
+# 
+# 4. No merchantable use may be permitted without prior written 
+# notification to the copyrighters. However, using this software for the 
+# purpose of testing or evaluating any products including merchantable 
+# products may be permitted without any notification to the copyrighters.
+# 
+# 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
+# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
+# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
+# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+# THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $TAHI: v6eval/bin/pktlint/pktlint.pl,v 1.5 2001/10/05 11:09:54 tanaka Exp $
+
+use File::Basename;
+use Getopt::Long;
+
+########################################################################
+
+################################################################
+# Create Intermediate File for Packet Definition 
+# and get included files
+#---------------------------------------------------------------
+sub doCpp() {
+	my @cmd = ($PktCompiler, "-I./", "-I$V6Root/include");
+
+	if ($NoStd) {
+		prTrace('$NoStd is 1');
+	}else {
+		my $includepath = searchPath("./:$V6Root/include/",'std.def');
+		push(@cmd, ("-include", $includepath));
+		prTrace('$NoStd is 0');
+	}
+	push(@cmd, ($PktDef, $PktImd));
+	prTrace("Creating Intermiciate file: @cmd");
+
+	my $ret = system(@cmd);
+
+	my $exit_value = $ret >> 8;
+	if ($ret != 0) {
+		prErrExit("$PktCompiler failed exit value:$exit_value");
+	}
+
+	#
+	# get included file names
+	#
+
+	open( FILE, "$PktImd") || prErrExit("Can not open $PktImd");
+	while( <FILE> ){
+		next unless(/^#/);
+		chomp;
+		($incfile) = /^\S+\s+\d+\s+"(\S+)"/;
+		next if ($incfile eq "");
+		next if ($incfile eq $PktDef);
+		unless (grep {$incfile eq $_} @IncFiles) {
+			push(@IncFiles, $incfile);
+		}
+	}
+	close FILE;
+	
+}
+
+################################################################
+# run checker
+#---------------------------------------------------------------
+
+sub doCheck() {
+
+	my $cmd = "$BinDir/checker -t $TnDef -n $NutDef -p $PktImd -i $IfName $ENV{V6EVALOPT}";
+#print "$cmd\n";
+
+	pipe P_READ, C_WRITE;
+	pipe C_READ, P_WRITE;
+	my $pid = fork;
+	unless ($pid) {		# child
+		open(STDIN, "<&C_READ");
+		open(STDOUT, ">&C_WRITE");
+		open(STDERR, ">&C_WRITE");
+		exec "$cmd";
+		prErrExit("$cmd failed");
+	}
+	# parent
+	close(C_READ);
+	close(C_WRITE);
+	select(P_READ); $| = 1;
+	select(P_WRITE); $| = 1;
+	select(STDOUT);
+
+	while (<P_READ>) {
+		#print $_;
+		chomp;
+		($type, $line) = /^(\w\w\w):(.*)$/;
+		if ($type eq "log") {
+			prLog("  $line");
+		}
+		elsif ($type eq "err") {
+			prErr("$line");
+		}
+		elsif ($type eq "std") {
+			prErr("$line");
+		}
+		else {
+			prLog("  dbg:$allmsg", 100);
+		}
+	}
+	wait;
+	$rc=$?;
+	if ($?) {
+		prErrExit("check failed");
+	}
+	$rc;
+}
+
+########################################################################
+#	To handle log request.
+#
+#	If $level is specified, this will be compare with $LogLevel,
+#	the outer level specified by '-l' arguments at the script invocaiton.
+#	If it is less or equal,	than the message will be output.
+#	So, value 0 is the most strong request, In case of this, 
+#	the message will be logged even if any value is specified 
+#	for $LogLevel.
+#	In case of omittion, it is treated as 0. (always logged)
+#
+#	If you have some message wants to output in case LogLevel is 2
+#	but not for 1, you shoud specify $level here as 1.
+#
+#------------------------------------------------------------------------
+sub prLog($;$) { my (
+	$message,	# message for logging
+	$level		# log level, this will be compared with the 
+			# outer level specifid by '-l' arguments
+    ) = @_;
+	$level=0 unless defined($level);  # default 0;
+	#prTrace("LOG $level $LogLevel");
+	print LOG "$message\n" if($level<=$LogLevel);
+	print STDOUT "$message\n" if($VLog && $level<=$LogLevel);
+}
+
+########################################################################
+#	Print message to stderr
+#-----------------------------------------------------------------------
+sub prOut($) { my (
+	$message	# message for output
+    ) = @_;
+	print STDOUT "$message\n";
+}
+
+########################################################################
+#	Handle trace messge just for debug for this perl module
+#-----------------------------------------------------------------------
+sub prTrace($) { my (
+	$message	# message for output
+    ) = @_;
+	prOut("##### $message") if $Trace;
+}
+
+########################################################################
+#	Handle error but keep continue
+#-----------------------------------------------------------------------
+sub prErr($) { my (
+	$message	# message for error
+    ) = @_;
+	prLog("!!! $message");
+	print STDERR "$message\n";
+}
+
+########################################################################
+#	Handle error and exit
+#-----------------------------------------------------------------------
+sub prErrExit($) { my (
+	$message	# message for error
+    ) = @_;
+	prErr("pktlint: $message"); # assume it is error detected
+					 # in this module leval.
+	exit 1;
+}
+
+########################################################################
+#	parse Args
+#
+#	Getopt::Long module is used for argument parse
+#-----------------------------------------------------------------------
+sub parseArgs() {
+
+	#printUsage() unless(@ARGV);
+
+	$Getopt::Long::ignorecase=undef;
+	my $optStat = GetOptions(
+		"tn|TnDef=s",
+		"nut|NutDef=s",
+		"pkt|PktDef=s",
+		"if|IfName=s",
+		"l|LogLevel=i",
+		"d|DebugLevel=i",
+		"log|LogFile=s",
+		"h|Help",
+		"trace",	# for debug of this, output trace 
+		"keepImd",	# for debug of this, keep intermidiate file 
+		"v|VLog",       # print STDOUT log file
+		"nostd|NoStd",
+		"vroot|V6Root=s",
+                "remote=s",
+                "noremote",
+	);
+	printUsage() if( $opt_h || !$optStat);
+
+	while( @ARGV > 0) {
+		$opt = shift (@ARGV);
+		print STDOUT "warning: unknown option $opt\n";
+	};
+
+	$V6Root = $opt_vroot || $ENV{V6EVALROOT} || "/usr/local/v6eval/" ;
+
+	$BinDir=	"$V6Root/bin";
+	$EtcDir=	"$V6Root/etc";
+
+	$NoStd	= $opt_nostd	? $opt_nostd	: 0;
+	$VLog   = $opt_v     ? $opt_v   : 0;
+	$Trace	    =($opt_trace==1);
+	$KeepImd    =($opt_keepImd==1);
+
+	$TnDef  = $opt_tn    ? $opt_tn  : "tn.def";
+	$TnDef  = searchPath("./:${EtcDir}", $TnDef); 
+
+	$NutDef = $opt_nut   ? $opt_nut : "nut.def";
+	$NutDef  = searchPath("./:${EtcDir}", $NutDef); 
+
+	$PktDef = $opt_pkt   ? $opt_pkt : "packet.def";
+
+	$IfName = $opt_if   ? $opt_if : "Link0";
+
+	$LogFile= $opt_log   ? $opt_log : "packet.chk";
+	$LogLevel   = $opt_l     ? $opt_l   : 1;
+	$DbgLevel   = $opt_d     ? $opt_d   : 0;
+
+	checkFile(  $TnDef );
+	checkFile( $NutDef );
+	checkFile( $PktDef );
+
+	$PktCompiler=	"/usr/libexec/cpp";
+	$SocketPath=	"/tmp";
+
+
+	$PktImd = '/tmp/' . basename($PktDef) . '.i';
+}
+
+########################################################################
+#       Search Path
+#-----------------------------------------------------------------------
+sub searchPath($$) { my(
+        $path,           # path  
+        $filename        # filename for search
+    ) = @_; 
+        my $fullname="";
+        if($filename =~ m!.*/.+!) {
+                $fullname=$filename;
+        }       
+	my @paths=split(/:/,($path));
+        foreach(@paths) {
+                my $tmpname=$_ . "/" . $filename;
+                #my $tmpname=$_ .  $filename;
+                if($fullname eq "") {
+                        $fullname=$tmpname if(-e $tmpname);
+                }       
+        }
+	prErr("$filename don't exist in the path ($path)") if($fullname eq "");       
+        $fullname;
+}    
+
+########################################################################
+#	Check file if it is readble...
+#-----------------------------------------------------------------------
+sub checkFile($) { my(
+	$file		# command string
+    ) = @_;
+	unless( -r "$file" ){
+		prErrExit("$file not exist or cannot read");
+	}
+}
+
+########################################################################
+# Check TN definition and setup environment
+#---------------------------------------------------------------
+
+sub checkTN() {
+	# double entry not check yet. (OVERWRITE)
+	prTrace("Looking up $TnDef");
+	open( FILE, "$TnDef") || prErrExit("Can not open $TnDef");
+	while( <FILE> ){
+		next if(/^\s*$/ || /^#/);	# remove comment
+		chomp;
+		   if( /^(socketpath)\s+(\S+)/  ) { $SocketPath=$2; }
+		elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-f]{1,2}:){5}[0-9a-f]{1,2})/){
+			push(@TnIfs,$1);
+			push(@TnSos,$2);
+		}
+		elsif(/^(RemoteCuPath)\s+(\S+)/ ||
+		      /^(RemoteDevice)\s+(\S+)/ || 
+		      /^(RemoteDebug)\s+(\S+)/ || 
+		      /^(RemoteIntDebug)\s+(\S+)/ || 
+		      /^(RemoteLog)\s+(\S+)/ ||
+		      /^(RemoteSpeed)\s+(\S+)/ ||
+		      /^(RemoteLogout)\s+(\S+)/ ||
+		      /^(RemoteMethod)\s+(\S+)/ ||
+		      /^(filter)\s+(\S+)/) {
+		    $TnDef{$1}=$2;
+		}
+		else{ prOut("Unknown line in $TnDef: $_\n");}
+		prTrace("TN : $_");
+	}
+	close FILE;
+}
+
+########################################################################
+# Check NUT definition and setup environment
+#---------------------------------------------------------------
+
+sub checkNUT() {
+	my $ifname;
+	prTrace("Looking up $NutDef");
+	open( FILE, "$NutDef") || prErrExit("Can not open $NutDef");
+	while( <FILE> ){
+		next if(/^\s*$/ || /^#/);	# remove comment
+		chomp;
+		   if( /^(System)\s+(.*)/	)	{ $System = $2;}
+		elsif( /^(TargetName)\s+(.*)/	) 	{ $TargetName = $2;}
+		elsif( /^(HostName)\s+(.*)/  	)	{ $HostName = $2;}
+		elsif( /^(Type)\s+(.*)/  	)	{ $Type = $2;}
+		elsif( /^(Password)\s+(.*)/  	)	{ }
+		elsif( /^(User)\s+(.*)/  	)	{ }
+		elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-f]{1,2}:){5}[0-9a-f]{1,2})/){
+			push(@NutIfs,$1);
+		}
+		else{ prOut("Unknown line in $NutDef: $_");}
+		prTrace("NUT: $_");
+	}
+	close FILE;
+}
+
+########################################################################
+# check commonly used interface
+#---------------------------------------------------------------
+
+sub checkIF () {
+	my $ifname;
+	foreach $ifname (@TnIfs) {
+		if( grep {$ifname eq $_} @NutIfs ){
+			push(@IfNames, $ifname);
+		}
+	}
+	if (@IfNames == 0) {
+		prErrExit("No interface to use commonly\n".
+				"TN : @TnIfs\nNUT: @NutIfs");
+	}
+	unless (grep {$IfName eq $_} @IfNames) {
+		prErrExit("No interface definition for $IfName");
+	}
+}
+
+########################################################################
+#	Print usage and exit
+#-----------------------------------------------------------------------
+sub printUsage()  {
+	prOut("Usage: $PROGRAM_NAME [-h]"    );
+	prOut("       [-tn  tn_def_file]"   );
+	prOut("       [-nut nut_def_file]"   );
+	prOut("       [-pkt pkt_def_file]");
+	prOut("       [-if interface_name]");
+	#prOut("       [-log log_file] [-l log_level]");
+	prOut("       [-log log_file]");
+	prOut("       [-v]"	);
+	prOut("       [-nostd]"	);
+	prOut("	      [-vroot default directory]");
+	exit 1;
+}
+
+########################################################################
+# main
+########################################################################
+
+#---------------------------------------------------------------
+# Parse args and complete global valiables
+#---------------------------------------------------------------
+parseArgs();
+checkTN();
+checkNUT();
+checkIF();
+doCpp();
+
+#---------------------------------------------------------------
+# Open log file
+#---------------------------------------------------------------
+open(LOG, ">$LogFile") || (
+	prOut("Can not create $LogFile for logging ($!)"),exit 1) ;
+prTrace("Log will be outputed to  $LogFile");
+
+prLog('-'x72);
+
+prLog("PktDef:  $PktDef");
+foreach(@IncFiles) {
+	prLog("Include: $_");
+}
+prLog('-'x72);
+
+prLog("TnDef: $TnDef");
+prLog('-'x72);
+
+prLog("NutDef:     $NutDef");
+if ($System)		{ prLog("System:     $System");}
+if ($TargetName)	{ prLog("TargetName: $TargetName");}
+if ($HostName)		{ prLog("HostName:   $HostName");}
+if ($Type)		{ prLog("Type:       $Type"); }
+prLog('-'x72);
+
+$rc=doCheck();
+
+prLog('-'x72);
+close(LOG);
+exit $rc;
+
+END {
+    if( $KeepImd ) {	# just for degug
+	prOut("Keep packet ImdFile <$PktImd>");
+    }
+    else {
+	unlink("$PktImd");
+    }	# normally unlink
+}
diff -urN tahi-linux-3.0.12/bin/pktrecv/Makefile tahi-linux-3.0.12-linux/bin/pktrecv/Makefile
--- tahi-linux-3.0.12/bin/pktrecv/Makefile	2006-08-31 03:57:54.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/pktrecv/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,14 +1,22 @@
-CXXFLAGS+=	-I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
-LDFLAGS +=	-L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
-LDADD+=	-lPkt -lPz -lCm  -lcrypto
-SRCS=	pktrecv.cc 
-PROG_CXX=	pktrecv
-PROG=	${PROG_CXX}
-NOMAN=
-NO_MAN=
-CLEANFILES+=	.depend
+CC=c++
+Cm=../../lib/Cm/
+Pz=../../lib/Pz/
+pkt=../../lib/pkt/
+CXXFLAGS+= -I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
+LDFLAGS += -L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
+LDADD   += -lPkt -lPz -lPz2 -lCm  -lcrypto
+SRCS	= pktrecv.cc 
+PROG_CXX= pktrecv
+PROG	= ${PROG_CXX}
+NOMAN	=
+NO_MAN	=
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+#.include "../Makefile.inc"
+#.include "bsd.prog.mk"
+#$(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
+all:
+	$(CC) $(SRCS) -o $(PROG_CXX) $(LDADD) $(CXXFLAGS) $(LDFLAGS) -pipe -Wall -g -Woverloaded-virtual -fno-strict-aliasing
+
+clean:  
+	- rm $(PROG_CXX)
 
-$(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
Dateien tahi-linux-3.0.12/bin/pktrecv/pktrecv und tahi-linux-3.0.12-linux/bin/pktrecv/pktrecv sind verschieden.
diff -urN tahi-linux-3.0.12/bin/pktsend/Makefile tahi-linux-3.0.12-linux/bin/pktsend/Makefile
--- tahi-linux-3.0.12/bin/pktsend/Makefile	2006-08-31 03:57:55.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/pktsend/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,12 +1,20 @@
-CXXFLAGS+=	-I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
-LDFLAGS +=	-L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
-LDADD+=	-lPkt -lPz -lCm  -lcrypto
-SRCS=	pktsend.cc 
-PROG_CXX=	pktsend
-PROG=	${PROG_CXX}
-CLEANFILES+=	.depend
+CC=c++
+Cm=../../lib/Cm/
+Pz=../../lib/Pz/
+pkt=../../lib/pkt/
+CXXFLAGS+= -I${Cm} -I${Pz} -I${pkt} -I/usr/local/include
+LDFLAGS += -L${Cm} -L${Pz} -L${pkt} -L/usr/local/lib
+LDADD   += -lPkt -lPz -lPz2 -lCm  -lcrypto
+SRCS	= pktsend.cc 
+PROG_CXX= pktsend
+PROG	= ${PROG_CXX}
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+#.include "../Makefile.inc"
+#.include "bsd.prog.mk"
+#$(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
+all:
+	$(CC) $(SRCS) -o $(PROG_CXX) $(LDADD) $(CXXFLAGS) $(LDFLAGS) -pipe -Wall -g -Woverloaded-virtual -fno-strict-aliasing
+
+clean:  
+	- rm $(PROG_CXX)
 
-$(PROG): ${Cm}/libCm.a ${Pz}/libPz.a ${pkt}/libPkt.a
Dateien tahi-linux-3.0.12/bin/pktsend/pktsend und tahi-linux-3.0.12-linux/bin/pktsend/pktsend sind verschieden.
diff -urN tahi-linux-3.0.12/bin/prfcomp/Makefile tahi-linux-3.0.12-linux/bin/prfcomp/Makefile
--- tahi-linux-3.0.12/bin/prfcomp/Makefile	2006-08-31 03:57:55.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/prfcomp/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,6 +1,5 @@
 #
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-# Yokogawa Electric Corporation,
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
 # YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
 # All rights reserved.
 # 
@@ -40,17 +39,24 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 # THE POSSIBILITY OF SUCH DAMAGE.
 #
-# $TAHI: v6eval/bin/prfcomp/Makefile,v 1.3 2006/08/31 01:57:55 akisada Exp $
+# $TAHI: v6eval/bin/prfcomp/Makefile,v 1.2 2005/05/09 09:35:21 akisada Exp $
 #
 ########################################################################
 
-PROG=	prfcomp
-SRCS=	prfcomp.c
+PROG=		prfcomp
+SRCS=		prfcomp.c
 CFLAGS+=	-Wall -g
-LDADD+=	-lcrypto
+LDADD+=		-lcrypto
 NOMAN=
 NO_MAN=
-CLEANFILES+=	.depend
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+# .include "../Makefile.inc"
+# .include "bsd.prog.mk"
+all:    prfcomp
+
+prfcomp:
+	$(CC) $(CFLAGS) $(LDADD) $(SRCS) -o $(PROG) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:
+	- rm prfcomp
+
Dateien tahi-linux-3.0.12/bin/prfcomp/prfcomp und tahi-linux-3.0.12-linux/bin/prfcomp/prfcomp sind verschieden.
diff -urN tahi-linux-3.0.12/bin/remotes/Makefile tahi-linux-3.0.12-linux/bin/remotes/Makefile
--- tahi-linux-3.0.12/bin/remotes/Makefile	2005-05-25 04:08:48.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/remotes/Makefile	2007-12-13 13:44:52.000000000 +0100
@@ -1,6 +1,5 @@
 #
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-# Yokogawa Electric Corporation,
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
 # YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
 # All rights reserved.
 # 
@@ -55,4 +54,13 @@
 	install -d -o bin -g bin -m 755 $(PREFIX)/bin
 	install -c -o bin -g bin -m 444 $(DOCFILES) $(PREFIX)/bin/
 
-.include <bsd.subdir.mk>
+install:
+	install -d -o bin -g bin -m 755 $(PREFIX)/bin
+	install -c -o bin -g bin -m 444 $(DOCFILES) $(PREFIX)/bin/
+	@for subdir in ${SUBDIR}; do \
+		echo "==> $$subdir"; \
+		(cp -a $$subdir $(PREFIX)/bin;); \
+	done
+
+
+#.include <bsd.subdir.mk>
diff -urN tahi-linux-3.0.12/bin/remotes/unknown/reboot.rmt tahi-linux-3.0.12-linux/bin/remotes/unknown/reboot.rmt
--- tahi-linux-3.0.12/bin/remotes/unknown/reboot.rmt	2003-10-14 08:07:30.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/remotes/unknown/reboot.rmt	2007-12-15 11:47:14.000000000 +0100
@@ -46,5 +46,7 @@
 ################################################################
 
 use V6evalRemote;
-
+ rOpen();
+ rLogin(10);
+ rReboot(10);
 exit($V6evalRemote::exitNS);
diff -urN tahi-linux-3.0.12/bin/sigcomp/Makefile tahi-linux-3.0.12-linux/bin/sigcomp/Makefile
--- tahi-linux-3.0.12/bin/sigcomp/Makefile	2006-08-31 03:57:55.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/sigcomp/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,6 +1,5 @@
 #
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-# Yokogawa Electric Corporation,
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
 # YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
 # All rights reserved.
 # 
@@ -40,21 +39,29 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 # THE POSSIBILITY OF SUCH DAMAGE.
 #
-# $TAHI: v6eval/bin/sigcomp/Makefile,v 1.3 2006/08/31 01:57:55 akisada Exp $
+# $TAHI: v6eval/bin/sigcomp/Makefile,v 1.2 2005/05/09 09:35:23 akisada Exp $
 #
 ########################################################################
 
-PROG=	sigcomp
-SRCS=	sigcomp.c
+PROG=		sigcomp
+SRCS=		sigcomp.c
 CFLAGS+=	-Wall -g
-LDADD+=	-lcrypto
+LDADD+=		-lcrypto
 NOMAN=
 NO_MAN=
-CLEANFILES+=	.depend
 
 # CFLAGS+=	-DDEBUG
 # LDFLAGS+=	-L/usr/local/lib
 # LDADD+=	-lefence
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+#.include "../Makefile.inc"
+# .include "bsd.prog.mk"
+
+all:    sigcomp
+
+sigcomp:
+	$(CC) $(CFLAGS) $(LDADD) $(SRCS) -o $(PROG) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing
+
+clean:
+	- rm sigcomp
+
Dateien tahi-linux-3.0.12/bin/sigcomp/sigcomp und tahi-linux-3.0.12-linux/bin/sigcomp/sigcomp sind verschieden.
diff -urN tahi-linux-3.0.12/bin/sigcomp/sigcomp.c tahi-linux-3.0.12-linux/bin/sigcomp/sigcomp.c
--- tahi-linux-3.0.12/bin/sigcomp/sigcomp.c	2005-05-27 13:40:19.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/sigcomp/sigcomp.c	2007-12-10 20:22:20.000000000 +0100
@@ -54,6 +54,7 @@
 
 #include <openssl/err.h>
 #include <openssl/evp.h>
+#include <openssl/rsa.h>
 
 
 
@@ -782,11 +783,12 @@
 			break;
 		}
 
-		if(rsa && !strcmp(algorithm, "mdc2")) {
+/* Standard openssl is build withouht EVP_mdc2 option :-( */
+/*		if(rsa && !strcmp(algorithm, "mdc2")) {
 			evp_md = EVP_mdc2();
 			break;
 		}
-
+*/
 		if(rsa && !strcmp(algorithm, "ripemd160")) {
 			evp_md = EVP_ripemd160();
 			break;
diff -urN tahi-linux-3.0.12/bin/x509dec/Makefile tahi-linux-3.0.12-linux/bin/x509dec/Makefile
--- tahi-linux-3.0.12/bin/x509dec/Makefile	2006-08-31 03:57:55.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/x509dec/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,6 +1,5 @@
 #
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-# Yokogawa Electric Corporation,
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
 # YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
 # All rights reserved.
 # 
@@ -40,20 +39,26 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 # THE POSSIBILITY OF SUCH DAMAGE.
 #
-# $TAHI: v6eval/bin/x509dec/Makefile,v 1.3 2006/08/31 01:57:55 akisada Exp $
+# $TAHI: v6eval/bin/x509dec/Makefile,v 1.2 2005/05/09 09:35:23 akisada Exp $
 #
 ########################################################################
 
-PROG=	x509dec
-SRCS=	x509dec.c
+PROG=		x509dec
+SRCS=		x509dec.c
 CFLAGS+=	-Wall -g
-LDADD+=	-lcrypto
+LDADD+=		-lcrypto
 NOMAN=
 NO_MAN=
-CLEANFILES+=	.depend
 
 # LDFLAGS+=	-L/usr/local/lib
-# LDADD+=	-lefence
+# LDADD+=		-lefence
 
-.include "../Makefile.inc"
-.include "bsd.prog.mk"
+# .include "../Makefile.inc"
+# .include "bsd.prog.mk"
+all:	x509dec
+
+x509dec:
+	$(CC) $(CFLAGS) $(LDADD) $(SRCS) -o $(PROG) -pipe -g -Wall -Woverloaded-virtual -fno-strict-aliasing 
+
+clean:
+	- rm x509dec
Dateien tahi-linux-3.0.12/bin/x509dec/x509dec und tahi-linux-3.0.12-linux/bin/x509dec/x509dec sind verschieden.
diff -urN tahi-linux-3.0.12/bin/x509dec/x509dec.c tahi-linux-3.0.12-linux/bin/x509dec/x509dec.c
--- tahi-linux-3.0.12/bin/x509dec/x509dec.c	2005-05-30 12:17:31.000000000 +0200
+++ tahi-linux-3.0.12-linux/bin/x509dec/x509dec.c	2007-12-10 20:17:24.000000000 +0100
@@ -245,15 +245,12 @@
 
 	TAILQ_INIT(&head);
 
-	if(!((unsigned char *)pubkey =
-		X509dec_get_pubkey(x509, &pubkeylen))) {
-
+	if(!(pubkey = X509dec_get_pubkey(x509, &pubkeylen))) {
 		return(x509dec_on_evp_return(false, pubkey, subject_name));
 	}
-
-	if(!((unsigned char *)subject_name =
-		X509dec_get_subject_name(x509, (int *)&subject_namelen))) {
-
+		
+	if(!(subject_name = X509dec_get_subject_name(x509, (int *)&subject_namelen)
+)) {
 		return(x509dec_on_evp_return(false, pubkey, subject_name));
 	}
 
@@ -508,7 +505,7 @@
 			return(NULL);
 		}
 
-		strlcpy(name->name_buf, extension->d.ia5->data, name->name_len);
+		strncpy(name->name_buf, extension->d.ia5->data, name->name_len);
 		name->name_type = extension->type;
 
 		TAILQ_INSERT_TAIL(head, name, names);
diff -urN tahi-linux-3.0.12/CHANGELOG.v6eval tahi-linux-3.0.12-linux/CHANGELOG.v6eval
--- tahi-linux-3.0.12/CHANGELOG.v6eval	2007-05-25 04:12:20.000000000 +0200
+++ tahi-linux-3.0.12-linux/CHANGELOG.v6eval	2007-12-09 23:20:00.000000000 +0100
@@ -5,6 +5,8 @@
 
 		     $Date: 2007/05/25 02:12:20 $
 
+2004/01/07	by Kazuo Hiekata<hiekata@yamato.ibm.com>
+	(Experimental) Support RedHat 9 and UnitedLinux 1.0 as TN
 
 
 2007/05/25	Release 3.0.12
diff -urN tahi-linux-3.0.12/INSTALL.linux tahi-linux-3.0.12-linux/INSTALL.linux
--- tahi-linux-3.0.12/INSTALL.linux	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/INSTALL.linux	2007-12-15 11:50:24.000000000 +0100
@@ -0,0 +1,192 @@
+# Copyright (C) IBM Corporation 2004.
+# All rights reserved.
+#
+# Redistribution and use of this software in source and binary forms, with 
+# or without modification, are permitted provided that the following 
+# conditions and disclaimer are agreed and accepted by the user:
+#
+# 1. Redistributions of source code must retain the above copyright 
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright 
+# notice, this list of conditions and the following disclaimer in the 
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the names of the copyrighters, the name of the project which 
+# is related to this software (hereinafter referred to as "project") nor 
+# the names of the contributors may be used to endorse or promote products 
+# derived from this software without specific prior written permission.
+#
+# 4. No merchantable use may be permitted without prior written 
+# notification to the copyrighters. However, using this software for the 
+# purpose of testing or evaluating any products including merchantable 
+# products may be permitted without any notification to the copyrighters.
+#
+#
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
+# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
+# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
+# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+# THE POSSIBILITY OF SUCH DAMAGE.
+# INTAP(Interoperability Technology Association for Information 
+# Processing, Japan) , IPA (Information-technology Promotion Agency,Japan)
+# All rights reserved.
+#
+# Redistribution and use of this software in source and binary forms, with 
+# or without modification, are permitted provided that the following 
+# conditions and disclaimer are agreed and accepted by the user:
+#
+# 1. Redistributions of source code must retain the above copyright 
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright 
+# notice, this list of conditions and the following disclaimer in the 
+# documentation and/or other materials provided with the distribution.
+#
+# 3. Neither the names of the copyrighters, the name of the project which 
+# is related to this software (hereinafter referred to as "project") nor 
+# the names of the contributors may be used to endorse or promote products 
+# derived from this software without specific prior written permission.
+#
+# 4. No merchantable use may be permitted without prior written 
+# notification to the copyrighters. However, using this software for the 
+# purpose of testing or evaluating any products including merchantable 
+# products may be permitted without any notification to the copyrighters.
+#
+#
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
+# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
+# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
+# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+# THE POSSIBILITY OF SUCH DAMAGE.
+#
+#    Author: Kazuo Hiekata <hiekata@yamato.ibm.com>
+#	Contrib: Patrick Kirsch <pkirsch@suse.de>
+#
+
+
+Installing the package onto TN (the case of RedHat 9/UnitedLinux 1.0)
+================================================================
+
+0. Install RedHat 9 or UnitedLinux 1.0
+
+1. Extracting the package
+
+	% cd $SOMEWHERE
+	% tar zxvf v6eval-X.X.tar.gz
+
+2. Installing perl-related modules
+
+	The package requires the below-listed perl5 modules.
+
+		- Expect v1.15
+		- IO-Tty v1.02
+		
+	These packages are available on the web.
+		http://sourceforge.net/project/showfiles.php?group_id=6894
+
+		$ tar zxvf IO-Tty-1.02.tar.gz
+		$ cd IO-Tty-1.02
+		$ perl Makefile.PL
+		$ make
+		$ make test
+		# make install
+
+		$ tar zxvf Expect-1.15.tar.gz
+		$ cd Expect-1.15
+		$ perl Makefile.PL
+		$ make
+		$ make test
+		# make install
+
+2.1 Installing needed devel-packages:
+	openssl-devel (with yast -i openssl-devel)
+
+2.2 Patching the file /usr/include/pcap-bfp.h with the included file pcap-bfp.h from
+	the local directory.
+
+2.3 Chmod 0777 /var/lock, to change owner, the program cu since cannot create the needed lock file und will abort
+
+3. Checking the environment
+	
+	Make sure that "libpcap" and "tcpdump" are already 
+	installed on your TN.
+	These packages are available on the Install CD-ROM.
+	And "pmake" is also needed and is available only on RedHat 9 CD-ROM.
+	If you're using UnitedLinux 1.0, get RedHat 9 CD-ROM and pick up
+	pmake package from it.
+	Hint: In SUSE-Linux there is no 'pmake'.
+	
+	To compile TAHI, perl5 and lorder are needed but Linux doesn't
+	have those.
+	
+	i. perl5
+		Just create a symbolic link to /usr/bin/perl
+		
+		# ln -s /usr/bin/perl /usr/bin/perl5
+	ii. lorder
+		This package contains "lorder" only for TAHI compilation on Linux.
+		
+		# cd $SOMEWHERE/v6eval-X.X
+		# cp lorder /usr/bin/lorder
+
+
+4. Compiling & installing the tool
+
+	Install the Tool in /usr/local/v6eval directory.
+
+		% cd $SOMEWHERE/v6eval-X.X
+		% pmake
+		# pmake install
+		For SUSE # make all ; make install
+
+
+4. Configure serial line
+
+	Make sure that "uucp" is installed on your system
+	And change the permission of the serial line device.
+
+		# chmod 777 /dev/ttyS0
+
+5. Interface configuration
+
+	At least, one interface used in testing, must be 'up' status.
+
+
+6. Back to the "Configuration of TN" section in INSTALL.v6eval.
+	
+	
+	* As for ct installation, pmake must be used anywhere instead of make.
+	Be careful when reading INSTALL.ct.
+		
+		% su -
+		# cd ct-X.X
+		# pmake install
+	
+	* "(iii) Customizing tn.def" in INSTALL.v6eval refer to "filter ipv6",
+	but Linux TAHI doesn't support this feature.
+
+7. Some Hint:
+ 	Some parameters e.g. Booting time for the NUT are in the BSD version _very optmistic_
+	so it can be that you should change some timing behaviour (Well, if your Linux boots in
+	10s then you are fine).	
+	Currently this TAHI-Linux port does only successfull run with i386 architecture.
+	
+	
+							[end of INSTALL.linux]
diff -urN tahi-linux-3.0.12/lib/Cm/BtObject.cc tahi-linux-3.0.12-linux/lib/Cm/BtObject.cc
--- tahi-linux-3.0.12/lib/Cm/BtObject.cc	2001-10-12 06:56:13.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Cm/BtObject.cc	2007-12-09 23:19:55.000000000 +0100
@@ -48,6 +48,6 @@
 BtObject::BtObject(const BtObject&) {}
 BtObject::~BtObject() {}
 uint32_t BtObject::hash() const {return 0;}
-int BtObject::compare(const BtObject*p) const {return (int)this-(int)p;}
+long BtObject::compare(const BtObject*p) const {return (long)this-(long)p;}
 bool BtObject::isEqual(const BtObject* v) const {
 	return compare(v)==0;}
diff -urN tahi-linux-3.0.12/lib/Cm/BtObject.h tahi-linux-3.0.12-linux/lib/Cm/BtObject.h
--- tahi-linux-3.0.12/lib/Cm/BtObject.h	2001-10-12 06:56:13.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Cm/BtObject.h	2007-12-09 23:19:55.000000000 +0100
@@ -50,7 +50,7 @@
 	BtObject(const BtObject&);
 virtual	~BtObject();
 virtual	uint32_t hash() const;
-virtual	int compare(const BtObject* p) const;
+virtual	long compare(const BtObject* p) const;
 	bool isEqual(const BtObject* p) const;
 	bool operator<(const BtObject& r) const;
 	bool operator<=(const BtObject& r) const;
Dateien tahi-linux-3.0.12/lib/Cm/Cm und tahi-linux-3.0.12-linux/lib/Cm/Cm sind verschieden.
diff -urN tahi-linux-3.0.12/lib/Cm/CmSocket.cc tahi-linux-3.0.12-linux/lib/Cm/CmSocket.cc
--- tahi-linux-3.0.12/lib/Cm/CmSocket.cc	2001-10-29 02:41:33.000000000 +0100
+++ tahi-linux-3.0.12-linux/lib/Cm/CmSocket.cc	2007-12-09 23:19:55.000000000 +0100
@@ -407,6 +407,7 @@
 	if(rc<0) {sysError("sendto");}
 	return rc;}
 int CmDgram::recvfrom(STR s,int l,CmSockAddr* from) {
+printf("DEBUG: recvfrom \n");
 	char buf[BUFSIZ];
 	socklen_t len=BUFSIZ;
 	sock* p=(sock*)buf;
diff -urN tahi-linux-3.0.12/lib/Cm/CmSocket.h tahi-linux-3.0.12-linux/lib/Cm/CmSocket.h
--- tahi-linux-3.0.12/lib/Cm/CmSocket.h	2003-10-23 06:37:30.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Cm/CmSocket.h	2007-12-09 23:19:55.000000000 +0100
@@ -55,6 +55,7 @@
 #include "CmTypes.h"
 
 #if !defined(__KAME__) 
+#if !defined(__linux__)
 struct  in6_addr {
 	union {
 		uint8_t   u6_addr8[16];
@@ -69,9 +70,14 @@
 	uint32_t	sin6_scope_id;	/* intface scope id */
 };
 #define	s6_addr		u6_addr.u6_addr8
+#endif
 #define getipnodebyname(a,b,c,d)0
 #endif
 
+#if defined(__linux__)
+#define SO_REUSEPORT 15
+#endif
+
 #ifndef IN6_IS_ADDR_LINKLOCAL
 #define	IN6_IS_ADDR_LINKLOCAL(a)\
 	(((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
diff -urN tahi-linux-3.0.12/lib/Cm/CmTypes.h tahi-linux-3.0.12-linux/lib/Cm/CmTypes.h
--- tahi-linux-3.0.12/lib/Cm/CmTypes.h	2001-10-12 06:56:14.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Cm/CmTypes.h	2007-12-09 23:19:55.000000000 +0100
@@ -49,16 +49,18 @@
 #include <ctype.h>
 typedef char *STR;
 typedef const char *CSTR;
-#if defined(__FreeBSD__) || defined(__bsdi__)
+#if defined(__FreeBSD__) || defined(__bsdi__) || defined(__linux__)
 typedef u_int8_t uint8_t;
 typedef u_int16_t uint16_t;
 typedef u_int32_t uint32_t;
 typedef u_int64_t uint64_t;
 #endif
 #if (__FreeBSD__ <= 3) || defined(__bsdi__) || defined(__hpux)
+#if !defined(__linux__)
 typedef int socklen_t;
 #endif
-#if defined(__hpux)
+#endif
+#if defined(__hpux) || defined(__linux__)
 #define SETPGRP(a,b)setpgrp()
 #else
 #define SETPGRP(a,b)setpgrp(a,b)
diff -urN tahi-linux-3.0.12/lib/Cm/Makefile tahi-linux-3.0.12-linux/lib/Cm/Makefile
--- tahi-linux-3.0.12/lib/Cm/Makefile	2006-08-31 03:57:56.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Cm/Makefile	2007-12-09 23:19:55.000000000 +0100
@@ -1,12 +1,24 @@
-LIB=	Cm
-SRCS=	CmTypes.cc \
+CC=g++
+LIB	= Cm
+SRCS	= \
+	CmTypes.cc \
 	BtObject.cc BtArray.cc BtList.cc BtSet.cc \
 	CmQueue.cc CmAgent.cc CmMain.cc CmSocket.cc \
 	CmFdSet.cc CmFdMasks.cc CmString.cc PerfCollect.cc \
 	Timer.cc CmDispatch.cc CmReceiver.cc timeval.cc \
 	CmToken.cc CmMatch.cc CmLexer.cc
 
-CXXFLAGS+=	-I. 
-CLEANFILES+=	.depend
+CXXFLAGS+= -I. 
+
+MKLINT=no
+# .include "bsd.lib.mk"
+all:    Cm
+
+Cm:
+	$(CC) $(SRCS) -pipe -g -fno-strict-aliasing -DYYDEBUG -Wall -Woverloaded-virtual -shared -fPIC -o $(LIB) 
+	cp -v Cm /usr/lib/libCm.so
+
+clean:
+	- rm Cm
+	- rm /usr/lib/libCm.so
 
-.include "bsd.lib.mk"
diff -urN tahi-linux-3.0.12/lib/Makefile tahi-linux-3.0.12-linux/lib/Makefile
--- tahi-linux-3.0.12/lib/Makefile	2000-04-26 06:11:12.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Makefile	2007-12-09 23:19:59.000000000 +0100
@@ -1,3 +1,11 @@
-SUBDIR=Cm Pz pkt 
-.MAIN: depend all
-.include <bsd.subdir.mk>
+#SUBDIR=Cm Pz pkt 
+# .MAIN: depend all
+# .include <bsd.subdir.mk>
+all:
+	cd Pz; make all; cd ..
+	cd Cm; make all; cd ..
+	cd pkt; make all; cd ..
+clean:
+	cd Pz; make clean; cd ..
+	cd Cm; make clean; cd ..
+	cd pkt; make clean; cd ..
Dateien tahi-linux-3.0.12/lib/pkt/a.out und tahi-linux-3.0.12-linux/lib/pkt/a.out sind verschieden.
diff -urN tahi-linux-3.0.12/lib/pkt/BpfAgent.cc tahi-linux-3.0.12-linux/lib/pkt/BpfAgent.cc
--- tahi-linux-3.0.12/lib/pkt/BpfAgent.cc	2005-07-21 04:42:52.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/BpfAgent.cc	2007-12-09 23:19:59.000000000 +0100
@@ -47,7 +47,8 @@
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/ioctl.h>
-#include <net/bpf.h>
+// #include <net/bpf.h>
+#include <pcap-bpf.h>
 #include <stdlib.h>
 #include <string.h>
 #include "debug.h"
@@ -212,7 +213,7 @@
 	return rc;}
 
 void BpfAgent::clear() {
-#if 1
+#if ! defined(__linux__)
 	/*
 	  In rare case, clear() function is called before filterd out
 	  all sent packets. So need to wait all sent packets filtered
diff -urN tahi-linux-3.0.12/lib/pkt/Bpfilter.cc tahi-linux-3.0.12-linux/lib/pkt/Bpfilter.cc
--- tahi-linux-3.0.12/lib/pkt/Bpfilter.cc	2005-07-21 03:53:22.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/Bpfilter.cc	2007-12-09 23:19:59.000000000 +0100
@@ -51,13 +51,28 @@
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <sys/time.h>
-#include <net/bpf.h>
+// #include <net/bpf.h>
+#include <pcap-bpf.h>
 #include <net/if.h>
 
 #include <sys/types.h>
 #include "debug.h"
 
+#if defined(__linux__)
+#include <features.h>    /* for the glibc version number */
+#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
+#include <netpacket/packet.h>
+#include <net/ethernet.h>     /* the L2 protocols */
+#else
+#include <asm/types.h>
+#include <linux/if_packet.h>
+#include <linux/if_ether.h>   /* The L2 protocols */
+#endif
+#include <netinet/in.h>
+#endif
+
 Bpfilter::Bpfilter(CSTR n):fd_(-1),bufsize_(0) {
+#if !defined(__linux__)
 	int i, fd=-1;
 	char dev[32];
 	struct ifreq ifr;
@@ -95,50 +110,119 @@
 		::close(fd);
 		return;}
 	fd_=fd;}
+#else
+	int i, fd=-1;
+	char dev[32];
+	struct sockaddr_ll sll;
+	
+	fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
+	if(fd<0) {
+		perror("err:open");
+		return;}
+	memset(&sll, 0xff, sizeof(sll));
+	sll.sll_family = AF_PACKET;
+	sll.sll_protocol = htons(ETH_P_ALL);
+	ifindex_ = if_nametoindex(n);
+	if(ifindex_<0) {
+		perror("err:if_nametoindex()");
+		return;}
+	sll.sll_ifindex = ifindex_;
+	int rc = bind(fd, (struct sockaddr *)&sll, sizeof(sll));
+	if(rc<0) {
+		perror("err:bind");
+		return;}
+	bufsize_=BPF_MAXBUFSIZE;
+	fd_=fd;}
+#endif
 
 int Bpfilter::setfilter(struct bpf_program *filter) const {
+#if !defined(__linux__)
 	int fd=fileDesc();
 	if(fd<0) return -1;
 	int rc = ioctl(fd,BIOCSETF,filter);
 	if(rc<0){perror("err:ioctl(BIOCSETF)");}
 	return rc;
 }
+#else
+ 	/* xxx: For Linux, "filter ipv6" in tn.def is NOT supported */
+ 	return 0;
+ }
+#endif
+ 
 
 int Bpfilter::promiscuous() const {
 	int fd=fileDesc();
 	if(fd<0) return -1;
+#if !defined(__linux__)
 	int rc=ioctl(fd,BIOCPROMISC,NULL);
 	if(rc<0) {perror("err:ioctl(BIOCPROMISC)");}
-	return rc;}
+ 	return rc;}
+#else
+ 	struct ifreq ifr;
+ 	int rc=ioctl(fd,SIOCGIFFLAGS,&ifr);
+ 	if(rc<0) {perror("err:ioctl(SIOCGIFFLAGS)");}
+ 	ifr.ifr_flags = ifr.ifr_flags | IFF_PROMISC;
+ 	rc=ioctl(fd,SIOCSIFFLAGS,&ifr);
+ 	if(rc<0) {perror("err:ioctl(SIOCSIFFLAGS)");}
+ 	return 0;}
+#endif
 
 int Bpfilter::flush() const {
 	int fd=fileDesc();
 	if(fd<0) return -1;
+#if !defined(__linux__)
 	int rc=ioctl(fd,BIOCFLUSH,NULL);
 	if(rc<0) {perror("err:ioctl(BIOCFLUSH)");}
 	return rc;}
+#else
+ 	unsigned char buf[2048];
+ 	int i=0;
+ 	do {
+ 		fd_set fds;
+ 		struct timeval t;
+ 		FD_ZERO(&fds);	
+ 		FD_SET(fd, &fds);
+ 		memset(&t, 0, sizeof(t));
+ 		i = select(FD_SETSIZE, &fds, NULL, NULL, &t);
+ 		if (i > 0)
+ 			recv(fd, buf, i, 0);
+ 	} while (i);
+ 	return 0;}
+#endif
+ 
 
 int Bpfilter::immediate(uint32_t n) const {
+#if !defined(__linux__)
 	int fd=fileDesc();
 	if(fd<0) return -1;
 	int rc=ioctl(fd,BIOCIMMEDIATE,&n);
 	if(rc<0) {perror("err:ioctl(BIOCIMMEDIATE)");}
 	return rc;}
+#else
+ 	/* xxx: For Linux, tahi works only in immediate=true mode */
+ 	return 0;}
+#endif
 
 int Bpfilter::statistics(uint32_t& recv,uint32_t& drop) const {
 	struct bpf_stat stat;
 	int fd=fileDesc();
 	recv=0; drop=0;
 	if(fd<0) return -1;
+#if !defined(__linux__)
 	int rc=ioctl(fd,BIOCGSTATS,(caddr_t)&stat);
 	if(rc<0) {perror("err:ioctl(BIOCGSTATS)");}
 	else {recv=stat.bs_recv; drop=stat.bs_drop;}
 	return rc;}
-
+#else
+ 	/* xxx: Linux cannot get per-socket statistics */
+ 	return 0;}
+#endif
+ 
 int Bpfilter::receive(caddr_t p) const {
 	int fd=fileDesc();
 	if(fd<0) return -1;
 	uint32_t l=bufferSize();
+#if !defined(__linux__)
 #ifdef VCLEAR_DBG
 xdbg("/tmp/vclear_dbg.txt", "Bpfilter", "l: %d\n", l);
 #endif	// VCLEAR_DBG
@@ -148,7 +232,20 @@
 #endif	// VCLEAR_DBG
 	if(rc<0) {perror("err:read");}
 	return rc;}
-
+#else
+#define SIZEOF_BPF_HDR 18
+ 	int rc =recv(fd, (p+SIZEOF_BPF_HDR), (l-SIZEOF_BPF_HDR), 0);
+ 	gettimeofday( &((struct bpf_hdr *)p)->bh_tstamp, 0) ;
+ 	((struct bpf_hdr *)p)->bh_caplen = rc;
+ 	((struct bpf_hdr *)p)->bh_datalen =rc + SIZEOF_BPF_HDR;
+ 	((struct bpf_hdr *)p)->bh_hdrlen = SIZEOF_BPF_HDR;
+ 	if(rc<0) {
+ 		perror("err:recv");
+ 		return rc;}
+ 	return (rc+SIZEOF_BPF_HDR);}
+ #undef SIZEOF_BPF_HDR
+ #endif
+ 
 int
 Bpfilter::nonblock_receive(caddr_t p) const
 {
@@ -208,7 +305,16 @@
 #ifdef VCLEAR_DBG
 xdbg("/tmp/vclear_dbg.txt", "Bpfilter", "l: %d\n", l);
 #endif	// VCLEAR_DBG
+
+#if !defined(__linux__)
 	int rc=::write(fd,p,l);
+#else
+ 	struct sockaddr_ll sll;
+ 	memset(&sll, 0, sizeof(sll));
+ 	sll.sll_ifindex = ifindex_;
+ 	int rc = sendto(fd, p, l, 0, (struct sockaddr *)&sll, sizeof(sll));
+#endif
+
 #ifdef VCLEAR_DBG
 xdbg("/tmp/vclear_dbg.txt", "Bpfilter", "l: %d, rc: %d\n", l, rc);
 #endif	// VCLEAR_DBG
@@ -218,8 +324,13 @@
 uint32_t Bpfilter::getDLT() const {
 	int fd=fileDesc();
 	if(fd<0) return 0xffff; /* xxx */
+#if !defined(__linux__)
 	uint32_t dlt;
 	int rc=ioctl(fd,BIOCGDLT,&dlt);
 	if(rc<0) {perror("err:ioctl(BIOCGSTATS)");}
 	return dlt;}
+#else
+	/* Linux assumes ethernet */
+	return DLT_EN10MB;}
+#endif
 
diff -urN tahi-linux-3.0.12/lib/pkt/Bpfilter.h tahi-linux-3.0.12-linux/lib/pkt/Bpfilter.h
--- tahi-linux-3.0.12/lib/pkt/Bpfilter.h	2005-07-21 03:53:22.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/Bpfilter.h	2007-12-09 23:19:59.000000000 +0100
@@ -46,12 +46,16 @@
 #define	__Bpfilter_h__	1
 #include <sys/types.h>
 #include <sys/time.h>
-#include <net/bpf.h>
+// #include <net/bpf.h>
+#include <pcap-bpf.h>
 #include "CmString.h"
 struct Bpfilter {
 private:
 	int fd_;
 	uint32_t bufsize_;
+#if defined(__linux__)
+	int ifindex_;
+#endif
 public:
 	Bpfilter(CSTR);
 	int fileDesc() const;
@@ -64,7 +68,8 @@
 	int receive(caddr_t) const;
 	int nonblock_receive(caddr_t) const;
 	int send(caddr_t,uint32_t) const;
-	uint32_t Bpfilter::getDLT() const;
+//	uint32_t Bpfilter::getDLT() const;
+	uint32_t getDLT() const;
 };
 inline int Bpfilter::fileDesc() const {return fd_;}
 inline uint32_t Bpfilter::bufferSize() const {return bufsize_;}
diff -urN tahi-linux-3.0.12/lib/pkt/LxLexer.cc tahi-linux-3.0.12-linux/lib/pkt/LxLexer.cc
--- tahi-linux-3.0.12/lib/pkt/LxLexer.cc	2007-03-07 06:05:39.000000000 +0100
+++ tahi-linux-3.0.12-linux/lib/pkt/LxLexer.cc	2007-12-09 23:19:59.000000000 +0100
@@ -62,6 +62,13 @@
 #include "MfAlgorithm.h"
 #include "CmMain.h"
 #include <time.h>
+
+/* Enabling traces.  
+int yydebug = 0;
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+*/
 extern PObject* yylval;
 STR LxLexer::controls(STR s) {
 	DBGFLAGS(0)=yydebug;
@@ -285,7 +292,9 @@
 	function(new MfDESCBC("descbc",8,8,8));
 	function(new MfDESCBC_2("descbc_2", 8, 8, 8));		// binary args
 	function(new MfBLOWFISH("blowfish",8,8,8));
+#if ! defined(__linux__)
 	function(new MfRC5("rc5",8,8,8));
+#endif
 	function(new MfCAST128("cast128",8,8,8));
 	function(new MfDES3CBC("des3cbc",8*3,8,8));
 	function(new MfDES3CBC_2("des3cbc_2", 8 * 3, 8, 8));	// binary args
diff -urN tahi-linux-3.0.12/lib/pkt/Makefile tahi-linux-3.0.12-linux/lib/pkt/Makefile
--- tahi-linux-3.0.12/lib/pkt/Makefile	2006-08-31 03:57:56.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/Makefile	2007-12-09 23:19:58.000000000 +0100
@@ -1,14 +1,32 @@
-LIB=	Pkt
-YSRCS=	PzParse.y
-SRCS=	$(YSRCS:.y=.cc) LxToken.cc LxLexer.cc RAFControl.cc \
+CC=g++
+LIB    = Pkt
+Cm=../Cm/
+Pz=../Pz/
+YSRCS=  PzParse.y
+SRCS= \
+	PzParse.cc LxToken.cc LxLexer.cc RAFControl.cc \
 	PktAgent.cc PktRecv.cc PktClient.cc PktServer.cc StdAgent.cc \
 	BpfAgent.cc Bpfilter.cc Ringbuf.cc RunEnv.cc PktCtlClient.cc \
 	PktSndClient.cc PktRcvClient.cc PktBuf.cc PktQueue.cc bufStat.cc
 
-CXXFLAGS+=	-I. -I$(Cm) -I$(Pz) -DHAVE_BPF_HDRCMPLT -I/usr/include
-# CXXFLAGS+=	-DVCLEAR_DBG
+CXXFLAGS+= -I. -I$(Cm) -I$(Pz) -DHAVE_BPF_HDRCMPLT -I/usr/include -shared -fPIC -fno-strict-aliasing -pipe -g -DYYDEBUG -Woverloaded-virtual
 
-CLEANFILES+=	PzParse.h
-CLEANFILES+=	.depend
+CLEANFILES+=PzParse.h
+
+MKLINT=no
+# .include "bsd.lib.mk"
+
+all:    Pkt
+
+Pkt:
+	# yacc -dv PzParse.y
+	# mv y.tab.c PzParse.cc
+	# if cmp -s y.tab.h PzParse.h; then rm y.tab.h;  else mv y.tab.h PzParse.h; fi
+	# if test -f y.output ; then mv y.output PzParse.rule ; fi
+	$(CC) $(CXXFLAGS) $(SRCS) -o $(LIB) 
+	cp -v Pkt /usr/lib/libPkt.so
+
+clean:
+	- rm Pkt
+	- rm /usr/lib/libPkt.so
 
-.include "bsd.lib.mk"
Dateien tahi-linux-3.0.12/lib/pkt/Pkt und tahi-linux-3.0.12-linux/lib/pkt/Pkt sind verschieden.
diff -urN tahi-linux-3.0.12/lib/pkt/PktAgent.cc tahi-linux-3.0.12-linux/lib/pkt/PktAgent.cc
--- tahi-linux-3.0.12/lib/pkt/PktAgent.cc	2005-07-21 03:53:22.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/PktAgent.cc	2007-12-09 23:19:59.000000000 +0100
@@ -93,9 +93,10 @@
 xdbg("/tmp/vclear_dbg.txt", "PktAgent", "this: %p\n", this);
 #endif  // VCLEAR_DBG
 	h.length(l);
-	if(DBGFLAGS('o')) {
+//	if(DBGFLAGS('o')) {
 		uint16_t r=h.request()&0xffff;
-		printf("PktAgent::sendPacket  request=%4.4x len=%d\n",r,l);}
+		printf("PktAgent::sendPacket  request=%4.4x len=%d this %x \n",r,l,(CSTR)&h);
+// }
 	int rc=send((CSTR)&h,sizeof(h));
 	if(rc>=0 && l>0) {rc=send(s,l);}
 	return rc;}
diff -urN tahi-linux-3.0.12/lib/pkt/PktClient.cc tahi-linux-3.0.12-linux/lib/pkt/PktClient.cc
--- tahi-linux-3.0.12/lib/pkt/PktClient.cc	2003-10-23 06:37:31.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/PktClient.cc	2007-12-09 23:19:58.000000000 +0100
@@ -58,6 +58,7 @@
 	return rc;}
 
 int PktClient::sendPacket(tcpHead& h,int32_t l,CSTR s) {
+printf("DEBUG: sendPacket %x, %s \n",l,s);
 	int rc=PktReceiver::sendPacket(h,l,s);
 	if(rc<0) {
 		fprintf(stderr,"err: cannot send req=%d len=%d\n",
diff -urN tahi-linux-3.0.12/lib/pkt/PktCtlClient.cc tahi-linux-3.0.12-linux/lib/pkt/PktCtlClient.cc
--- tahi-linux-3.0.12/lib/pkt/PktCtlClient.cc	2003-04-17 04:22:20.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/PktCtlClient.cc	2007-12-09 23:19:59.000000000 +0100
@@ -55,7 +55,8 @@
 #include <sys/types.h>
 #include <sys/uio.h>
 #include <unistd.h>
-#include <net/bpf.h>
+// #include <net/bpf.h>
+#include <pcap-bpf.h>
 
 PktCtlClient::PktCtlClient(StringList pos):PktClient(),
 	command_(pos),parsed_(0) {}
diff -urN tahi-linux-3.0.12/lib/pkt/PktRcvClient.cc tahi-linux-3.0.12-linux/lib/pkt/PktRcvClient.cc
--- tahi-linux-3.0.12/lib/pkt/PktRcvClient.cc	2003-04-17 04:22:20.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/PktRcvClient.cc	2007-12-09 23:19:59.000000000 +0100
@@ -54,7 +54,8 @@
 #include "PAlgorithm.h"
 #include "RAFControl.h"
 #include <stdio.h>
-#include <net/bpf.h>
+// #include <net/bpf.h>
+#include <pcap-bpf.h>
 
 PktRcvClient::PktRcvClient(const McObject* m,AlgorithmFrames& l):PktClient(),
 	reverser_(m),candidates_(l),evalc(1) {}
diff -urN tahi-linux-3.0.12/lib/pkt/PktRecv.cc tahi-linux-3.0.12-linux/lib/pkt/PktRecv.cc
--- tahi-linux-3.0.12/lib/pkt/PktRecv.cc	2005-07-21 03:53:22.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/PktRecv.cc	2007-12-09 23:19:58.000000000 +0100
@@ -80,6 +80,7 @@
 	tcpHead h=header();
 	h.request(h.request()|eResponse_);
 	h.result(r);
+printf("DEBUG: PktRecv.cc 0x%x \n",s);
 	return sendPacket(h,l,s)>=0?0:-1;}
 
 //======================================================================
@@ -125,13 +126,14 @@
 	eRequest r=(eRequest)request();
 	if(DBGFLAGS('i')) {
 		printf("PktReceiver::analizePacket  request=%4.4x\n",r&0xffff);}
-	if(DBGFLAGS('x')) {
+//	if(DBGFLAGS('x')) {
 		printf("PktReceiver::analizePacket\n");
 		printf("    request=%4.4x length=%d, result=%d\n",
 		       r&0xffff,header().length(),header().result());
 		PvOctets body(header().length(),(OCTSTR)buffer(0));
 		body.print();
-		printf("\n");}
+		printf("\n");
+//}
 	if(r&eResponse_)	{rc=analizeConfirmation(r&eMask_);}
 	else			{rc=analizeRequest(r);}
 	return rc;}
diff -urN tahi-linux-3.0.12/lib/pkt/PktServer.cc tahi-linux-3.0.12-linux/lib/pkt/PktServer.cc
--- tahi-linux-3.0.12/lib/pkt/PktServer.cc	2005-07-21 03:53:22.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/PktServer.cc	2007-12-09 23:19:59.000000000 +0100
@@ -48,7 +48,8 @@
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/ioctl.h>
-#include <net/bpf.h>
+// #include <net/bpf.h>
+#include <pcap-bpf.h>
 #include <unistd.h>
 #include "CmDispatch.h"
 #include "CmMain.h"
diff -urN tahi-linux-3.0.12/lib/pkt/PzParse.cc tahi-linux-3.0.12-linux/lib/pkt/PzParse.cc
--- tahi-linux-3.0.12/lib/pkt/PzParse.cc	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/lib/pkt/PzParse.cc	2007-12-09 23:19:59.000000000 +0100
@@ -0,0 +1,2450 @@
+/* A Bison parser, made by GNU Bison 2.1.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* Written by Richard Stallman by simplifying the original so called
+   ``semantic'' parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     NAME = 258,
+     STRING = 259,
+     NUMBER = 260,
+     ADD = 261,
+     SUB = 262,
+     MUL = 263,
+     AND = 264,
+     OR = 265,
+     XOR = 266,
+     QUEST = 267,
+     COLON = 268,
+     NOT = 269,
+     INC = 270,
+     DEC = 271,
+     ASOP = 272,
+     RELOP = 273,
+     EQUOP = 274,
+     DIVOP = 275,
+     SHIFTL = 276,
+     SHIFTR = 277,
+     ANDAND = 278,
+     XORXOR = 279,
+     OROR = 280,
+     FUNCTION = 281,
+     GENFUNC = 282,
+     PADFUNC = 283,
+     AUTHFUNC = 284,
+     CRYPTFUNC = 285,
+     IKE_CRYPTFUNC = 286,
+     BSAFUNC = 287,
+     IKE_P2_HASHFUNC = 288,
+     DHCPAUTHFUNC = 289,
+     FRAME = 290,
+     PACKET = 291,
+     HEADER = 292,
+     UPPER = 293,
+     ISAKMP_UPPER = 294,
+     OPTION = 295,
+     PAYLOAD = 296,
+     DNSHDR = 297,
+     PACKET_REF = 298,
+     HEADER_REF = 299,
+     EXTENT_REF = 300,
+     UPPER_REF = 301,
+     OPTION_REF = 302,
+     ISAKMP_ENCRYPTION_REF = 303,
+     PAYLOAD_REF = 304,
+     DNSQD_REF = 305,
+     DNSAN_REF = 306,
+     DNSNS_REF = 307,
+     DNSAR_REF = 308,
+     ALGORITHM = 309,
+     ALGOMEM_PAD = 310,
+     ALGOMEM_CRYPT = 311,
+     ALGOMEM_AUTH = 312,
+     ALGOFUNC = 313,
+     ALGORITHM_REF = 314,
+     MEMBER = 315,
+     DATA = 316,
+     PAD = 317,
+     OCTETS = 318,
+     ANY = 319,
+     AUTO = 320,
+     ZERO = 321,
+     FILL = 322,
+     STOP = 323,
+     BOOL = 324,
+     VOID = 325,
+     V4ADDR = 326,
+     V6ADDR = 327,
+     ETHER = 328,
+     DUMMY = 329,
+     LP = 330,
+     RP = 331,
+     LC = 332,
+     RC = 333,
+     LB = 334,
+     RB = 335,
+     CM = 336,
+     SM = 337,
+     EQ = 338,
+     NE = 339,
+     LT = 340,
+     GT = 341,
+     LE = 342,
+     GE = 343,
+     SH = 344,
+     SQ = 345
+   };
+#endif
+/* Tokens.  */
+#define NAME 258
+#define STRING 259
+#define NUMBER 260
+#define ADD 261
+#define SUB 262
+#define MUL 263
+#define AND 264
+#define OR 265
+#define XOR 266
+#define QUEST 267
+#define COLON 268
+#define NOT 269
+#define INC 270
+#define DEC 271
+#define ASOP 272
+#define RELOP 273
+#define EQUOP 274
+#define DIVOP 275
+#define SHIFTL 276
+#define SHIFTR 277
+#define ANDAND 278
+#define XORXOR 279
+#define OROR 280
+#define FUNCTION 281
+#define GENFUNC 282
+#define PADFUNC 283
+#define AUTHFUNC 284
+#define CRYPTFUNC 285
+#define IKE_CRYPTFUNC 286
+#define BSAFUNC 287
+#define IKE_P2_HASHFUNC 288
+#define DHCPAUTHFUNC 289
+#define FRAME 290
+#define PACKET 291
+#define HEADER 292
+#define UPPER 293
+#define ISAKMP_UPPER 294
+#define OPTION 295
+#define PAYLOAD 296
+#define DNSHDR 297
+#define PACKET_REF 298
+#define HEADER_REF 299
+#define EXTENT_REF 300
+#define UPPER_REF 301
+#define OPTION_REF 302
+#define ISAKMP_ENCRYPTION_REF 303
+#define PAYLOAD_REF 304
+#define DNSQD_REF 305
+#define DNSAN_REF 306
+#define DNSNS_REF 307
+#define DNSAR_REF 308
+#define ALGORITHM 309
+#define ALGOMEM_PAD 310
+#define ALGOMEM_CRYPT 311
+#define ALGOMEM_AUTH 312
+#define ALGOFUNC 313
+#define ALGORITHM_REF 314
+#define MEMBER 315
+#define DATA 316
+#define PAD 317
+#define OCTETS 318
+#define ANY 319
+#define AUTO 320
+#define ZERO 321
+#define FILL 322
+#define STOP 323
+#define BOOL 324
+#define VOID 325
+#define V4ADDR 326
+#define V6ADDR 327
+#define ETHER 328
+#define DUMMY 329
+#define LP 330
+#define RP 331
+#define LC 332
+#define RC 333
+#define LB 334
+#define RB 335
+#define CM 336
+#define SM 337
+#define EQ 338
+#define NE 339
+#define LT 340
+#define GT 341
+#define LE 342
+#define GE 343
+#define SH 344
+#define SQ 345
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 170 "PzParse.y"
+
+#include "CmTypes.h"
+#include "LxLexer.h"
+#include "PObject.h"
+#include "PcObject.h"
+#include "PvObject.h"
+#include "PvOctets.h"
+#include "McObject.h"
+#define YYSTYPE	PObject*
+
+#if defined(__FreeBSD__) && __FreeBSD__ >= 4
+#define YYPARSE_PARAM lexer
+#define YYPARSE_PARAM_TYPE LxLexer&
+#define yyparse(lex)parse(lex)
+#else
+#if ! defined(__linux__)
+#define	yyparse()parse(LxLexer& lexer)
+#else
+#define	yyparse(void)parse(LxLexer& lexer)
+#endif
+#endif
+#define	yylex()lexer.lex(compound_)
+#define yyerror lexer.yaccError
+
+static PObject* compound_=0;
+static PoQueue funcQue_;
+static PvFunction* function_=0;
+static PvNumbers* numbers_=0;
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+typedef int YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 219 of yacc.c.  */
+#line 306 "y.tab.c"
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+#if ! defined (yyoverflow) || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if defined (__STDC__) || defined (__cplusplus)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     define YYINCLUDED_STDLIB_H
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning. */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
+#  endif
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
+	&& (defined (__STDC__) || defined (__cplusplus)))
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifdef __cplusplus
+}
+#  endif
+# endif
+#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+
+
+#if (! defined (yyoverflow) \
+     && (! defined (__cplusplus) \
+	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  short int yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (short int) + sizeof (YYSTYPE))			\
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined (__GNUC__) && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (0)
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (0)
+
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+   typedef signed char yysigned_char;
+#else
+   typedef short int yysigned_char;
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL  41
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   193
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS  91
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS  100
+/* YYNRULES -- Number of rules. */
+#define YYNRULES  159
+/* YYNRULES -- Number of states. */
+#define YYNSTATES  274
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   345
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const unsigned char yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const unsigned short int yyprhs[] =
+{
+       0,     0,     3,     5,     6,     8,    10,    13,    15,    17,
+      19,    21,    23,    25,    27,    29,    31,    35,    39,    42,
+      46,    50,    54,    58,    62,    65,    69,    73,    76,    80,
+      84,    88,    92,    96,   101,   105,   109,   111,   115,   119,
+     121,   125,   129,   135,   136,   138,   140,   143,   144,   146,
+     148,   151,   153,   156,   157,   159,   161,   164,   165,   167,
+     168,   170,   171,   173,   174,   176,   177,   179,   180,   182,
+     183,   185,   186,   188,   189,   191,   195,   199,   203,   207,
+     211,   215,   219,   223,   227,   231,   235,   239,   243,   247,
+     251,   256,   261,   266,   271,   276,   281,   286,   288,   290,
+     292,   294,   296,   298,   300,   302,   304,   306,   308,   310,
+     313,   316,   319,   322,   325,   328,   331,   333,   335,   337,
+     341,   342,   344,   346,   350,   352,   354,   356,   358,   360,
+     362,   363,   365,   367,   371,   374,   378,   381,   385,   388,
+     392,   395,   399,   403,   406,   410,   413,   417,   420,   424,
+     426,   428,   430,   432,   434,   436,   438,   440,   442,   444
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const short int yyrhs[] =
+{
+      92,     0,    -1,    93,    -1,    -1,    94,    -1,    95,    -1,
+      94,    95,    -1,    96,    -1,    99,    -1,   102,    -1,   120,
+      -1,   105,    -1,   108,    -1,   111,    -1,   114,    -1,   117,
+      -1,    97,    98,    78,    -1,    35,     3,    77,    -1,   140,
+     133,    -1,   100,   101,    78,    -1,    36,     3,    77,    -1,
+     140,   123,   131,    -1,   103,   104,    78,    -1,    37,     3,
+      77,    -1,   125,   130,    -1,   106,   107,    78,    -1,    40,
+       3,    77,    -1,   125,   130,    -1,   109,   110,    78,    -1,
+      38,     3,    77,    -1,   132,   125,   130,    -1,   112,   113,
+      78,    -1,    39,     3,    77,    -1,   140,   134,   125,   130,
+      -1,   115,   116,    78,    -1,    41,     3,    77,    -1,   127,
+      -1,   118,   119,    78,    -1,    54,     3,    77,    -1,   128,
+      -1,   121,   122,    78,    -1,    42,     3,    77,    -1,   125,
+     135,   136,   137,   138,    -1,    -1,   124,    -1,   142,    -1,
+     124,   142,    -1,    -1,   126,    -1,   150,    -1,   126,   150,
+      -1,   149,    -1,   127,   149,    -1,    -1,   129,    -1,   151,
+      -1,   129,   151,    -1,    -1,   144,    -1,    -1,   143,    -1,
+      -1,   140,    -1,    -1,   139,    -1,    -1,   141,    -1,    -1,
+     145,    -1,    -1,   146,    -1,    -1,   147,    -1,    -1,   148,
+      -1,    43,   157,    82,    -1,    44,   157,    82,    -1,    48,
+     157,    82,    -1,    45,   157,    82,    -1,    46,   159,    82,
+      -1,    49,   158,    82,    -1,    50,   160,    82,    -1,    51,
+     160,    82,    -1,    52,   160,    82,    -1,    53,   160,    82,
+      -1,    61,   161,    82,    -1,    60,   164,    82,    -1,    61,
+     161,    82,    -1,    47,   160,    82,    -1,    59,   157,    82,
+      -1,    60,    83,   176,    82,    -1,    60,    83,   178,    82,
+      -1,    60,    83,   180,    82,    -1,    55,    83,   181,    82,
+      -1,    56,    83,   183,    82,    -1,    56,    83,   185,    82,
+      -1,    57,    83,   187,    82,    -1,     5,    -1,     5,    -1,
+     166,    -1,   174,    -1,     3,    -1,   188,    -1,     3,    -1,
+     188,    -1,   174,    -1,     5,    -1,   188,    -1,   174,    -1,
+      83,     3,    -1,    83,   169,    -1,   189,   154,    -1,   189,
+     155,    -1,   189,   153,    -1,   189,   156,    -1,   190,   152,
+      -1,   162,    -1,   163,    -1,    77,    -1,   165,   167,    78,
+      -1,    -1,   168,    -1,     5,    -1,   168,    81,     5,    -1,
+      64,    -1,     3,    -1,     5,    -1,     4,    -1,     3,    -1,
+     174,    -1,    -1,   172,    -1,   170,    -1,   172,    81,   170,
+      -1,    26,    75,    -1,   173,   171,    76,    -1,    32,    75,
+      -1,   175,   171,    76,    -1,    33,    75,    -1,   177,   171,
+      76,    -1,    34,    75,    -1,   179,   171,    76,    -1,    28,
+      75,    76,    -1,    30,    75,    -1,   182,   171,    76,    -1,
+      31,    75,    -1,   184,   171,    76,    -1,    29,    75,    -1,
+     186,   171,    76,    -1,    64,    -1,    65,    -1,    66,    -1,
+      67,    -1,    68,    -1,    83,    -1,    84,    -1,    85,    -1,
+      86,    -1,    87,    -1,    88,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const unsigned short int yyrline[] =
+{
+       0,   201,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   219,   220,   222,   224,
+     225,   226,   228,   229,   230,   232,   233,   234,   236,   237,
+     238,   240,   241,   242,   244,   245,   246,   248,   249,   250,
+     252,   253,   254,   259,   260,   261,   262,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   279,   280,   281,
+     282,   283,   284,   285,   286,   288,   289,   291,   292,   294,
+     295,   297,   298,   300,   301,   307,   309,   311,   313,   315,
+     319,   323,   324,   325,   326,   329,   332,   333,   334,   335,
+     336,   337,   340,   346,   348,   350,   352,   358,   359,   360,
+     361,   362,   363,   364,   365,   366,   367,   368,   369,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,   381,   382,
+     387,   388,   389,   390,   392,   393,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   404,   407,   409,   411,   413,
+     415,   417,   430,   431,   433,   436,   438,   441,   443,   447,
+     448,   449,   450,   451,   453,   454,   455,   456,   457,   458
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "NAME", "STRING", "NUMBER", "ADD", "SUB",
+  "MUL", "AND", "OR", "XOR", "QUEST", "COLON", "NOT", "INC", "DEC", "ASOP",
+  "RELOP", "EQUOP", "DIVOP", "SHIFTL", "SHIFTR", "ANDAND", "XORXOR",
+  "OROR", "FUNCTION", "GENFUNC", "PADFUNC", "AUTHFUNC", "CRYPTFUNC",
+  "IKE_CRYPTFUNC", "BSAFUNC", "IKE_P2_HASHFUNC", "DHCPAUTHFUNC", "FRAME",
+  "PACKET", "HEADER", "UPPER", "ISAKMP_UPPER", "OPTION", "PAYLOAD",
+  "DNSHDR", "PACKET_REF", "HEADER_REF", "EXTENT_REF", "UPPER_REF",
+  "OPTION_REF", "ISAKMP_ENCRYPTION_REF", "PAYLOAD_REF", "DNSQD_REF",
+  "DNSAN_REF", "DNSNS_REF", "DNSAR_REF", "ALGORITHM", "ALGOMEM_PAD",
+  "ALGOMEM_CRYPT", "ALGOMEM_AUTH", "ALGOFUNC", "ALGORITHM_REF", "MEMBER",
+  "DATA", "PAD", "OCTETS", "ANY", "AUTO", "ZERO", "FILL", "STOP", "BOOL",
+  "VOID", "V4ADDR", "V6ADDR", "ETHER", "DUMMY", "LP", "RP", "LC", "RC",
+  "LB", "RB", "CM", "SM", "EQ", "NE", "LT", "GT", "LE", "GE", "SH", "SQ",
+  "$accept", "file", "define.l.", "define.l", "define", "frame.def",
+  "frame.prefix", "frame.body", "packet.def", "packet.prefix",
+  "packet.body", "header.def", "header.prefix", "header.body",
+  "option.def", "option.prefix", "option.body", "upper.def",
+  "upper.prefix", "upper.body", "isakmp_upper.def", "isakmp_upper.prefix",
+  "isakmp_upper.body", "payload.def", "payload.prefix", "payload.body",
+  "algorithm.def", "algorithm.prefix", "algorithm.body", "dnshdr.def",
+  "dnshdr.prefix", "dnshdr.body", "extent.ref.l.", "extent.ref.l",
+  "member.def.l.", "member.def.l", "data.def.l", "algomem.def.l.",
+  "algomem.def.l", "payload.ref.", "upper.ref.", "header.ref.",
+  "packet.ref.", "isakmp_encryption.ref.", "dnsqd.ref.", "dnsan.ref.",
+  "dnsns.ref.", "dnsar.ref.", "packet.ref", "header.ref",
+  "isakmp_encryption.ref", "extent.ref", "upper.ref", "payload.ref",
+  "dnsqd.ref", "dnsan.ref", "dnsns.ref", "dnsar.ref", "data.def",
+  "member.def", "algomem.def", "cmp.term", "data.term", "upper.term",
+  "opt.term", "mem.term", "eq.name", "eq.anyname", "eq.upper.term",
+  "eq.opt.term", "eq.data.term", "eq.mem.term", "cmp.value", "op.mem.term",
+  "values.prefix", "values", "number.l.", "number.l", "anyname",
+  "arg.term", "arg.l.", "arg.l", "func_call", "function", "bsa_call",
+  "bsafunc", "ike_p2_hash_call", "ike_p2_hashfunc", "dhcpauth_call",
+  "dhcpauthfunc", "padfunc", "crpyt_call", "crpytfunc", "ike_crpyt_call",
+  "ike_crpytfunc", "auth_call", "authfunc", "action", "eq", "cmp", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const unsigned short int yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const unsigned char yyr1[] =
+{
+       0,    91,    92,    93,    93,    94,    94,    95,    95,    95,
+      95,    95,    95,    95,    95,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   123,   124,   124,   125,   125,   126,
+     126,   127,   127,   128,   128,   129,   129,   130,   130,   131,
+     131,   132,   132,   133,   133,   134,   134,   135,   135,   136,
+     136,   137,   137,   138,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   150,   150,   150,
+     150,   150,   150,   151,   151,   151,   151,   152,   153,   153,
+     153,   154,   154,   155,   155,   155,   156,   156,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   164,   165,   166,
+     167,   167,   168,   168,   169,   169,   170,   170,   170,   170,
+     171,   171,   172,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     188,   188,   188,   188,   189,   190,   190,   190,   190,   190
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const unsigned char yyr2[] =
+{
+       0,     2,     1,     0,     1,     1,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     3,     2,     3,
+       3,     3,     3,     3,     2,     3,     3,     2,     3,     3,
+       3,     3,     3,     4,     3,     3,     1,     3,     3,     1,
+       3,     3,     5,     0,     1,     1,     2,     0,     1,     1,
+       2,     1,     2,     0,     1,     1,     2,     0,     1,     0,
+       1,     0,     1,     0,     1,     0,     1,     0,     1,     0,
+       1,     0,     1,     0,     1,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
+       4,     4,     4,     4,     4,     4,     4,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+       2,     2,     2,     2,     2,     2,     1,     1,     1,     3,
+       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
+       0,     1,     1,     3,     2,     3,     2,     3,     2,     3,
+       2,     3,     3,     2,     3,     2,     3,     2,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const unsigned char yydefact[] =
+{
+       3,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     2,     4,     5,     7,     0,     8,     0,     9,    47,
+      11,    47,    12,    61,    13,     0,    14,     0,    15,    53,
+      10,    47,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     1,     6,     0,     0,    63,     0,    43,     0,     0,
+       0,     0,     0,    57,    48,    49,     0,    57,     0,    47,
+      62,     0,    65,     0,     0,    36,    51,     0,     0,     0,
+       0,    39,    54,    55,     0,    67,    17,    20,    23,    29,
+      32,    26,    35,    41,    38,     0,     0,    16,     0,    18,
+      64,    19,     0,    59,    44,    45,   154,     0,     0,     0,
+     154,   155,   156,   157,   158,   159,   116,   117,     0,     0,
+       0,     0,     0,    22,     0,    24,    58,    50,    25,    27,
+      28,    57,    31,     0,    47,    66,     0,    34,    52,     0,
+       0,     0,    37,    56,    40,     0,    69,    68,   109,    76,
+       0,     0,     0,    21,    60,    46,    88,   103,     0,   149,
+     150,   151,   152,   153,   112,   130,   105,   104,    89,     0,
+       0,     0,   130,     0,   130,     0,   130,     0,    86,   106,
+     114,   108,   107,    97,   115,    87,    98,   118,   113,   120,
+      99,   100,     0,     0,    30,     0,    57,    85,     0,     0,
+       0,     0,   130,     0,   130,     0,     0,   130,     0,     0,
+       0,    71,    70,    75,    78,     0,     0,   134,   128,   127,
+     126,   132,     0,   131,   129,   136,   138,   140,     0,    90,
+       0,    91,     0,    92,   122,     0,   121,   125,   124,   110,
+      80,    77,    33,     0,    93,   143,   145,     0,    94,     0,
+      95,   147,     0,    96,    81,     0,     0,    73,    72,    79,
+     101,   111,   102,   135,     0,   137,   139,   141,   119,     0,
+     142,   144,   146,   148,    82,     0,     0,    42,    74,   133,
+     123,    83,     0,    84
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const short int yydefgoto[] =
+{
+      -1,    10,    11,    12,    13,    14,    15,    44,    16,    17,
+      46,    18,    19,    52,    20,    21,    56,    22,    23,    58,
+      24,    25,    61,    26,    27,    64,    28,    29,    70,    30,
+      31,    74,    93,    94,    53,    54,    65,    71,    72,   115,
+     143,    59,    89,   124,   136,   201,   247,   267,    90,    45,
+     125,    95,   144,   116,   137,   202,   248,   268,    66,    55,
+      73,   174,   178,   251,   154,   170,    86,   183,   205,    97,
+     111,   106,   107,   108,   179,   180,   225,   226,   229,   211,
+     212,   213,   155,   214,   162,   163,   164,   165,   166,   167,
+     189,   192,   193,   194,   195,   197,   198,   157,    98,   110
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -151
+static const short int yypact[] =
+{
+      52,    20,    37,    43,    45,    56,    57,    58,    59,    60,
+      27,  -151,    52,  -151,  -151,    51,  -151,    51,  -151,   -26,
+    -151,   -26,  -151,    51,  -151,    51,  -151,     3,  -151,   -19,
+    -151,   -26,   -11,    -9,    21,    23,    25,    26,    28,    30,
+      31,  -151,  -151,    14,    32,    66,    34,    68,    18,    14,
+     -33,    18,    36,    67,   -26,  -151,    39,    67,    40,   -26,
+    -151,    41,    72,    18,    44,     3,  -151,    38,    42,    46,
+      48,  -151,   -19,  -151,    49,    65,  -151,  -151,  -151,  -151,
+    -151,  -151,  -151,  -151,  -151,   120,    53,  -151,    14,  -151,
+    -151,  -151,    14,    78,    68,  -151,  -151,    54,     5,    55,
+      24,  -151,  -151,  -151,  -151,  -151,  -151,  -151,    61,    17,
+     123,    62,     2,  -151,    47,  -151,  -151,  -151,  -151,  -151,
+    -151,    67,  -151,    14,   -26,  -151,    63,  -151,  -151,   105,
+     -21,   109,  -151,  -151,  -151,    18,    83,  -151,  -151,  -151,
+      64,    69,    18,  -151,  -151,  -151,  -151,  -151,    73,  -151,
+    -151,  -151,  -151,  -151,  -151,    15,  -151,  -151,  -151,    74,
+      75,    77,    15,    71,    15,    76,    15,    79,  -151,  -151,
+    -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,   134,
+    -151,  -151,    22,    80,  -151,    81,    67,  -151,    82,    84,
+      85,    89,    15,    86,    15,    87,    90,    15,    88,    91,
+      18,    95,  -151,  -151,  -151,    92,    10,  -151,  -151,  -151,
+    -151,  -151,    96,    94,  -151,  -151,  -151,  -151,   100,  -151,
+     101,  -151,   102,  -151,  -151,    93,    98,  -151,  -151,  -151,
+    -151,  -151,  -151,   104,  -151,  -151,  -151,   106,  -151,   107,
+    -151,  -151,   108,  -151,  -151,    99,    18,   103,  -151,  -151,
+    -151,  -151,  -151,  -151,    15,  -151,  -151,  -151,  -151,   135,
+    -151,  -151,  -151,  -151,  -151,   110,    18,  -151,  -151,  -151,
+    -151,  -151,   111,  -151
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const short int yypgoto[] =
+{
+    -151,  -151,  -151,  -151,   129,  -151,  -151,  -151,  -151,  -151,
+    -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,
+    -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,
+    -151,  -151,  -151,  -151,   -20,  -151,  -151,  -151,  -151,   -54,
+    -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,     7,
+    -151,    97,  -151,  -151,  -151,  -151,  -151,  -151,   121,   113,
+      70,  -151,  -151,  -151,  -151,  -151,   -43,  -151,  -151,  -135,
+     122,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -151,  -100,
+    -150,  -151,  -151,   -83,  -151,  -151,  -151,  -151,  -151,  -151,
+    -151,  -151,  -151,  -151,  -151,  -151,  -151,  -107,   -46,  -151
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const unsigned short int yytable[] =
+{
+     199,    57,   172,   119,   109,   112,    99,   176,   147,   190,
+     191,    75,   218,   250,   220,   156,   222,   112,   208,   209,
+     210,    48,   169,    32,    47,   227,   171,    41,   148,   181,
+      60,   148,    62,    49,    50,    51,    67,    68,    69,   121,
+      33,   148,   237,   148,   239,   140,    34,   242,    35,   141,
+     100,   101,   102,   103,   104,   105,   159,   160,   161,    36,
+      37,    38,    39,    40,    63,   245,    76,   184,    77,   149,
+     150,   151,   152,   153,   149,   150,   151,   152,   153,   177,
+     185,   149,   150,   151,   152,   153,   228,     1,     2,     3,
+       4,     5,     6,     7,     8,    43,   206,    85,    78,   252,
+      79,    96,    80,    81,   186,    82,     9,    83,    84,    88,
+      87,   265,    91,    92,   113,   135,   114,   118,   120,   122,
+     123,   129,   127,   138,   142,   130,   132,   134,   173,   131,
+     182,   272,   232,   188,   200,   139,   146,   158,   196,   224,
+     270,    42,   133,   168,   175,   187,   203,   246,   207,   215,
+     216,   204,   217,   219,   269,     0,   266,   233,   221,     0,
+     235,   223,   230,   231,   236,   241,   234,   117,   238,   240,
+     243,   258,   253,   244,   249,   254,   255,   256,   257,   259,
+     260,   264,   261,   262,   263,   126,   128,     0,     0,     0,
+       0,   145,   271,   273
+};
+
+static const short int yycheck[] =
+{
+     135,    21,   109,    57,    50,    51,    49,     5,     3,    30,
+      31,    31,   162,     3,   164,    98,   166,    63,     3,     4,
+       5,    47,     5,     3,    17,     3,   109,     0,    26,   112,
+      23,    26,    25,    59,    60,    61,    55,    56,    57,    59,
+       3,    26,   192,    26,   194,    88,     3,   197,     3,    92,
+      83,    84,    85,    86,    87,    88,    32,    33,    34,     3,
+       3,     3,     3,     3,    61,   200,    77,   121,    77,    64,
+      65,    66,    67,    68,    64,    65,    66,    67,    68,    77,
+     123,    64,    65,    66,    67,    68,    64,    35,    36,    37,
+      38,    39,    40,    41,    42,    44,   142,    83,    77,   206,
+      77,    83,    77,    77,   124,    77,    54,    77,    77,    43,
+      78,   246,    78,    45,    78,    50,    49,    78,    78,    78,
+      48,    83,    78,     3,    46,    83,    78,    78,     5,    83,
+      83,   266,   186,    28,    51,    82,    82,    82,    29,     5,
+       5,    12,    72,    82,    82,    82,    82,    52,    75,    75,
+      75,    82,    75,    82,   254,    -1,    53,    75,    82,    -1,
+      75,    82,    82,    82,    75,    75,    82,    54,    82,    82,
+      82,    78,    76,    82,    82,    81,    76,    76,    76,    81,
+      76,    82,    76,    76,    76,    63,    65,    -1,    -1,    -1,
+      -1,    94,    82,    82
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const unsigned char yystos[] =
+{
+       0,    35,    36,    37,    38,    39,    40,    41,    42,    54,
+      92,    93,    94,    95,    96,    97,    99,   100,   102,   103,
+     105,   106,   108,   109,   111,   112,   114,   115,   117,   118,
+     120,   121,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     0,    95,    44,    98,   140,   101,   140,    47,    59,
+      60,    61,   104,   125,   126,   150,   107,   125,   110,   132,
+     140,   113,   140,    61,   116,   127,   149,    55,    56,    57,
+     119,   128,   129,   151,   122,   125,    77,    77,    77,    77,
+      77,    77,    77,    77,    77,    83,   157,    78,    43,   133,
+     139,    78,    45,   123,   124,   142,    83,   160,   189,   157,
+      83,    84,    85,    86,    87,    88,   162,   163,   164,   189,
+     190,   161,   189,    78,    49,   130,   144,   150,    78,   130,
+      78,   125,    78,    48,   134,   141,   161,    78,   149,    83,
+      83,    83,    78,   151,    78,    50,   135,   145,     3,    82,
+     157,   157,    46,   131,   143,   142,    82,     3,    26,    64,
+      65,    66,    67,    68,   155,   173,   174,   188,    82,    32,
+      33,    34,   175,   176,   177,   178,   179,   180,    82,     5,
+     156,   174,   188,     5,   152,    82,     5,    77,   153,   165,
+     166,   174,    83,   158,   130,   157,   125,    82,    28,   181,
+      30,    31,   182,   183,   184,   185,    29,   186,   187,   160,
+      51,   136,   146,    82,    82,   159,   189,    75,     3,     4,
+       5,   170,   171,   172,   174,    75,    75,    75,   171,    82,
+     171,    82,   171,    82,     5,   167,   168,     3,    64,   169,
+      82,    82,   130,    75,    82,    75,    75,   171,    82,   171,
+      82,    75,   171,    82,    82,   160,    52,   137,   147,    82,
+       3,   154,   188,    76,    81,    76,    76,    76,    78,    81,
+      76,    76,    76,    76,    82,   160,    53,   138,   148,   170,
+       5,    82,   160,    82
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK;						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (0)
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (N)								\
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (0)
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+              (Loc).first_line, (Loc).first_column,	\
+              (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (0)
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)		\
+do {								\
+  if (yydebug)							\
+    {								\
+      YYFPRINTF (stderr, "%s ", Title);				\
+      yysymprint (stderr,					\
+                  Type, Value);	\
+      YYFPRINTF (stderr, "\n");					\
+    }								\
+} while (0)
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_stack_print (short int *bottom, short int *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    short int *bottom;
+    short int *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (/* Nothing. */; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_reduce_print (int yyrule)
+#else
+static void
+yy_reduce_print (yyrule)
+    int yyrule;
+#endif
+{
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
+             yyrule - 1, yylno);
+  /* Print the symbols being reduced, and their result.  */
+  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (Rule);		\
+} while (0)
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined (__GLIBC__) && defined (_STRING_H)
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+static YYSIZE_T
+#   if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+#   else
+yystrlen (yystr)
+     const char *yystr;
+#   endif
+{
+  const char *yys = yystr;
+
+  while (*yys++ != '\0')
+    continue;
+
+  return yys - yystr - 1;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+static char *
+#   if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+#   else
+yystpcpy (yydest, yysrc)
+     char *yydest;
+     const char *yysrc;
+#   endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      size_t yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+#endif /* YYERROR_VERBOSE */
+
+
+
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yysymprint (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+  switch (yytype)
+    {
+      default:
+        break;
+    }
+  YYFPRINTF (yyoutput, ")");
+}
+
+#endif /* ! YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  /* Pacify ``unused variable'' warnings.  */
+  (void) yyvaluep;
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+        break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM);
+# else
+int yyparse ();
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yyparse (void *YYPARSE_PARAM)
+# else
+int yyparse (YYPARSE_PARAM)
+  void *YYPARSE_PARAM;
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+    ;
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  short int yyssa[YYINITDEPTH];
+  short int *yyss = yyssa;
+  short int *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* When reducing, the number of symbols on the RHS of the reduced
+     rule.  */
+  int yylen;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed. so pushing a state here evens the stacks.
+     */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack. Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	short int *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	short int *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a look-ahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 3:
+#line 202 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 16:
+#line 219 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 17:
+#line 220 "PzParse.y"
+    {
+				compound_=(yyvsp[-2])->name((yyvsp[-1])); PcObject::frame((yyvsp[-1]));}
+    break;
+
+  case 19:
+#line 224 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 20:
+#line 225 "PzParse.y"
+    {compound_=(yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 22:
+#line 228 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 23:
+#line 229 "PzParse.y"
+    {compound_=(yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 25:
+#line 232 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 26:
+#line 233 "PzParse.y"
+    {compound_=(yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 28:
+#line 236 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 29:
+#line 237 "PzParse.y"
+    {compound_=(yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 31:
+#line 240 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 32:
+#line 241 "PzParse.y"
+    {compound_=(yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 34:
+#line 244 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 35:
+#line 245 "PzParse.y"
+    {compound_=(yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 37:
+#line 248 "PzParse.y"
+    {compound_=0;}
+    break;
+
+  case 38:
+#line 249 "PzParse.y"
+    {compound_=(yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 40:
+#line 252 "PzParse.y"
+    {compound_ = 0;}
+    break;
+
+  case 41:
+#line 253 "PzParse.y"
+    {compound_ = (yyvsp[-2])->name((yyvsp[-1]));}
+    break;
+
+  case 43:
+#line 259 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 47:
+#line 267 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 53:
+#line 273 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 57:
+#line 279 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 59:
+#line 281 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 61:
+#line 283 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 63:
+#line 285 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 65:
+#line 288 "PzParse.y"
+    {(yyval) = 0;}
+    break;
+
+  case 67:
+#line 291 "PzParse.y"
+    {(yyval) = 0;}
+    break;
+
+  case 69:
+#line 294 "PzParse.y"
+    {(yyval) = 0;}
+    break;
+
+  case 71:
+#line 297 "PzParse.y"
+    {(yyval) = 0;}
+    break;
+
+  case 73:
+#line 300 "PzParse.y"
+    {(yyval) = 0;}
+    break;
+
+  case 75:
+#line 307 "PzParse.y"
+    {
+					compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 76:
+#line 309 "PzParse.y"
+    {
+					compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 77:
+#line 311 "PzParse.y"
+    {
+					compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 78:
+#line 313 "PzParse.y"
+    {
+					compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 79:
+#line 315 "PzParse.y"
+    {
+					compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 80:
+#line 319 "PzParse.y"
+    {
+					compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 81:
+#line 323 "PzParse.y"
+    {compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 82:
+#line 324 "PzParse.y"
+    {compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 83:
+#line 325 "PzParse.y"
+    {compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 84:
+#line 326 "PzParse.y"
+    {compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 85:
+#line 329 "PzParse.y"
+    {
+					compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 86:
+#line 332 "PzParse.y"
+    { compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 87:
+#line 333 "PzParse.y"
+    { compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 88:
+#line 334 "PzParse.y"
+    { compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 89:
+#line 335 "PzParse.y"
+    { compound_->member((yyvsp[-2])->rvalue((yyvsp[-1])));}
+    break;
+
+  case 90:
+#line 336 "PzParse.y"
+    { compound_->bsa_member((yyvsp[-1]));}
+    break;
+
+  case 91:
+#line 337 "PzParse.y"
+    {
+				compound_->member((yyvsp[-3])->rvalue((yyvsp[-1])));
+				compound_->ike_p2_hash_member((yyvsp[-1])); }
+    break;
+
+  case 92:
+#line 340 "PzParse.y"
+    { compound_->dhcpauth_member((yyvsp[-1]));}
+    break;
+
+  case 93:
+#line 346 "PzParse.y"
+    {
+					compound_->pad_member((yyvsp[-1]));}
+    break;
+
+  case 94:
+#line 348 "PzParse.y"
+    {
+					compound_->crypt_member((yyvsp[-1]));}
+    break;
+
+  case 95:
+#line 350 "PzParse.y"
+    {
+					compound_->crypt_member((yyvsp[-1]));}
+    break;
+
+  case 96:
+#line 352 "PzParse.y"
+    {
+					compound_->auth_member((yyvsp[-1]));}
+    break;
+
+  case 97:
+#line 358 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 98:
+#line 359 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 99:
+#line 360 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 100:
+#line 361 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 101:
+#line 362 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 102:
+#line 363 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 103:
+#line 364 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 104:
+#line 365 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 105:
+#line 366 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 106:
+#line 367 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 107:
+#line 368 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 108:
+#line 369 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 109:
+#line 371 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 110:
+#line 372 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 111:
+#line 373 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 112:
+#line 374 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 113:
+#line 375 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 114:
+#line 376 "PzParse.y"
+    {(yyval)=(yyvsp[-1])->rvalue((yyvsp[0]));}
+    break;
+
+  case 115:
+#line 377 "PzParse.y"
+    {(yyval)=(yyvsp[-1])->rvalue((yyvsp[0]));}
+    break;
+
+  case 116:
+#line 378 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 117:
+#line 379 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 118:
+#line 381 "PzParse.y"
+    {numbers_=new PvNumbers;}
+    break;
+
+  case 119:
+#line 382 "PzParse.y"
+    {
+				PvNumbers* ns=numbers_; numbers_=0;
+				PvOctets* oct=ns->octetString();
+				delete ns;
+				(yyval)=oct;}
+    break;
+
+  case 120:
+#line 387 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 121:
+#line 388 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 122:
+#line 389 "PzParse.y"
+    {numbers_->add((yyvsp[0]));}
+    break;
+
+  case 123:
+#line 390 "PzParse.y"
+    {numbers_->add((yyvsp[0]));}
+    break;
+
+  case 124:
+#line 392 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 125:
+#line 393 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 126:
+#line 394 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 127:
+#line 395 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 128:
+#line 396 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 129:
+#line 397 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 130:
+#line 398 "PzParse.y"
+    {(yyval)=0;}
+    break;
+
+  case 131:
+#line 399 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 132:
+#line 400 "PzParse.y"
+    {function_->argument((yyvsp[0]));}
+    break;
+
+  case 133:
+#line 401 "PzParse.y"
+    {function_->argument((yyvsp[0]));}
+    break;
+
+  case 134:
+#line 402 "PzParse.y"
+    {
+				function_=(PvFunction*)funcQue_.push((yyvsp[-1])); (yyval)=(yyvsp[-1]);}
+    break;
+
+  case 135:
+#line 404 "PzParse.y"
+    {
+				function_->checkArgument();
+				(yyval)=(yyvsp[-2]); function_=(PvFunction*)funcQue_.pop();}
+    break;
+
+  case 136:
+#line 407 "PzParse.y"
+    {function_ = (PvFunction*)funcQue_.push((yyvsp[-1])); (yyval)=(yyvsp[-1]);}
+    break;
+
+  case 137:
+#line 409 "PzParse.y"
+    {function_->checkArgument(); (yyval)=(yyvsp[-2]); function_ = (PvFunction*)funcQue_.pop();}
+    break;
+
+  case 138:
+#line 411 "PzParse.y"
+    {function_ = (PvFunction*)funcQue_.push((yyvsp[-1])); (yyval)=(yyvsp[-1]);}
+    break;
+
+  case 139:
+#line 413 "PzParse.y"
+    {function_->checkArgument(); (yyval)=(yyvsp[-2]); function_ = (PvFunction*)funcQue_.pop();}
+    break;
+
+  case 140:
+#line 415 "PzParse.y"
+    {function_ = (PvFunction*)funcQue_.push((yyvsp[-1])); (yyval)=(yyvsp[-1]);}
+    break;
+
+  case 141:
+#line 417 "PzParse.y"
+    {function_->checkArgument(); (yyval)=(yyvsp[-2]); function_ = (PvFunction*)funcQue_.pop();}
+    break;
+
+  case 142:
+#line 430 "PzParse.y"
+    {(yyval)=(yyvsp[-2]);}
+    break;
+
+  case 143:
+#line 431 "PzParse.y"
+    {
+				function_=(PvFunction*)funcQue_.push((yyvsp[-1])); (yyval)=(yyvsp[-1]);}
+    break;
+
+  case 144:
+#line 433 "PzParse.y"
+    {
+				function_->checkArgument();
+				(yyval)=(yyvsp[-2]); function_=(PvFunction*)funcQue_.pop();}
+    break;
+
+  case 145:
+#line 436 "PzParse.y"
+    {
+				function_=(PvFunction*)funcQue_.push((yyvsp[-1])); (yyval)=(yyvsp[-1]);}
+    break;
+
+  case 146:
+#line 438 "PzParse.y"
+    {
+				function_->checkArgument();
+				(yyval)=(yyvsp[-2]); function_=(PvFunction*)funcQue_.pop();}
+    break;
+
+  case 147:
+#line 441 "PzParse.y"
+    {
+				function_=(PvFunction*)funcQue_.push((yyvsp[-1])); (yyval)=(yyvsp[-1]);}
+    break;
+
+  case 148:
+#line 443 "PzParse.y"
+    {
+				function_->checkArgument();
+				(yyval)=(yyvsp[-2]); function_=(PvFunction*)funcQue_.pop();}
+    break;
+
+  case 149:
+#line 447 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 150:
+#line 448 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 151:
+#line 449 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 152:
+#line 450 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 153:
+#line 451 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 154:
+#line 453 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 155:
+#line 454 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 156:
+#line 455 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 157:
+#line 456 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 158:
+#line 457 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+  case 159:
+#line 458 "PzParse.y"
+    {(yyval)=(yyvsp[0]);}
+    break;
+
+
+      default: break;
+    }
+
+/* Line 1126 of yacc.c.  */
+#line 2181 "y.tab.c"
+
+  yyvsp -= yylen;
+  yyssp -= yylen;
+
+
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (YYPACT_NINF < yyn && yyn < YYLAST)
+	{
+	  int yytype = YYTRANSLATE (yychar);
+	  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+	  YYSIZE_T yysize = yysize0;
+	  YYSIZE_T yysize1;
+	  int yysize_overflow = 0;
+	  char *yymsg = 0;
+#	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5
+	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+	  int yyx;
+
+#if 0
+	  /* This is so xgettext sees the translatable formats that are
+	     constructed on the fly.  */
+	  YY_("syntax error, unexpected %s");
+	  YY_("syntax error, unexpected %s, expecting %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+	  YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+#endif
+	  char *yyfmt;
+	  char const *yyf;
+	  static char const yyunexpected[] = "syntax error, unexpected %s";
+	  static char const yyexpecting[] = ", expecting %s";
+	  static char const yyor[] = " or %s";
+	  char yyformat[sizeof yyunexpected
+			+ sizeof yyexpecting - 1
+			+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+			   * (sizeof yyor - 1))];
+	  char const *yyprefix = yyexpecting;
+
+	  /* Start YYX at -YYN if negative to avoid negative indexes in
+	     YYCHECK.  */
+	  int yyxbegin = yyn < 0 ? -yyn : 0;
+
+	  /* Stay within bounds of both yycheck and yytname.  */
+	  int yychecklim = YYLAST - yyn;
+	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+	  int yycount = 1;
+
+	  yyarg[0] = yytname[yytype];
+	  yyfmt = yystpcpy (yyformat, yyunexpected);
+
+	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	      {
+		if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+		  {
+		    yycount = 1;
+		    yysize = yysize0;
+		    yyformat[sizeof yyunexpected - 1] = '\0';
+		    break;
+		  }
+		yyarg[yycount++] = yytname[yyx];
+		yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+		yysize_overflow |= yysize1 < yysize;
+		yysize = yysize1;
+		yyfmt = yystpcpy (yyfmt, yyprefix);
+		yyprefix = yyor;
+	      }
+
+	  yyf = YY_(yyformat);
+	  yysize1 = yysize + yystrlen (yyf);
+	  yysize_overflow |= yysize1 < yysize;
+	  yysize = yysize1;
+
+	  if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
+	    yymsg = (char *) YYSTACK_ALLOC (yysize);
+	  if (yymsg)
+	    {
+	      /* Avoid sprintf, as that infringes on the user's name space.
+		 Don't have undefined behavior even if the translation
+		 produced a string with the wrong number of "%s"s.  */
+	      char *yyp = yymsg;
+	      int yyi = 0;
+	      while ((*yyp = *yyf))
+		{
+		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		    {
+		      yyp += yytnamerr (yyp, yyarg[yyi++]);
+		      yyf += 2;
+		    }
+		  else
+		    {
+		      yyp++;
+		      yyf++;
+		    }
+		}
+	      yyerror (yymsg);
+	      YYSTACK_FREE (yymsg);
+	    }
+	  else
+	    {
+	      yyerror (YY_("syntax error"));
+	      goto yyexhaustedlab;
+	    }
+	}
+      else
+#endif /* YYERROR_VERBOSE */
+	yyerror (YY_("syntax error"));
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+        {
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+        }
+      else
+	{
+	  yydestruct ("Error: discarding", yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (0)
+     goto yyerrorlab;
+
+yyvsp -= yylen;
+  yyssp -= yylen;
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping", yystos[yystate], yyvsp);
+      YYPOPSTACK;
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token. */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK;
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+  return yyresult;
+}
+
+
+#line 459 "PzParse.y"
+
+
diff -urN tahi-linux-3.0.12/lib/pkt/PzParse.h tahi-linux-3.0.12-linux/lib/pkt/PzParse.h
--- tahi-linux-3.0.12/lib/pkt/PzParse.h	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/lib/pkt/PzParse.h	2007-12-09 23:19:59.000000000 +0100
@@ -0,0 +1,225 @@
+/* A Bison parser, made by GNU Bison 2.1.  */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     NAME = 258,
+     STRING = 259,
+     NUMBER = 260,
+     ADD = 261,
+     SUB = 262,
+     MUL = 263,
+     AND = 264,
+     OR = 265,
+     XOR = 266,
+     QUEST = 267,
+     COLON = 268,
+     NOT = 269,
+     INC = 270,
+     DEC = 271,
+     ASOP = 272,
+     RELOP = 273,
+     EQUOP = 274,
+     DIVOP = 275,
+     SHIFTL = 276,
+     SHIFTR = 277,
+     ANDAND = 278,
+     XORXOR = 279,
+     OROR = 280,
+     FUNCTION = 281,
+     GENFUNC = 282,
+     PADFUNC = 283,
+     AUTHFUNC = 284,
+     CRYPTFUNC = 285,
+     IKE_CRYPTFUNC = 286,
+     BSAFUNC = 287,
+     IKE_P2_HASHFUNC = 288,
+     DHCPAUTHFUNC = 289,
+     FRAME = 290,
+     PACKET = 291,
+     HEADER = 292,
+     UPPER = 293,
+     ISAKMP_UPPER = 294,
+     OPTION = 295,
+     PAYLOAD = 296,
+     DNSHDR = 297,
+     PACKET_REF = 298,
+     HEADER_REF = 299,
+     EXTENT_REF = 300,
+     UPPER_REF = 301,
+     OPTION_REF = 302,
+     ISAKMP_ENCRYPTION_REF = 303,
+     PAYLOAD_REF = 304,
+     DNSQD_REF = 305,
+     DNSAN_REF = 306,
+     DNSNS_REF = 307,
+     DNSAR_REF = 308,
+     ALGORITHM = 309,
+     ALGOMEM_PAD = 310,
+     ALGOMEM_CRYPT = 311,
+     ALGOMEM_AUTH = 312,
+     ALGOFUNC = 313,
+     ALGORITHM_REF = 314,
+     MEMBER = 315,
+     DATA = 316,
+     PAD = 317,
+     OCTETS = 318,
+     ANY = 319,
+     AUTO = 320,
+     ZERO = 321,
+     FILL = 322,
+     STOP = 323,
+     BOOL = 324,
+     VOID = 325,
+     V4ADDR = 326,
+     V6ADDR = 327,
+     ETHER = 328,
+     DUMMY = 329,
+     LP = 330,
+     RP = 331,
+     LC = 332,
+     RC = 333,
+     LB = 334,
+     RB = 335,
+     CM = 336,
+     SM = 337,
+     EQ = 338,
+     NE = 339,
+     LT = 340,
+     GT = 341,
+     LE = 342,
+     GE = 343,
+     SH = 344,
+     SQ = 345
+   };
+#endif
+/* Tokens.  */
+#define NAME 258
+#define STRING 259
+#define NUMBER 260
+#define ADD 261
+#define SUB 262
+#define MUL 263
+#define AND 264
+#define OR 265
+#define XOR 266
+#define QUEST 267
+#define COLON 268
+#define NOT 269
+#define INC 270
+#define DEC 271
+#define ASOP 272
+#define RELOP 273
+#define EQUOP 274
+#define DIVOP 275
+#define SHIFTL 276
+#define SHIFTR 277
+#define ANDAND 278
+#define XORXOR 279
+#define OROR 280
+#define FUNCTION 281
+#define GENFUNC 282
+#define PADFUNC 283
+#define AUTHFUNC 284
+#define CRYPTFUNC 285
+#define IKE_CRYPTFUNC 286
+#define BSAFUNC 287
+#define IKE_P2_HASHFUNC 288
+#define DHCPAUTHFUNC 289
+#define FRAME 290
+#define PACKET 291
+#define HEADER 292
+#define UPPER 293
+#define ISAKMP_UPPER 294
+#define OPTION 295
+#define PAYLOAD 296
+#define DNSHDR 297
+#define PACKET_REF 298
+#define HEADER_REF 299
+#define EXTENT_REF 300
+#define UPPER_REF 301
+#define OPTION_REF 302
+#define ISAKMP_ENCRYPTION_REF 303
+#define PAYLOAD_REF 304
+#define DNSQD_REF 305
+#define DNSAN_REF 306
+#define DNSNS_REF 307
+#define DNSAR_REF 308
+#define ALGORITHM 309
+#define ALGOMEM_PAD 310
+#define ALGOMEM_CRYPT 311
+#define ALGOMEM_AUTH 312
+#define ALGOFUNC 313
+#define ALGORITHM_REF 314
+#define MEMBER 315
+#define DATA 316
+#define PAD 317
+#define OCTETS 318
+#define ANY 319
+#define AUTO 320
+#define ZERO 321
+#define FILL 322
+#define STOP 323
+#define BOOL 324
+#define VOID 325
+#define V4ADDR 326
+#define V6ADDR 327
+#define ETHER 328
+#define DUMMY 329
+#define LP 330
+#define RP 331
+#define LC 332
+#define RC 333
+#define LB 334
+#define RB 335
+#define CM 336
+#define SM 337
+#define EQ 338
+#define NE 339
+#define LT 340
+#define GT 341
+#define LE 342
+#define GE 343
+#define SH 344
+#define SQ 345
+
+
+
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+typedef int YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+/* extern YYSTYPE yylval; */
+
+
+
diff -urN tahi-linux-3.0.12/lib/pkt/PzParse.rule tahi-linux-3.0.12-linux/lib/pkt/PzParse.rule
--- tahi-linux-3.0.12/lib/pkt/PzParse.rule	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/lib/pkt/PzParse.rule	2007-12-09 23:19:58.000000000 +0100
@@ -0,0 +1,2966 @@
+Useless nonterminals
+
+   algorithm.ref
+
+
+Terminals which are not used
+
+   ADD
+   SUB
+   MUL
+   AND
+   OR
+   XOR
+   QUEST
+   COLON
+   NOT
+   INC
+   DEC
+   ASOP
+   RELOP
+   EQUOP
+   DIVOP
+   SHIFTL
+   SHIFTR
+   ANDAND
+   XORXOR
+   OROR
+   GENFUNC
+   ALGOFUNC
+   PAD
+   OCTETS
+   BOOL
+   VOID
+   V4ADDR
+   V6ADDR
+   ETHER
+   DUMMY
+   LB
+   RB
+   SH
+   SQ
+
+
+Useless rules
+
+  159 algorithm.ref: ALGORITHM_REF eq.name SM
+
+
+Grammar
+
+    0 $accept: file $end
+
+    1 file: define.l.
+
+    2 define.l.: /* empty */
+    3          | define.l
+
+    4 define.l: define
+    5         | define.l define
+
+    6 define: frame.def
+    7       | packet.def
+    8       | header.def
+    9       | dnshdr.def
+   10       | option.def
+   11       | upper.def
+   12       | isakmp_upper.def
+   13       | payload.def
+   14       | algorithm.def
+
+   15 frame.def: frame.prefix frame.body RC
+
+   16 frame.prefix: FRAME NAME LC
+
+   17 frame.body: header.ref packet.ref.
+
+   18 packet.def: packet.prefix packet.body RC
+
+   19 packet.prefix: PACKET NAME LC
+
+   20 packet.body: header.ref extent.ref.l. upper.ref.
+
+   21 header.def: header.prefix header.body RC
+
+   22 header.prefix: HEADER NAME LC
+
+   23 header.body: member.def.l. payload.ref.
+
+   24 option.def: option.prefix option.body RC
+
+   25 option.prefix: OPTION NAME LC
+
+   26 option.body: member.def.l. payload.ref.
+
+   27 upper.def: upper.prefix upper.body RC
+
+   28 upper.prefix: UPPER NAME LC
+
+   29 upper.body: header.ref. member.def.l. payload.ref.
+
+   30 isakmp_upper.def: isakmp_upper.prefix isakmp_upper.body RC
+
+   31 isakmp_upper.prefix: ISAKMP_UPPER NAME LC
+
+   32 isakmp_upper.body: header.ref isakmp_encryption.ref. member.def.l. payload.ref.
+
+   33 payload.def: payload.prefix payload.body RC
+
+   34 payload.prefix: PAYLOAD NAME LC
+
+   35 payload.body: data.def.l
+
+   36 algorithm.def: algorithm.prefix algorithm.body RC
+
+   37 algorithm.prefix: ALGORITHM NAME LC
+
+   38 algorithm.body: algomem.def.l.
+
+   39 dnshdr.def: dnshdr.prefix dnshdr.body RC
+
+   40 dnshdr.prefix: DNSHDR NAME LC
+
+   41 dnshdr.body: member.def.l. dnsqd.ref. dnsan.ref. dnsns.ref. dnsar.ref.
+
+   42 extent.ref.l.: /* empty */
+   43              | extent.ref.l
+
+   44 extent.ref.l: extent.ref
+   45             | extent.ref.l extent.ref
+
+   46 member.def.l.: /* empty */
+   47              | member.def.l
+
+   48 member.def.l: member.def
+   49             | member.def.l member.def
+
+   50 data.def.l: data.def
+   51           | data.def.l data.def
+
+   52 algomem.def.l.: /* empty */
+   53               | algomem.def.l
+
+   54 algomem.def.l: algomem.def
+   55              | algomem.def.l algomem.def
+
+   56 payload.ref.: /* empty */
+   57             | payload.ref
+
+   58 upper.ref.: /* empty */
+   59           | upper.ref
+
+   60 header.ref.: /* empty */
+   61            | header.ref
+
+   62 packet.ref.: /* empty */
+   63            | packet.ref
+
+   64 isakmp_encryption.ref.: /* empty */
+   65                       | isakmp_encryption.ref
+
+   66 dnsqd.ref.: /* empty */
+   67           | dnsqd.ref
+
+   68 dnsan.ref.: /* empty */
+   69           | dnsan.ref
+
+   70 dnsns.ref.: /* empty */
+   71           | dnsns.ref
+
+   72 dnsar.ref.: /* empty */
+   73           | dnsar.ref
+
+   74 packet.ref: PACKET_REF eq.name SM
+
+   75 header.ref: HEADER_REF eq.name SM
+
+   76 isakmp_encryption.ref: ISAKMP_ENCRYPTION_REF eq.name SM
+
+   77 extent.ref: EXTENT_REF eq.name SM
+
+   78 upper.ref: UPPER_REF eq.upper.term SM
+
+   79 payload.ref: PAYLOAD_REF eq.anyname SM
+
+   80 dnsqd.ref: DNSQD_REF eq.opt.term SM
+
+   81 dnsan.ref: DNSAN_REF eq.opt.term SM
+
+   82 dnsns.ref: DNSNS_REF eq.opt.term SM
+
+   83 dnsar.ref: DNSAR_REF eq.opt.term SM
+
+   84 data.def: DATA eq.data.term SM
+
+   85 member.def: MEMBER op.mem.term SM
+   86           | DATA eq.data.term SM
+   87           | OPTION_REF eq.opt.term SM
+   88           | ALGORITHM_REF eq.name SM
+   89           | MEMBER EQ bsafunc SM
+   90           | MEMBER EQ ike_p2_hashfunc SM
+   91           | MEMBER EQ dhcpauthfunc SM
+
+   92 algomem.def: ALGOMEM_PAD EQ padfunc SM
+   93            | ALGOMEM_CRYPT EQ crpytfunc SM
+   94            | ALGOMEM_CRYPT EQ ike_crpytfunc SM
+   95            | ALGOMEM_AUTH EQ authfunc SM
+
+   96 cmp.term: NUMBER
+
+   97 data.term: NUMBER
+   98          | values
+   99          | function
+
+  100 upper.term: NAME
+  101           | action
+
+  102 opt.term: NAME
+  103         | action
+  104         | function
+
+  105 mem.term: NUMBER
+  106         | action
+  107         | function
+
+  108 eq.name: EQ NAME
+
+  109 eq.anyname: EQ anyname
+
+  110 eq.upper.term: eq upper.term
+
+  111 eq.opt.term: eq opt.term
+
+  112 eq.data.term: eq data.term
+
+  113 eq.mem.term: eq mem.term
+
+  114 cmp.value: cmp cmp.term
+
+  115 op.mem.term: eq.mem.term
+  116            | cmp.value
+
+  117 values.prefix: LC
+
+  118 values: values.prefix number.l. RC
+
+  119 number.l.: /* empty */
+  120          | number.l
+
+  121 number.l: NUMBER
+  122         | number.l CM NUMBER
+
+  123 anyname: ANY
+  124        | NAME
+
+  125 arg.term: NUMBER
+  126         | STRING
+  127         | NAME
+  128         | function
+
+  129 arg.l.: /* empty */
+  130       | arg.l
+
+  131 arg.l: arg.term
+  132      | arg.l CM arg.term
+
+  133 func_call: FUNCTION LP
+
+  134 function: func_call arg.l. RP
+
+  135 bsa_call: BSAFUNC LP
+
+  136 bsafunc: bsa_call arg.l. RP
+
+  137 ike_p2_hash_call: IKE_P2_HASHFUNC LP
+
+  138 ike_p2_hashfunc: ike_p2_hash_call arg.l. RP
+
+  139 dhcpauth_call: DHCPAUTHFUNC LP
+
+  140 dhcpauthfunc: dhcpauth_call arg.l. RP
+
+  141 padfunc: PADFUNC LP RP
+
+  142 crpyt_call: CRYPTFUNC LP
+
+  143 crpytfunc: crpyt_call arg.l. RP
+
+  144 ike_crpyt_call: IKE_CRYPTFUNC LP
+
+  145 ike_crpytfunc: ike_crpyt_call arg.l. RP
+
+  146 auth_call: AUTHFUNC LP
+
+  147 authfunc: auth_call arg.l. RP
+
+  148 action: ANY
+  149       | AUTO
+  150       | ZERO
+  151       | FILL
+  152       | STOP
+
+  153 eq: EQ
+
+  154 cmp: NE
+  155    | LT
+  156    | GT
+  157    | LE
+  158    | GE
+
+
+Terminals, with rules where they appear
+
+$end (0) 0
+error (256)
+NAME (258) 16 19 22 25 28 31 34 37 40 100 102 108 124 127
+STRING (259) 126
+NUMBER (260) 96 97 105 121 122 125
+ADD (261)
+SUB (262)
+MUL (263)
+AND (264)
+OR (265)
+XOR (266)
+QUEST (267)
+COLON (268)
+NOT (269)
+INC (270)
+DEC (271)
+ASOP (272)
+RELOP (273)
+EQUOP (274)
+DIVOP (275)
+SHIFTL (276)
+SHIFTR (277)
+ANDAND (278)
+XORXOR (279)
+OROR (280)
+FUNCTION (281) 133
+GENFUNC (282)
+PADFUNC (283) 141
+AUTHFUNC (284) 146
+CRYPTFUNC (285) 142
+IKE_CRYPTFUNC (286) 144
+BSAFUNC (287) 135
+IKE_P2_HASHFUNC (288) 137
+DHCPAUTHFUNC (289) 139
+FRAME (290) 16
+PACKET (291) 19
+HEADER (292) 22
+UPPER (293) 28
+ISAKMP_UPPER (294) 31
+OPTION (295) 25
+PAYLOAD (296) 34
+DNSHDR (297) 40
+PACKET_REF (298) 74
+HEADER_REF (299) 75
+EXTENT_REF (300) 77
+UPPER_REF (301) 78
+OPTION_REF (302) 87
+ISAKMP_ENCRYPTION_REF (303) 76
+PAYLOAD_REF (304) 79
+DNSQD_REF (305) 80
+DNSAN_REF (306) 81
+DNSNS_REF (307) 82
+DNSAR_REF (308) 83
+ALGORITHM (309) 37
+ALGOMEM_PAD (310) 92
+ALGOMEM_CRYPT (311) 93 94
+ALGOMEM_AUTH (312) 95
+ALGOFUNC (313)
+ALGORITHM_REF (314) 88
+MEMBER (315) 85 89 90 91
+DATA (316) 84 86
+PAD (317)
+OCTETS (318)
+ANY (319) 123 148
+AUTO (320) 149
+ZERO (321) 150
+FILL (322) 151
+STOP (323) 152
+BOOL (324)
+VOID (325)
+V4ADDR (326)
+V6ADDR (327)
+ETHER (328)
+DUMMY (329)
+LP (330) 133 135 137 139 141 142 144 146
+RP (331) 134 136 138 140 141 143 145 147
+LC (332) 16 19 22 25 28 31 34 37 40 117
+RC (333) 15 18 21 24 27 30 33 36 39 118
+LB (334)
+RB (335)
+CM (336) 122 132
+SM (337) 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
+    94 95
+EQ (338) 89 90 91 92 93 94 95 108 109 153
+NE (339) 154
+LT (340) 155
+GT (341) 156
+LE (342) 157
+GE (343) 158
+SH (344)
+SQ (345)
+
+
+Nonterminals, with rules where they appear
+
+$accept (91)
+    on left: 0
+file (92)
+    on left: 1, on right: 0
+define.l. (93)
+    on left: 2 3, on right: 1
+define.l (94)
+    on left: 4 5, on right: 3 5
+define (95)
+    on left: 6 7 8 9 10 11 12 13 14, on right: 4 5
+frame.def (96)
+    on left: 15, on right: 6
+frame.prefix (97)
+    on left: 16, on right: 15
+frame.body (98)
+    on left: 17, on right: 15
+packet.def (99)
+    on left: 18, on right: 7
+packet.prefix (100)
+    on left: 19, on right: 18
+packet.body (101)
+    on left: 20, on right: 18
+header.def (102)
+    on left: 21, on right: 8
+header.prefix (103)
+    on left: 22, on right: 21
+header.body (104)
+    on left: 23, on right: 21
+option.def (105)
+    on left: 24, on right: 10
+option.prefix (106)
+    on left: 25, on right: 24
+option.body (107)
+    on left: 26, on right: 24
+upper.def (108)
+    on left: 27, on right: 11
+upper.prefix (109)
+    on left: 28, on right: 27
+upper.body (110)
+    on left: 29, on right: 27
+isakmp_upper.def (111)
+    on left: 30, on right: 12
+isakmp_upper.prefix (112)
+    on left: 31, on right: 30
+isakmp_upper.body (113)
+    on left: 32, on right: 30
+payload.def (114)
+    on left: 33, on right: 13
+payload.prefix (115)
+    on left: 34, on right: 33
+payload.body (116)
+    on left: 35, on right: 33
+algorithm.def (117)
+    on left: 36, on right: 14
+algorithm.prefix (118)
+    on left: 37, on right: 36
+algorithm.body (119)
+    on left: 38, on right: 36
+dnshdr.def (120)
+    on left: 39, on right: 9
+dnshdr.prefix (121)
+    on left: 40, on right: 39
+dnshdr.body (122)
+    on left: 41, on right: 39
+extent.ref.l. (123)
+    on left: 42 43, on right: 20
+extent.ref.l (124)
+    on left: 44 45, on right: 43 45
+member.def.l. (125)
+    on left: 46 47, on right: 23 26 29 32 41
+member.def.l (126)
+    on left: 48 49, on right: 47 49
+data.def.l (127)
+    on left: 50 51, on right: 35 51
+algomem.def.l. (128)
+    on left: 52 53, on right: 38
+algomem.def.l (129)
+    on left: 54 55, on right: 53 55
+payload.ref. (130)
+    on left: 56 57, on right: 23 26 29 32
+upper.ref. (131)
+    on left: 58 59, on right: 20
+header.ref. (132)
+    on left: 60 61, on right: 29
+packet.ref. (133)
+    on left: 62 63, on right: 17
+isakmp_encryption.ref. (134)
+    on left: 64 65, on right: 32
+dnsqd.ref. (135)
+    on left: 66 67, on right: 41
+dnsan.ref. (136)
+    on left: 68 69, on right: 41
+dnsns.ref. (137)
+    on left: 70 71, on right: 41
+dnsar.ref. (138)
+    on left: 72 73, on right: 41
+packet.ref (139)
+    on left: 74, on right: 63
+header.ref (140)
+    on left: 75, on right: 17 20 32 61
+isakmp_encryption.ref (141)
+    on left: 76, on right: 65
+extent.ref (142)
+    on left: 77, on right: 44 45
+upper.ref (143)
+    on left: 78, on right: 59
+payload.ref (144)
+    on left: 79, on right: 57
+dnsqd.ref (145)
+    on left: 80, on right: 67
+dnsan.ref (146)
+    on left: 81, on right: 69
+dnsns.ref (147)
+    on left: 82, on right: 71
+dnsar.ref (148)
+    on left: 83, on right: 73
+data.def (149)
+    on left: 84, on right: 50 51
+member.def (150)
+    on left: 85 86 87 88 89 90 91, on right: 48 49
+algomem.def (151)
+    on left: 92 93 94 95, on right: 54 55
+cmp.term (152)
+    on left: 96, on right: 114
+data.term (153)
+    on left: 97 98 99, on right: 112
+upper.term (154)
+    on left: 100 101, on right: 110
+opt.term (155)
+    on left: 102 103 104, on right: 111
+mem.term (156)
+    on left: 105 106 107, on right: 113
+eq.name (157)
+    on left: 108, on right: 74 75 76 77 88
+eq.anyname (158)
+    on left: 109, on right: 79
+eq.upper.term (159)
+    on left: 110, on right: 78
+eq.opt.term (160)
+    on left: 111, on right: 80 81 82 83 87
+eq.data.term (161)
+    on left: 112, on right: 84 86
+eq.mem.term (162)
+    on left: 113, on right: 115
+cmp.value (163)
+    on left: 114, on right: 116
+op.mem.term (164)
+    on left: 115 116, on right: 85
+values.prefix (165)
+    on left: 117, on right: 118
+values (166)
+    on left: 118, on right: 98
+number.l. (167)
+    on left: 119 120, on right: 118
+number.l (168)
+    on left: 121 122, on right: 120 122
+anyname (169)
+    on left: 123 124, on right: 109
+arg.term (170)
+    on left: 125 126 127 128, on right: 131 132
+arg.l. (171)
+    on left: 129 130, on right: 134 136 138 140 143 145 147
+arg.l (172)
+    on left: 131 132, on right: 130 132
+func_call (173)
+    on left: 133, on right: 134
+function (174)
+    on left: 134, on right: 99 104 107 128
+bsa_call (175)
+    on left: 135, on right: 136
+bsafunc (176)
+    on left: 136, on right: 89
+ike_p2_hash_call (177)
+    on left: 137, on right: 138
+ike_p2_hashfunc (178)
+    on left: 138, on right: 90
+dhcpauth_call (179)
+    on left: 139, on right: 140
+dhcpauthfunc (180)
+    on left: 140, on right: 91
+padfunc (181)
+    on left: 141, on right: 92
+crpyt_call (182)
+    on left: 142, on right: 143
+crpytfunc (183)
+    on left: 143, on right: 93
+ike_crpyt_call (184)
+    on left: 144, on right: 145
+ike_crpytfunc (185)
+    on left: 145, on right: 94
+auth_call (186)
+    on left: 146, on right: 147
+authfunc (187)
+    on left: 147, on right: 95
+action (188)
+    on left: 148 149 150 151 152, on right: 101 103 106
+eq (189)
+    on left: 153, on right: 110 111 112 113
+cmp (190)
+    on left: 154 155 156 157 158, on right: 114
+
+
+state 0
+
+    0 $accept: . file $end
+
+    FRAME         shift, and go to state 1
+    PACKET        shift, and go to state 2
+    HEADER        shift, and go to state 3
+    UPPER         shift, and go to state 4
+    ISAKMP_UPPER  shift, and go to state 5
+    OPTION        shift, and go to state 6
+    PAYLOAD       shift, and go to state 7
+    DNSHDR        shift, and go to state 8
+    ALGORITHM     shift, and go to state 9
+
+    $default  reduce using rule 2 (define.l.)
+
+    file                 go to state 10
+    define.l.            go to state 11
+    define.l             go to state 12
+    define               go to state 13
+    frame.def            go to state 14
+    frame.prefix         go to state 15
+    packet.def           go to state 16
+    packet.prefix        go to state 17
+    header.def           go to state 18
+    header.prefix        go to state 19
+    option.def           go to state 20
+    option.prefix        go to state 21
+    upper.def            go to state 22
+    upper.prefix         go to state 23
+    isakmp_upper.def     go to state 24
+    isakmp_upper.prefix  go to state 25
+    payload.def          go to state 26
+    payload.prefix       go to state 27
+    algorithm.def        go to state 28
+    algorithm.prefix     go to state 29
+    dnshdr.def           go to state 30
+    dnshdr.prefix        go to state 31
+
+
+state 1
+
+   16 frame.prefix: FRAME . NAME LC
+
+    NAME  shift, and go to state 32
+
+
+state 2
+
+   19 packet.prefix: PACKET . NAME LC
+
+    NAME  shift, and go to state 33
+
+
+state 3
+
+   22 header.prefix: HEADER . NAME LC
+
+    NAME  shift, and go to state 34
+
+
+state 4
+
+   28 upper.prefix: UPPER . NAME LC
+
+    NAME  shift, and go to state 35
+
+
+state 5
+
+   31 isakmp_upper.prefix: ISAKMP_UPPER . NAME LC
+
+    NAME  shift, and go to state 36
+
+
+state 6
+
+   25 option.prefix: OPTION . NAME LC
+
+    NAME  shift, and go to state 37
+
+
+state 7
+
+   34 payload.prefix: PAYLOAD . NAME LC
+
+    NAME  shift, and go to state 38
+
+
+state 8
+
+   40 dnshdr.prefix: DNSHDR . NAME LC
+
+    NAME  shift, and go to state 39
+
+
+state 9
+
+   37 algorithm.prefix: ALGORITHM . NAME LC
+
+    NAME  shift, and go to state 40
+
+
+state 10
+
+    0 $accept: file . $end
+
+    $end  shift, and go to state 41
+
+
+state 11
+
+    1 file: define.l. .
+
+    $default  reduce using rule 1 (file)
+
+
+state 12
+
+    3 define.l.: define.l .
+    5 define.l: define.l . define
+
+    FRAME         shift, and go to state 1
+    PACKET        shift, and go to state 2
+    HEADER        shift, and go to state 3
+    UPPER         shift, and go to state 4
+    ISAKMP_UPPER  shift, and go to state 5
+    OPTION        shift, and go to state 6
+    PAYLOAD       shift, and go to state 7
+    DNSHDR        shift, and go to state 8
+    ALGORITHM     shift, and go to state 9
+
+    $default  reduce using rule 3 (define.l.)
+
+    define               go to state 42
+    frame.def            go to state 14
+    frame.prefix         go to state 15
+    packet.def           go to state 16
+    packet.prefix        go to state 17
+    header.def           go to state 18
+    header.prefix        go to state 19
+    option.def           go to state 20
+    option.prefix        go to state 21
+    upper.def            go to state 22
+    upper.prefix         go to state 23
+    isakmp_upper.def     go to state 24
+    isakmp_upper.prefix  go to state 25
+    payload.def          go to state 26
+    payload.prefix       go to state 27
+    algorithm.def        go to state 28
+    algorithm.prefix     go to state 29
+    dnshdr.def           go to state 30
+    dnshdr.prefix        go to state 31
+
+
+state 13
+
+    4 define.l: define .
+
+    $default  reduce using rule 4 (define.l)
+
+
+state 14
+
+    6 define: frame.def .
+
+    $default  reduce using rule 6 (define)
+
+
+state 15
+
+   15 frame.def: frame.prefix . frame.body RC
+
+    HEADER_REF  shift, and go to state 43
+
+    frame.body  go to state 44
+    header.ref  go to state 45
+
+
+state 16
+
+    7 define: packet.def .
+
+    $default  reduce using rule 7 (define)
+
+
+state 17
+
+   18 packet.def: packet.prefix . packet.body RC
+
+    HEADER_REF  shift, and go to state 43
+
+    packet.body  go to state 46
+    header.ref   go to state 47
+
+
+state 18
+
+    8 define: header.def .
+
+    $default  reduce using rule 8 (define)
+
+
+state 19
+
+   21 header.def: header.prefix . header.body RC
+
+    OPTION_REF     shift, and go to state 48
+    ALGORITHM_REF  shift, and go to state 49
+    MEMBER         shift, and go to state 50
+    DATA           shift, and go to state 51
+
+    $default  reduce using rule 46 (member.def.l.)
+
+    header.body    go to state 52
+    member.def.l.  go to state 53
+    member.def.l   go to state 54
+    member.def     go to state 55
+
+
+state 20
+
+   10 define: option.def .
+
+    $default  reduce using rule 10 (define)
+
+
+state 21
+
+   24 option.def: option.prefix . option.body RC
+
+    OPTION_REF     shift, and go to state 48
+    ALGORITHM_REF  shift, and go to state 49
+    MEMBER         shift, and go to state 50
+    DATA           shift, and go to state 51
+
+    $default  reduce using rule 46 (member.def.l.)
+
+    option.body    go to state 56
+    member.def.l.  go to state 57
+    member.def.l   go to state 54
+    member.def     go to state 55
+
+
+state 22
+
+   11 define: upper.def .
+
+    $default  reduce using rule 11 (define)
+
+
+state 23
+
+   27 upper.def: upper.prefix . upper.body RC
+
+    HEADER_REF  shift, and go to state 43
+
+    $default  reduce using rule 60 (header.ref.)
+
+    upper.body   go to state 58
+    header.ref.  go to state 59
+    header.ref   go to state 60
+
+
+state 24
+
+   12 define: isakmp_upper.def .
+
+    $default  reduce using rule 12 (define)
+
+
+state 25
+
+   30 isakmp_upper.def: isakmp_upper.prefix . isakmp_upper.body RC
+
+    HEADER_REF  shift, and go to state 43
+
+    isakmp_upper.body  go to state 61
+    header.ref         go to state 62
+
+
+state 26
+
+   13 define: payload.def .
+
+    $default  reduce using rule 13 (define)
+
+
+state 27
+
+   33 payload.def: payload.prefix . payload.body RC
+
+    DATA  shift, and go to state 63
+
+    payload.body  go to state 64
+    data.def.l    go to state 65
+    data.def      go to state 66
+
+
+state 28
+
+   14 define: algorithm.def .
+
+    $default  reduce using rule 14 (define)
+
+
+state 29
+
+   36 algorithm.def: algorithm.prefix . algorithm.body RC
+
+    ALGOMEM_PAD    shift, and go to state 67
+    ALGOMEM_CRYPT  shift, and go to state 68
+    ALGOMEM_AUTH   shift, and go to state 69
+
+    $default  reduce using rule 52 (algomem.def.l.)
+
+    algorithm.body  go to state 70
+    algomem.def.l.  go to state 71
+    algomem.def.l   go to state 72
+    algomem.def     go to state 73
+
+
+state 30
+
+    9 define: dnshdr.def .
+
+    $default  reduce using rule 9 (define)
+
+
+state 31
+
+   39 dnshdr.def: dnshdr.prefix . dnshdr.body RC
+
+    OPTION_REF     shift, and go to state 48
+    ALGORITHM_REF  shift, and go to state 49
+    MEMBER         shift, and go to state 50
+    DATA           shift, and go to state 51
+
+    $default  reduce using rule 46 (member.def.l.)
+
+    dnshdr.body    go to state 74
+    member.def.l.  go to state 75
+    member.def.l   go to state 54
+    member.def     go to state 55
+
+
+state 32
+
+   16 frame.prefix: FRAME NAME . LC
+
+    LC  shift, and go to state 76
+
+
+state 33
+
+   19 packet.prefix: PACKET NAME . LC
+
+    LC  shift, and go to state 77
+
+
+state 34
+
+   22 header.prefix: HEADER NAME . LC
+
+    LC  shift, and go to state 78
+
+
+state 35
+
+   28 upper.prefix: UPPER NAME . LC
+
+    LC  shift, and go to state 79
+
+
+state 36
+
+   31 isakmp_upper.prefix: ISAKMP_UPPER NAME . LC
+
+    LC  shift, and go to state 80
+
+
+state 37
+
+   25 option.prefix: OPTION NAME . LC
+
+    LC  shift, and go to state 81
+
+
+state 38
+
+   34 payload.prefix: PAYLOAD NAME . LC
+
+    LC  shift, and go to state 82
+
+
+state 39
+
+   40 dnshdr.prefix: DNSHDR NAME . LC
+
+    LC  shift, and go to state 83
+
+
+state 40
+
+   37 algorithm.prefix: ALGORITHM NAME . LC
+
+    LC  shift, and go to state 84
+
+
+state 41
+
+    0 $accept: file $end .
+
+    $default  accept
+
+
+state 42
+
+    5 define.l: define.l define .
+
+    $default  reduce using rule 5 (define.l)
+
+
+state 43
+
+   75 header.ref: HEADER_REF . eq.name SM
+
+    EQ  shift, and go to state 85
+
+    eq.name  go to state 86
+
+
+state 44
+
+   15 frame.def: frame.prefix frame.body . RC
+
+    RC  shift, and go to state 87
+
+
+state 45
+
+   17 frame.body: header.ref . packet.ref.
+
+    PACKET_REF  shift, and go to state 88
+
+    $default  reduce using rule 62 (packet.ref.)
+
+    packet.ref.  go to state 89
+    packet.ref   go to state 90
+
+
+state 46
+
+   18 packet.def: packet.prefix packet.body . RC
+
+    RC  shift, and go to state 91
+
+
+state 47
+
+   20 packet.body: header.ref . extent.ref.l. upper.ref.
+
+    EXTENT_REF  shift, and go to state 92
+
+    $default  reduce using rule 42 (extent.ref.l.)
+
+    extent.ref.l.  go to state 93
+    extent.ref.l   go to state 94
+    extent.ref     go to state 95
+
+
+state 48
+
+   87 member.def: OPTION_REF . eq.opt.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.opt.term  go to state 97
+    eq           go to state 98
+
+
+state 49
+
+   88 member.def: ALGORITHM_REF . eq.name SM
+
+    EQ  shift, and go to state 85
+
+    eq.name  go to state 99
+
+
+state 50
+
+   85 member.def: MEMBER . op.mem.term SM
+   89           | MEMBER . EQ bsafunc SM
+   90           | MEMBER . EQ ike_p2_hashfunc SM
+   91           | MEMBER . EQ dhcpauthfunc SM
+
+    EQ  shift, and go to state 100
+    NE  shift, and go to state 101
+    LT  shift, and go to state 102
+    GT  shift, and go to state 103
+    LE  shift, and go to state 104
+    GE  shift, and go to state 105
+
+    eq.mem.term  go to state 106
+    cmp.value    go to state 107
+    op.mem.term  go to state 108
+    eq           go to state 109
+    cmp          go to state 110
+
+
+state 51
+
+   86 member.def: DATA . eq.data.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.data.term  go to state 111
+    eq            go to state 112
+
+
+state 52
+
+   21 header.def: header.prefix header.body . RC
+
+    RC  shift, and go to state 113
+
+
+state 53
+
+   23 header.body: member.def.l. . payload.ref.
+
+    PAYLOAD_REF  shift, and go to state 114
+
+    $default  reduce using rule 56 (payload.ref.)
+
+    payload.ref.  go to state 115
+    payload.ref   go to state 116
+
+
+state 54
+
+   47 member.def.l.: member.def.l .
+   49 member.def.l: member.def.l . member.def
+
+    OPTION_REF     shift, and go to state 48
+    ALGORITHM_REF  shift, and go to state 49
+    MEMBER         shift, and go to state 50
+    DATA           shift, and go to state 51
+
+    $default  reduce using rule 47 (member.def.l.)
+
+    member.def  go to state 117
+
+
+state 55
+
+   48 member.def.l: member.def .
+
+    $default  reduce using rule 48 (member.def.l)
+
+
+state 56
+
+   24 option.def: option.prefix option.body . RC
+
+    RC  shift, and go to state 118
+
+
+state 57
+
+   26 option.body: member.def.l. . payload.ref.
+
+    PAYLOAD_REF  shift, and go to state 114
+
+    $default  reduce using rule 56 (payload.ref.)
+
+    payload.ref.  go to state 119
+    payload.ref   go to state 116
+
+
+state 58
+
+   27 upper.def: upper.prefix upper.body . RC
+
+    RC  shift, and go to state 120
+
+
+state 59
+
+   29 upper.body: header.ref. . member.def.l. payload.ref.
+
+    OPTION_REF     shift, and go to state 48
+    ALGORITHM_REF  shift, and go to state 49
+    MEMBER         shift, and go to state 50
+    DATA           shift, and go to state 51
+
+    $default  reduce using rule 46 (member.def.l.)
+
+    member.def.l.  go to state 121
+    member.def.l   go to state 54
+    member.def     go to state 55
+
+
+state 60
+
+   61 header.ref.: header.ref .
+
+    $default  reduce using rule 61 (header.ref.)
+
+
+state 61
+
+   30 isakmp_upper.def: isakmp_upper.prefix isakmp_upper.body . RC
+
+    RC  shift, and go to state 122
+
+
+state 62
+
+   32 isakmp_upper.body: header.ref . isakmp_encryption.ref. member.def.l. payload.ref.
+
+    ISAKMP_ENCRYPTION_REF  shift, and go to state 123
+
+    $default  reduce using rule 64 (isakmp_encryption.ref.)
+
+    isakmp_encryption.ref.  go to state 124
+    isakmp_encryption.ref   go to state 125
+
+
+state 63
+
+   84 data.def: DATA . eq.data.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.data.term  go to state 126
+    eq            go to state 112
+
+
+state 64
+
+   33 payload.def: payload.prefix payload.body . RC
+
+    RC  shift, and go to state 127
+
+
+state 65
+
+   35 payload.body: data.def.l .
+   51 data.def.l: data.def.l . data.def
+
+    DATA  shift, and go to state 63
+
+    $default  reduce using rule 35 (payload.body)
+
+    data.def  go to state 128
+
+
+state 66
+
+   50 data.def.l: data.def .
+
+    $default  reduce using rule 50 (data.def.l)
+
+
+state 67
+
+   92 algomem.def: ALGOMEM_PAD . EQ padfunc SM
+
+    EQ  shift, and go to state 129
+
+
+state 68
+
+   93 algomem.def: ALGOMEM_CRYPT . EQ crpytfunc SM
+   94            | ALGOMEM_CRYPT . EQ ike_crpytfunc SM
+
+    EQ  shift, and go to state 130
+
+
+state 69
+
+   95 algomem.def: ALGOMEM_AUTH . EQ authfunc SM
+
+    EQ  shift, and go to state 131
+
+
+state 70
+
+   36 algorithm.def: algorithm.prefix algorithm.body . RC
+
+    RC  shift, and go to state 132
+
+
+state 71
+
+   38 algorithm.body: algomem.def.l. .
+
+    $default  reduce using rule 38 (algorithm.body)
+
+
+state 72
+
+   53 algomem.def.l.: algomem.def.l .
+   55 algomem.def.l: algomem.def.l . algomem.def
+
+    ALGOMEM_PAD    shift, and go to state 67
+    ALGOMEM_CRYPT  shift, and go to state 68
+    ALGOMEM_AUTH   shift, and go to state 69
+
+    $default  reduce using rule 53 (algomem.def.l.)
+
+    algomem.def  go to state 133
+
+
+state 73
+
+   54 algomem.def.l: algomem.def .
+
+    $default  reduce using rule 54 (algomem.def.l)
+
+
+state 74
+
+   39 dnshdr.def: dnshdr.prefix dnshdr.body . RC
+
+    RC  shift, and go to state 134
+
+
+state 75
+
+   41 dnshdr.body: member.def.l. . dnsqd.ref. dnsan.ref. dnsns.ref. dnsar.ref.
+
+    DNSQD_REF  shift, and go to state 135
+
+    $default  reduce using rule 66 (dnsqd.ref.)
+
+    dnsqd.ref.  go to state 136
+    dnsqd.ref   go to state 137
+
+
+state 76
+
+   16 frame.prefix: FRAME NAME LC .
+
+    $default  reduce using rule 16 (frame.prefix)
+
+
+state 77
+
+   19 packet.prefix: PACKET NAME LC .
+
+    $default  reduce using rule 19 (packet.prefix)
+
+
+state 78
+
+   22 header.prefix: HEADER NAME LC .
+
+    $default  reduce using rule 22 (header.prefix)
+
+
+state 79
+
+   28 upper.prefix: UPPER NAME LC .
+
+    $default  reduce using rule 28 (upper.prefix)
+
+
+state 80
+
+   31 isakmp_upper.prefix: ISAKMP_UPPER NAME LC .
+
+    $default  reduce using rule 31 (isakmp_upper.prefix)
+
+
+state 81
+
+   25 option.prefix: OPTION NAME LC .
+
+    $default  reduce using rule 25 (option.prefix)
+
+
+state 82
+
+   34 payload.prefix: PAYLOAD NAME LC .
+
+    $default  reduce using rule 34 (payload.prefix)
+
+
+state 83
+
+   40 dnshdr.prefix: DNSHDR NAME LC .
+
+    $default  reduce using rule 40 (dnshdr.prefix)
+
+
+state 84
+
+   37 algorithm.prefix: ALGORITHM NAME LC .
+
+    $default  reduce using rule 37 (algorithm.prefix)
+
+
+state 85
+
+  108 eq.name: EQ . NAME
+
+    NAME  shift, and go to state 138
+
+
+state 86
+
+   75 header.ref: HEADER_REF eq.name . SM
+
+    SM  shift, and go to state 139
+
+
+state 87
+
+   15 frame.def: frame.prefix frame.body RC .
+
+    $default  reduce using rule 15 (frame.def)
+
+
+state 88
+
+   74 packet.ref: PACKET_REF . eq.name SM
+
+    EQ  shift, and go to state 85
+
+    eq.name  go to state 140
+
+
+state 89
+
+   17 frame.body: header.ref packet.ref. .
+
+    $default  reduce using rule 17 (frame.body)
+
+
+state 90
+
+   63 packet.ref.: packet.ref .
+
+    $default  reduce using rule 63 (packet.ref.)
+
+
+state 91
+
+   18 packet.def: packet.prefix packet.body RC .
+
+    $default  reduce using rule 18 (packet.def)
+
+
+state 92
+
+   77 extent.ref: EXTENT_REF . eq.name SM
+
+    EQ  shift, and go to state 85
+
+    eq.name  go to state 141
+
+
+state 93
+
+   20 packet.body: header.ref extent.ref.l. . upper.ref.
+
+    UPPER_REF  shift, and go to state 142
+
+    $default  reduce using rule 58 (upper.ref.)
+
+    upper.ref.  go to state 143
+    upper.ref   go to state 144
+
+
+state 94
+
+   43 extent.ref.l.: extent.ref.l .
+   45 extent.ref.l: extent.ref.l . extent.ref
+
+    EXTENT_REF  shift, and go to state 92
+
+    $default  reduce using rule 43 (extent.ref.l.)
+
+    extent.ref  go to state 145
+
+
+state 95
+
+   44 extent.ref.l: extent.ref .
+
+    $default  reduce using rule 44 (extent.ref.l)
+
+
+state 96
+
+  153 eq: EQ .
+
+    $default  reduce using rule 153 (eq)
+
+
+state 97
+
+   87 member.def: OPTION_REF eq.opt.term . SM
+
+    SM  shift, and go to state 146
+
+
+state 98
+
+  111 eq.opt.term: eq . opt.term
+
+    NAME      shift, and go to state 147
+    FUNCTION  shift, and go to state 148
+    ANY       shift, and go to state 149
+    AUTO      shift, and go to state 150
+    ZERO      shift, and go to state 151
+    FILL      shift, and go to state 152
+    STOP      shift, and go to state 153
+
+    opt.term   go to state 154
+    func_call  go to state 155
+    function   go to state 156
+    action     go to state 157
+
+
+state 99
+
+   88 member.def: ALGORITHM_REF eq.name . SM
+
+    SM  shift, and go to state 158
+
+
+state 100
+
+   89 member.def: MEMBER EQ . bsafunc SM
+   90           | MEMBER EQ . ike_p2_hashfunc SM
+   91           | MEMBER EQ . dhcpauthfunc SM
+  153 eq: EQ .
+
+    BSAFUNC          shift, and go to state 159
+    IKE_P2_HASHFUNC  shift, and go to state 160
+    DHCPAUTHFUNC     shift, and go to state 161
+
+    $default  reduce using rule 153 (eq)
+
+    bsa_call          go to state 162
+    bsafunc           go to state 163
+    ike_p2_hash_call  go to state 164
+    ike_p2_hashfunc   go to state 165
+    dhcpauth_call     go to state 166
+    dhcpauthfunc      go to state 167
+
+
+state 101
+
+  154 cmp: NE .
+
+    $default  reduce using rule 154 (cmp)
+
+
+state 102
+
+  155 cmp: LT .
+
+    $default  reduce using rule 155 (cmp)
+
+
+state 103
+
+  156 cmp: GT .
+
+    $default  reduce using rule 156 (cmp)
+
+
+state 104
+
+  157 cmp: LE .
+
+    $default  reduce using rule 157 (cmp)
+
+
+state 105
+
+  158 cmp: GE .
+
+    $default  reduce using rule 158 (cmp)
+
+
+state 106
+
+  115 op.mem.term: eq.mem.term .
+
+    $default  reduce using rule 115 (op.mem.term)
+
+
+state 107
+
+  116 op.mem.term: cmp.value .
+
+    $default  reduce using rule 116 (op.mem.term)
+
+
+state 108
+
+   85 member.def: MEMBER op.mem.term . SM
+
+    SM  shift, and go to state 168
+
+
+state 109
+
+  113 eq.mem.term: eq . mem.term
+
+    NUMBER    shift, and go to state 169
+    FUNCTION  shift, and go to state 148
+    ANY       shift, and go to state 149
+    AUTO      shift, and go to state 150
+    ZERO      shift, and go to state 151
+    FILL      shift, and go to state 152
+    STOP      shift, and go to state 153
+
+    mem.term   go to state 170
+    func_call  go to state 155
+    function   go to state 171
+    action     go to state 172
+
+
+state 110
+
+  114 cmp.value: cmp . cmp.term
+
+    NUMBER  shift, and go to state 173
+
+    cmp.term  go to state 174
+
+
+state 111
+
+   86 member.def: DATA eq.data.term . SM
+
+    SM  shift, and go to state 175
+
+
+state 112
+
+  112 eq.data.term: eq . data.term
+
+    NUMBER    shift, and go to state 176
+    FUNCTION  shift, and go to state 148
+    LC        shift, and go to state 177
+
+    data.term      go to state 178
+    values.prefix  go to state 179
+    values         go to state 180
+    func_call      go to state 155
+    function       go to state 181
+
+
+state 113
+
+   21 header.def: header.prefix header.body RC .
+
+    $default  reduce using rule 21 (header.def)
+
+
+state 114
+
+   79 payload.ref: PAYLOAD_REF . eq.anyname SM
+
+    EQ  shift, and go to state 182
+
+    eq.anyname  go to state 183
+
+
+state 115
+
+   23 header.body: member.def.l. payload.ref. .
+
+    $default  reduce using rule 23 (header.body)
+
+
+state 116
+
+   57 payload.ref.: payload.ref .
+
+    $default  reduce using rule 57 (payload.ref.)
+
+
+state 117
+
+   49 member.def.l: member.def.l member.def .
+
+    $default  reduce using rule 49 (member.def.l)
+
+
+state 118
+
+   24 option.def: option.prefix option.body RC .
+
+    $default  reduce using rule 24 (option.def)
+
+
+state 119
+
+   26 option.body: member.def.l. payload.ref. .
+
+    $default  reduce using rule 26 (option.body)
+
+
+state 120
+
+   27 upper.def: upper.prefix upper.body RC .
+
+    $default  reduce using rule 27 (upper.def)
+
+
+state 121
+
+   29 upper.body: header.ref. member.def.l. . payload.ref.
+
+    PAYLOAD_REF  shift, and go to state 114
+
+    $default  reduce using rule 56 (payload.ref.)
+
+    payload.ref.  go to state 184
+    payload.ref   go to state 116
+
+
+state 122
+
+   30 isakmp_upper.def: isakmp_upper.prefix isakmp_upper.body RC .
+
+    $default  reduce using rule 30 (isakmp_upper.def)
+
+
+state 123
+
+   76 isakmp_encryption.ref: ISAKMP_ENCRYPTION_REF . eq.name SM
+
+    EQ  shift, and go to state 85
+
+    eq.name  go to state 185
+
+
+state 124
+
+   32 isakmp_upper.body: header.ref isakmp_encryption.ref. . member.def.l. payload.ref.
+
+    OPTION_REF     shift, and go to state 48
+    ALGORITHM_REF  shift, and go to state 49
+    MEMBER         shift, and go to state 50
+    DATA           shift, and go to state 51
+
+    $default  reduce using rule 46 (member.def.l.)
+
+    member.def.l.  go to state 186
+    member.def.l   go to state 54
+    member.def     go to state 55
+
+
+state 125
+
+   65 isakmp_encryption.ref.: isakmp_encryption.ref .
+
+    $default  reduce using rule 65 (isakmp_encryption.ref.)
+
+
+state 126
+
+   84 data.def: DATA eq.data.term . SM
+
+    SM  shift, and go to state 187
+
+
+state 127
+
+   33 payload.def: payload.prefix payload.body RC .
+
+    $default  reduce using rule 33 (payload.def)
+
+
+state 128
+
+   51 data.def.l: data.def.l data.def .
+
+    $default  reduce using rule 51 (data.def.l)
+
+
+state 129
+
+   92 algomem.def: ALGOMEM_PAD EQ . padfunc SM
+
+    PADFUNC  shift, and go to state 188
+
+    padfunc  go to state 189
+
+
+state 130
+
+   93 algomem.def: ALGOMEM_CRYPT EQ . crpytfunc SM
+   94            | ALGOMEM_CRYPT EQ . ike_crpytfunc SM
+
+    CRYPTFUNC      shift, and go to state 190
+    IKE_CRYPTFUNC  shift, and go to state 191
+
+    crpyt_call      go to state 192
+    crpytfunc       go to state 193
+    ike_crpyt_call  go to state 194
+    ike_crpytfunc   go to state 195
+
+
+state 131
+
+   95 algomem.def: ALGOMEM_AUTH EQ . authfunc SM
+
+    AUTHFUNC  shift, and go to state 196
+
+    auth_call  go to state 197
+    authfunc   go to state 198
+
+
+state 132
+
+   36 algorithm.def: algorithm.prefix algorithm.body RC .
+
+    $default  reduce using rule 36 (algorithm.def)
+
+
+state 133
+
+   55 algomem.def.l: algomem.def.l algomem.def .
+
+    $default  reduce using rule 55 (algomem.def.l)
+
+
+state 134
+
+   39 dnshdr.def: dnshdr.prefix dnshdr.body RC .
+
+    $default  reduce using rule 39 (dnshdr.def)
+
+
+state 135
+
+   80 dnsqd.ref: DNSQD_REF . eq.opt.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.opt.term  go to state 199
+    eq           go to state 98
+
+
+state 136
+
+   41 dnshdr.body: member.def.l. dnsqd.ref. . dnsan.ref. dnsns.ref. dnsar.ref.
+
+    DNSAN_REF  shift, and go to state 200
+
+    $default  reduce using rule 68 (dnsan.ref.)
+
+    dnsan.ref.  go to state 201
+    dnsan.ref   go to state 202
+
+
+state 137
+
+   67 dnsqd.ref.: dnsqd.ref .
+
+    $default  reduce using rule 67 (dnsqd.ref.)
+
+
+state 138
+
+  108 eq.name: EQ NAME .
+
+    $default  reduce using rule 108 (eq.name)
+
+
+state 139
+
+   75 header.ref: HEADER_REF eq.name SM .
+
+    $default  reduce using rule 75 (header.ref)
+
+
+state 140
+
+   74 packet.ref: PACKET_REF eq.name . SM
+
+    SM  shift, and go to state 203
+
+
+state 141
+
+   77 extent.ref: EXTENT_REF eq.name . SM
+
+    SM  shift, and go to state 204
+
+
+state 142
+
+   78 upper.ref: UPPER_REF . eq.upper.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.upper.term  go to state 205
+    eq             go to state 206
+
+
+state 143
+
+   20 packet.body: header.ref extent.ref.l. upper.ref. .
+
+    $default  reduce using rule 20 (packet.body)
+
+
+state 144
+
+   59 upper.ref.: upper.ref .
+
+    $default  reduce using rule 59 (upper.ref.)
+
+
+state 145
+
+   45 extent.ref.l: extent.ref.l extent.ref .
+
+    $default  reduce using rule 45 (extent.ref.l)
+
+
+state 146
+
+   87 member.def: OPTION_REF eq.opt.term SM .
+
+    $default  reduce using rule 87 (member.def)
+
+
+state 147
+
+  102 opt.term: NAME .
+
+    $default  reduce using rule 102 (opt.term)
+
+
+state 148
+
+  133 func_call: FUNCTION . LP
+
+    LP  shift, and go to state 207
+
+
+state 149
+
+  148 action: ANY .
+
+    $default  reduce using rule 148 (action)
+
+
+state 150
+
+  149 action: AUTO .
+
+    $default  reduce using rule 149 (action)
+
+
+state 151
+
+  150 action: ZERO .
+
+    $default  reduce using rule 150 (action)
+
+
+state 152
+
+  151 action: FILL .
+
+    $default  reduce using rule 151 (action)
+
+
+state 153
+
+  152 action: STOP .
+
+    $default  reduce using rule 152 (action)
+
+
+state 154
+
+  111 eq.opt.term: eq opt.term .
+
+    $default  reduce using rule 111 (eq.opt.term)
+
+
+state 155
+
+  134 function: func_call . arg.l. RP
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    $default  reduce using rule 129 (arg.l.)
+
+    arg.term   go to state 211
+    arg.l.     go to state 212
+    arg.l      go to state 213
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 156
+
+  104 opt.term: function .
+
+    $default  reduce using rule 104 (opt.term)
+
+
+state 157
+
+  103 opt.term: action .
+
+    $default  reduce using rule 103 (opt.term)
+
+
+state 158
+
+   88 member.def: ALGORITHM_REF eq.name SM .
+
+    $default  reduce using rule 88 (member.def)
+
+
+state 159
+
+  135 bsa_call: BSAFUNC . LP
+
+    LP  shift, and go to state 215
+
+
+state 160
+
+  137 ike_p2_hash_call: IKE_P2_HASHFUNC . LP
+
+    LP  shift, and go to state 216
+
+
+state 161
+
+  139 dhcpauth_call: DHCPAUTHFUNC . LP
+
+    LP  shift, and go to state 217
+
+
+state 162
+
+  136 bsafunc: bsa_call . arg.l. RP
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    $default  reduce using rule 129 (arg.l.)
+
+    arg.term   go to state 211
+    arg.l.     go to state 218
+    arg.l      go to state 213
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 163
+
+   89 member.def: MEMBER EQ bsafunc . SM
+
+    SM  shift, and go to state 219
+
+
+state 164
+
+  138 ike_p2_hashfunc: ike_p2_hash_call . arg.l. RP
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    $default  reduce using rule 129 (arg.l.)
+
+    arg.term   go to state 211
+    arg.l.     go to state 220
+    arg.l      go to state 213
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 165
+
+   90 member.def: MEMBER EQ ike_p2_hashfunc . SM
+
+    SM  shift, and go to state 221
+
+
+state 166
+
+  140 dhcpauthfunc: dhcpauth_call . arg.l. RP
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    $default  reduce using rule 129 (arg.l.)
+
+    arg.term   go to state 211
+    arg.l.     go to state 222
+    arg.l      go to state 213
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 167
+
+   91 member.def: MEMBER EQ dhcpauthfunc . SM
+
+    SM  shift, and go to state 223
+
+
+state 168
+
+   85 member.def: MEMBER op.mem.term SM .
+
+    $default  reduce using rule 85 (member.def)
+
+
+state 169
+
+  105 mem.term: NUMBER .
+
+    $default  reduce using rule 105 (mem.term)
+
+
+state 170
+
+  113 eq.mem.term: eq mem.term .
+
+    $default  reduce using rule 113 (eq.mem.term)
+
+
+state 171
+
+  107 mem.term: function .
+
+    $default  reduce using rule 107 (mem.term)
+
+
+state 172
+
+  106 mem.term: action .
+
+    $default  reduce using rule 106 (mem.term)
+
+
+state 173
+
+   96 cmp.term: NUMBER .
+
+    $default  reduce using rule 96 (cmp.term)
+
+
+state 174
+
+  114 cmp.value: cmp cmp.term .
+
+    $default  reduce using rule 114 (cmp.value)
+
+
+state 175
+
+   86 member.def: DATA eq.data.term SM .
+
+    $default  reduce using rule 86 (member.def)
+
+
+state 176
+
+   97 data.term: NUMBER .
+
+    $default  reduce using rule 97 (data.term)
+
+
+state 177
+
+  117 values.prefix: LC .
+
+    $default  reduce using rule 117 (values.prefix)
+
+
+state 178
+
+  112 eq.data.term: eq data.term .
+
+    $default  reduce using rule 112 (eq.data.term)
+
+
+state 179
+
+  118 values: values.prefix . number.l. RC
+
+    NUMBER  shift, and go to state 224
+
+    $default  reduce using rule 119 (number.l.)
+
+    number.l.  go to state 225
+    number.l   go to state 226
+
+
+state 180
+
+   98 data.term: values .
+
+    $default  reduce using rule 98 (data.term)
+
+
+state 181
+
+   99 data.term: function .
+
+    $default  reduce using rule 99 (data.term)
+
+
+state 182
+
+  109 eq.anyname: EQ . anyname
+
+    NAME  shift, and go to state 227
+    ANY   shift, and go to state 228
+
+    anyname  go to state 229
+
+
+state 183
+
+   79 payload.ref: PAYLOAD_REF eq.anyname . SM
+
+    SM  shift, and go to state 230
+
+
+state 184
+
+   29 upper.body: header.ref. member.def.l. payload.ref. .
+
+    $default  reduce using rule 29 (upper.body)
+
+
+state 185
+
+   76 isakmp_encryption.ref: ISAKMP_ENCRYPTION_REF eq.name . SM
+
+    SM  shift, and go to state 231
+
+
+state 186
+
+   32 isakmp_upper.body: header.ref isakmp_encryption.ref. member.def.l. . payload.ref.
+
+    PAYLOAD_REF  shift, and go to state 114
+
+    $default  reduce using rule 56 (payload.ref.)
+
+    payload.ref.  go to state 232
+    payload.ref   go to state 116
+
+
+state 187
+
+   84 data.def: DATA eq.data.term SM .
+
+    $default  reduce using rule 84 (data.def)
+
+
+state 188
+
+  141 padfunc: PADFUNC . LP RP
+
+    LP  shift, and go to state 233
+
+
+state 189
+
+   92 algomem.def: ALGOMEM_PAD EQ padfunc . SM
+
+    SM  shift, and go to state 234
+
+
+state 190
+
+  142 crpyt_call: CRYPTFUNC . LP
+
+    LP  shift, and go to state 235
+
+
+state 191
+
+  144 ike_crpyt_call: IKE_CRYPTFUNC . LP
+
+    LP  shift, and go to state 236
+
+
+state 192
+
+  143 crpytfunc: crpyt_call . arg.l. RP
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    $default  reduce using rule 129 (arg.l.)
+
+    arg.term   go to state 211
+    arg.l.     go to state 237
+    arg.l      go to state 213
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 193
+
+   93 algomem.def: ALGOMEM_CRYPT EQ crpytfunc . SM
+
+    SM  shift, and go to state 238
+
+
+state 194
+
+  145 ike_crpytfunc: ike_crpyt_call . arg.l. RP
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    $default  reduce using rule 129 (arg.l.)
+
+    arg.term   go to state 211
+    arg.l.     go to state 239
+    arg.l      go to state 213
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 195
+
+   94 algomem.def: ALGOMEM_CRYPT EQ ike_crpytfunc . SM
+
+    SM  shift, and go to state 240
+
+
+state 196
+
+  146 auth_call: AUTHFUNC . LP
+
+    LP  shift, and go to state 241
+
+
+state 197
+
+  147 authfunc: auth_call . arg.l. RP
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    $default  reduce using rule 129 (arg.l.)
+
+    arg.term   go to state 211
+    arg.l.     go to state 242
+    arg.l      go to state 213
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 198
+
+   95 algomem.def: ALGOMEM_AUTH EQ authfunc . SM
+
+    SM  shift, and go to state 243
+
+
+state 199
+
+   80 dnsqd.ref: DNSQD_REF eq.opt.term . SM
+
+    SM  shift, and go to state 244
+
+
+state 200
+
+   81 dnsan.ref: DNSAN_REF . eq.opt.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.opt.term  go to state 245
+    eq           go to state 98
+
+
+state 201
+
+   41 dnshdr.body: member.def.l. dnsqd.ref. dnsan.ref. . dnsns.ref. dnsar.ref.
+
+    DNSNS_REF  shift, and go to state 246
+
+    $default  reduce using rule 70 (dnsns.ref.)
+
+    dnsns.ref.  go to state 247
+    dnsns.ref   go to state 248
+
+
+state 202
+
+   69 dnsan.ref.: dnsan.ref .
+
+    $default  reduce using rule 69 (dnsan.ref.)
+
+
+state 203
+
+   74 packet.ref: PACKET_REF eq.name SM .
+
+    $default  reduce using rule 74 (packet.ref)
+
+
+state 204
+
+   77 extent.ref: EXTENT_REF eq.name SM .
+
+    $default  reduce using rule 77 (extent.ref)
+
+
+state 205
+
+   78 upper.ref: UPPER_REF eq.upper.term . SM
+
+    SM  shift, and go to state 249
+
+
+state 206
+
+  110 eq.upper.term: eq . upper.term
+
+    NAME  shift, and go to state 250
+    ANY   shift, and go to state 149
+    AUTO  shift, and go to state 150
+    ZERO  shift, and go to state 151
+    FILL  shift, and go to state 152
+    STOP  shift, and go to state 153
+
+    upper.term  go to state 251
+    action      go to state 252
+
+
+state 207
+
+  133 func_call: FUNCTION LP .
+
+    $default  reduce using rule 133 (func_call)
+
+
+state 208
+
+  127 arg.term: NAME .
+
+    $default  reduce using rule 127 (arg.term)
+
+
+state 209
+
+  126 arg.term: STRING .
+
+    $default  reduce using rule 126 (arg.term)
+
+
+state 210
+
+  125 arg.term: NUMBER .
+
+    $default  reduce using rule 125 (arg.term)
+
+
+state 211
+
+  131 arg.l: arg.term .
+
+    $default  reduce using rule 131 (arg.l)
+
+
+state 212
+
+  134 function: func_call arg.l. . RP
+
+    RP  shift, and go to state 253
+
+
+state 213
+
+  130 arg.l.: arg.l .
+  132 arg.l: arg.l . CM arg.term
+
+    CM  shift, and go to state 254
+
+    $default  reduce using rule 130 (arg.l.)
+
+
+state 214
+
+  128 arg.term: function .
+
+    $default  reduce using rule 128 (arg.term)
+
+
+state 215
+
+  135 bsa_call: BSAFUNC LP .
+
+    $default  reduce using rule 135 (bsa_call)
+
+
+state 216
+
+  137 ike_p2_hash_call: IKE_P2_HASHFUNC LP .
+
+    $default  reduce using rule 137 (ike_p2_hash_call)
+
+
+state 217
+
+  139 dhcpauth_call: DHCPAUTHFUNC LP .
+
+    $default  reduce using rule 139 (dhcpauth_call)
+
+
+state 218
+
+  136 bsafunc: bsa_call arg.l. . RP
+
+    RP  shift, and go to state 255
+
+
+state 219
+
+   89 member.def: MEMBER EQ bsafunc SM .
+
+    $default  reduce using rule 89 (member.def)
+
+
+state 220
+
+  138 ike_p2_hashfunc: ike_p2_hash_call arg.l. . RP
+
+    RP  shift, and go to state 256
+
+
+state 221
+
+   90 member.def: MEMBER EQ ike_p2_hashfunc SM .
+
+    $default  reduce using rule 90 (member.def)
+
+
+state 222
+
+  140 dhcpauthfunc: dhcpauth_call arg.l. . RP
+
+    RP  shift, and go to state 257
+
+
+state 223
+
+   91 member.def: MEMBER EQ dhcpauthfunc SM .
+
+    $default  reduce using rule 91 (member.def)
+
+
+state 224
+
+  121 number.l: NUMBER .
+
+    $default  reduce using rule 121 (number.l)
+
+
+state 225
+
+  118 values: values.prefix number.l. . RC
+
+    RC  shift, and go to state 258
+
+
+state 226
+
+  120 number.l.: number.l .
+  122 number.l: number.l . CM NUMBER
+
+    CM  shift, and go to state 259
+
+    $default  reduce using rule 120 (number.l.)
+
+
+state 227
+
+  124 anyname: NAME .
+
+    $default  reduce using rule 124 (anyname)
+
+
+state 228
+
+  123 anyname: ANY .
+
+    $default  reduce using rule 123 (anyname)
+
+
+state 229
+
+  109 eq.anyname: EQ anyname .
+
+    $default  reduce using rule 109 (eq.anyname)
+
+
+state 230
+
+   79 payload.ref: PAYLOAD_REF eq.anyname SM .
+
+    $default  reduce using rule 79 (payload.ref)
+
+
+state 231
+
+   76 isakmp_encryption.ref: ISAKMP_ENCRYPTION_REF eq.name SM .
+
+    $default  reduce using rule 76 (isakmp_encryption.ref)
+
+
+state 232
+
+   32 isakmp_upper.body: header.ref isakmp_encryption.ref. member.def.l. payload.ref. .
+
+    $default  reduce using rule 32 (isakmp_upper.body)
+
+
+state 233
+
+  141 padfunc: PADFUNC LP . RP
+
+    RP  shift, and go to state 260
+
+
+state 234
+
+   92 algomem.def: ALGOMEM_PAD EQ padfunc SM .
+
+    $default  reduce using rule 92 (algomem.def)
+
+
+state 235
+
+  142 crpyt_call: CRYPTFUNC LP .
+
+    $default  reduce using rule 142 (crpyt_call)
+
+
+state 236
+
+  144 ike_crpyt_call: IKE_CRYPTFUNC LP .
+
+    $default  reduce using rule 144 (ike_crpyt_call)
+
+
+state 237
+
+  143 crpytfunc: crpyt_call arg.l. . RP
+
+    RP  shift, and go to state 261
+
+
+state 238
+
+   93 algomem.def: ALGOMEM_CRYPT EQ crpytfunc SM .
+
+    $default  reduce using rule 93 (algomem.def)
+
+
+state 239
+
+  145 ike_crpytfunc: ike_crpyt_call arg.l. . RP
+
+    RP  shift, and go to state 262
+
+
+state 240
+
+   94 algomem.def: ALGOMEM_CRYPT EQ ike_crpytfunc SM .
+
+    $default  reduce using rule 94 (algomem.def)
+
+
+state 241
+
+  146 auth_call: AUTHFUNC LP .
+
+    $default  reduce using rule 146 (auth_call)
+
+
+state 242
+
+  147 authfunc: auth_call arg.l. . RP
+
+    RP  shift, and go to state 263
+
+
+state 243
+
+   95 algomem.def: ALGOMEM_AUTH EQ authfunc SM .
+
+    $default  reduce using rule 95 (algomem.def)
+
+
+state 244
+
+   80 dnsqd.ref: DNSQD_REF eq.opt.term SM .
+
+    $default  reduce using rule 80 (dnsqd.ref)
+
+
+state 245
+
+   81 dnsan.ref: DNSAN_REF eq.opt.term . SM
+
+    SM  shift, and go to state 264
+
+
+state 246
+
+   82 dnsns.ref: DNSNS_REF . eq.opt.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.opt.term  go to state 265
+    eq           go to state 98
+
+
+state 247
+
+   41 dnshdr.body: member.def.l. dnsqd.ref. dnsan.ref. dnsns.ref. . dnsar.ref.
+
+    DNSAR_REF  shift, and go to state 266
+
+    $default  reduce using rule 72 (dnsar.ref.)
+
+    dnsar.ref.  go to state 267
+    dnsar.ref   go to state 268
+
+
+state 248
+
+   71 dnsns.ref.: dnsns.ref .
+
+    $default  reduce using rule 71 (dnsns.ref.)
+
+
+state 249
+
+   78 upper.ref: UPPER_REF eq.upper.term SM .
+
+    $default  reduce using rule 78 (upper.ref)
+
+
+state 250
+
+  100 upper.term: NAME .
+
+    $default  reduce using rule 100 (upper.term)
+
+
+state 251
+
+  110 eq.upper.term: eq upper.term .
+
+    $default  reduce using rule 110 (eq.upper.term)
+
+
+state 252
+
+  101 upper.term: action .
+
+    $default  reduce using rule 101 (upper.term)
+
+
+state 253
+
+  134 function: func_call arg.l. RP .
+
+    $default  reduce using rule 134 (function)
+
+
+state 254
+
+  132 arg.l: arg.l CM . arg.term
+
+    NAME      shift, and go to state 208
+    STRING    shift, and go to state 209
+    NUMBER    shift, and go to state 210
+    FUNCTION  shift, and go to state 148
+
+    arg.term   go to state 269
+    func_call  go to state 155
+    function   go to state 214
+
+
+state 255
+
+  136 bsafunc: bsa_call arg.l. RP .
+
+    $default  reduce using rule 136 (bsafunc)
+
+
+state 256
+
+  138 ike_p2_hashfunc: ike_p2_hash_call arg.l. RP .
+
+    $default  reduce using rule 138 (ike_p2_hashfunc)
+
+
+state 257
+
+  140 dhcpauthfunc: dhcpauth_call arg.l. RP .
+
+    $default  reduce using rule 140 (dhcpauthfunc)
+
+
+state 258
+
+  118 values: values.prefix number.l. RC .
+
+    $default  reduce using rule 118 (values)
+
+
+state 259
+
+  122 number.l: number.l CM . NUMBER
+
+    NUMBER  shift, and go to state 270
+
+
+state 260
+
+  141 padfunc: PADFUNC LP RP .
+
+    $default  reduce using rule 141 (padfunc)
+
+
+state 261
+
+  143 crpytfunc: crpyt_call arg.l. RP .
+
+    $default  reduce using rule 143 (crpytfunc)
+
+
+state 262
+
+  145 ike_crpytfunc: ike_crpyt_call arg.l. RP .
+
+    $default  reduce using rule 145 (ike_crpytfunc)
+
+
+state 263
+
+  147 authfunc: auth_call arg.l. RP .
+
+    $default  reduce using rule 147 (authfunc)
+
+
+state 264
+
+   81 dnsan.ref: DNSAN_REF eq.opt.term SM .
+
+    $default  reduce using rule 81 (dnsan.ref)
+
+
+state 265
+
+   82 dnsns.ref: DNSNS_REF eq.opt.term . SM
+
+    SM  shift, and go to state 271
+
+
+state 266
+
+   83 dnsar.ref: DNSAR_REF . eq.opt.term SM
+
+    EQ  shift, and go to state 96
+
+    eq.opt.term  go to state 272
+    eq           go to state 98
+
+
+state 267
+
+   41 dnshdr.body: member.def.l. dnsqd.ref. dnsan.ref. dnsns.ref. dnsar.ref. .
+
+    $default  reduce using rule 41 (dnshdr.body)
+
+
+state 268
+
+   73 dnsar.ref.: dnsar.ref .
+
+    $default  reduce using rule 73 (dnsar.ref.)
+
+
+state 269
+
+  132 arg.l: arg.l CM arg.term .
+
+    $default  reduce using rule 132 (arg.l)
+
+
+state 270
+
+  122 number.l: number.l CM NUMBER .
+
+    $default  reduce using rule 122 (number.l)
+
+
+state 271
+
+   82 dnsns.ref: DNSNS_REF eq.opt.term SM .
+
+    $default  reduce using rule 82 (dnsns.ref)
+
+
+state 272
+
+   83 dnsar.ref: DNSAR_REF eq.opt.term . SM
+
+    SM  shift, and go to state 273
+
+
+state 273
+
+   83 dnsar.ref: DNSAR_REF eq.opt.term SM .
+
+    $default  reduce using rule 83 (dnsar.ref)
diff -urN tahi-linux-3.0.12/lib/pkt/PzParse.y tahi-linux-3.0.12-linux/lib/pkt/PzParse.y
--- tahi-linux-3.0.12/lib/pkt/PzParse.y	2005-05-09 11:35:25.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/PzParse.y	2007-12-09 23:19:59.000000000 +0100
@@ -182,7 +182,11 @@
 #define YYPARSE_PARAM_TYPE LxLexer&
 #define yyparse(lex)parse(lex)
 #else
+#if ! defined(__linux__)
 #define	yyparse()parse(LxLexer& lexer)
+#else
+#define	yyparse(void)parse(LxLexer& lexer)
+#endif
 #endif
 #define	yylex()lexer.lex(compound_)
 #define yyerror lexer.yaccError
diff -urN tahi-linux-3.0.12/lib/pkt/RAFControl.h tahi-linux-3.0.12-linux/lib/pkt/RAFControl.h
--- tahi-linux-3.0.12/lib/pkt/RAFControl.h	2001-10-05 13:41:20.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/RAFControl.h	2007-12-09 23:19:59.000000000 +0100
@@ -70,7 +70,8 @@
 	CSTR reverseEvaluate(const McObject&,PvOctets&,bool&);
 	bool evaluateWith(RObject*,WObject*) const;
 	WObject* evaluateAlgorithm(RObject*) const;
-	WObject* RAFControl::evaluate(RObject*);
+	// WObject* RAFControl::evaluate(RObject*);
+	WObject* evaluate(RObject*);
 virtual	void reset();
 	void applyFrame(const WObject* w) const;
 	const WAlgorithm* appliedAlgorithm() const;
diff -urN tahi-linux-3.0.12/lib/pkt/RunEnv.cc tahi-linux-3.0.12-linux/lib/pkt/RunEnv.cc
--- tahi-linux-3.0.12/lib/pkt/RunEnv.cc	2003-10-23 06:37:31.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/pkt/RunEnv.cc	2007-12-09 23:19:59.000000000 +0100
@@ -52,6 +52,9 @@
 #include <sys/param.h>
 #include <sys/time.h>
 #include <unistd.h>
+#if defined(__linux__)
+#include <time.h>
+#endif
 IfName::IfName(CSTR n,CSTR i,CSTR e):CmCString(n),interface_(i),ether_(e) {}
 IfName::~IfName() {}
 IfName* IfName::create(CSTR n,CSTR i,CSTR m,CSTR file,uint32_t line) {
diff -urN tahi-linux-3.0.12/lib/Pz/crypto/sha2/sha2.c tahi-linux-3.0.12-linux/lib/Pz/crypto/sha2/sha2.c
--- tahi-linux-3.0.12/lib/Pz/crypto/sha2/sha2.c	2003-04-18 12:46:37.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Pz/crypto/sha2/sha2.c	2007-12-09 23:19:58.000000000 +0100
@@ -39,7 +39,11 @@
 
 #include <sys/types.h>
 #include <sys/time.h>
+#if defined(__linux__)
+#include <endian.h>
+#else
 #include <machine/endian.h>
+#endif
 #include <crypto/sha2/sha2.h>
 #include <openssl/evp.h>
 
Dateien tahi-linux-3.0.12/lib/Pz/libPz2.so und tahi-linux-3.0.12-linux/lib/Pz/libPz2.so sind verschieden.
diff -urN tahi-linux-3.0.12/lib/Pz/Makefile tahi-linux-3.0.12-linux/lib/Pz/Makefile
--- tahi-linux-3.0.12/lib/Pz/Makefile	2007-03-07 12:04:57.000000000 +0100
+++ tahi-linux-3.0.12-linux/lib/Pz/Makefile	2007-12-09 23:19:57.000000000 +0100
@@ -1,4 +1,8 @@
+CC=g++
+CC2=cc
+Cm=../Cm/
 LIB=	Pz
+LIB2=	Pz2
 SRCS=	DmObject.cc ItPosition.cc McAH.cc McARP.cc McAlgorithm.cc	\
 	McDHCPv6.cc McDNS.cc McESP.cc McEther.cc McICMPv4.cc		\
 	McICMPv6.cc McIGMP.cc McIKE.cc McIPv4.cc McIPv6.cc McInit.cc	\
@@ -8,11 +12,11 @@
 	MmHeader.cc MmObject.cc MvArgCheck.cc MvFunction.cc		\
 	PAlgorithm.cc PControl.cc PObject.cc PcObject.cc PlObject.cc	\
 	PrItem.cc PvAction.cc PvAutoItem.cc PvIfName.cc PvName.cc	\
-	PvObject.cc PvOctets.cc RObject.cc WObject.cc hmac.c		\
-	rijndael-alg-fst.c rijndael-api-fst.c sha2.c
+	PvObject.cc PvOctets.cc RObject.cc WObject.cc crypto/hmac/hmac.c 
+SRCS2=	crypto/rijndael/rijndael-alg-fst.c crypto/rijndael/rijndael-api-fst.c crypto/sha2/sha2.c
 
-CXXFLAGS+=	-O0 -I$(Cm) -I.
-CFLAGS+=	-I$(Cm) -I.
+CXXFLAGS+=	-O0 -I$(Cm) -I. -pipe -g -DYYDEBUG -Wall -Woverloaded-virtual -fno-strict-aliasing
+CFLAGS+=	-I$(Cm) -I.  -pipe -g -DYYDEBUG -Wall -Woverloaded-virtual -fno-strict-aliasing
 
 #CXXFLAGS=	-pipe -g -Wall -I./ -I$(Cm)
 #CFLAGS=	-pipe -g -Wall -I./ -I$(Cm) -I/usr/local/include
@@ -35,33 +39,34 @@
 # RFC 1905,  Protocol Operations for SNMPv2
 # CXXFLAGS+=   -DNOT_USE_SNMP
 
-# RFC 3376, IGMPv3
-# CXXFLAGS+=	-DNOT_USE_IGMPV3_QUERY
-
-# RFC 3810, MLDv2 for IPv6
-# CXXFLAGS+=	-DUSE_MLDV2_QUERY
-
 # RFC 3775, Mobility Support in IPv6
 # CXXFLAGS+=	-DRR_DBG
 
-# RFC 3315, DHCP for IPv6
-# CXXFLAGS+=	-DDHCP_DBG
+# RFC 3376, IGMPv3
+# CXXFLAGS+=	-DNOT_USE_IGMPV3_QUERY
 
 # RFC 3768, VRRP
 # draft-ietf-vrrp-ipv6-spec-06.txt, VRRP for IPv6
 # CXXFLAGS+=	-DVRRP_DBG
 
+# RFC 3810, MLDv2 for IPv6
+# CXXFLAGS+=	-DUSE_MLDV2_QUERY
+
 # RFC 2408, ISAKMP
 # CXXFLAGS+=	-DISAKMP_DBG
 
-# RFC 3566, AES-XCBC-MAC-96 Algorithm
-# CXXFLAGS+=	-DAESXCBC_DBG
-
-# RFC 3686, Using AES Counter Mode With IPsec ESP
-# CXXFLAGS+=	-DAESCTR_DBG
-
-# RFC 4303, IP Encapsulating Security Payload (ESP)
-# 2.2.1. Extended (64-bit) Sequence Number
-# CXXFLAGS+=	-DESN_DBG
-
-.include "bsd.lib.mk"
+MKLINT=no
+# .include "bsd.lib.mk"
+all:    Pz
+
+# you must be root for copying 
+Pz:
+	$(CC) $(SRCS) $(CXXFLAGS) -shared -fPIC -o $(LIB) 
+	cp $(LIB) /usr/lib/lib$(LIB).so
+	$(CC2) -c $(SRCS2) $(LIB) $(CFLAGS) -fPIC 
+	ld -shared -soname libPz2.so -o libPz2.so -lc -lPz rijndael-alg-fst.o rijndael-api-fst.o sha2.o
+	cp libPz2.so /usr/lib
+
+clean:
+	- rm Pz* *.o libPz*
+	- rm /usr/lib/libPz*
diff -urN tahi-linux-3.0.12/lib/Pz/McIKE.h tahi-linux-3.0.12-linux/lib/Pz/McIKE.h
--- tahi-linux-3.0.12/lib/Pz/McIKE.h	2005-05-09 11:35:23.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Pz/McIKE.h	2007-12-09 23:19:58.000000000 +0100
@@ -398,7 +398,8 @@
 
 class PaISAKMP: public PaESP {
 	public:
-		PaISAKMP::PaISAKMP(const MObject *m, CSTR st, int l):
+		// PaISAKMP::PaISAKMP(const MObject *m, CSTR st, int l):
+		PaISAKMP(const MObject *m, CSTR st, int l):
 			PaESP(m, st, l) {};
 		virtual ~PaISAKMP() {}
 
diff -urN tahi-linux-3.0.12/lib/Pz/McSub.h tahi-linux-3.0.12-linux/lib/Pz/McSub.h
--- tahi-linux-3.0.12/lib/Pz/McSub.h	2004-09-22 09:31:37.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Pz/McSub.h	2007-12-09 23:19:58.000000000 +0100
@@ -49,7 +49,8 @@
 #include "MmObject.h"
 
 #include <sys/time.h>	//for bpf.h
-#include <net/bpf.h>
+// #include <net/bpf.h>
+#include <pcap-bpf.h>
 #include <sys/socket.h>
 
 class PControl;
diff -urN tahi-linux-3.0.12/lib/Pz/MfAlgorithm.cc tahi-linux-3.0.12-linux/lib/Pz/MfAlgorithm.cc
--- tahi-linux-3.0.12/lib/Pz/MfAlgorithm.cc	2007-05-25 03:51:45.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Pz/MfAlgorithm.cc	2007-12-09 23:19:58.000000000 +0100
@@ -217,6 +217,7 @@
 	scheduleKeys(key,schd);
 	BF_cbc_encrypt(is,os,l,&schd,iv,DES_DECRYPT);}
 
+#if ! defined(__linux__)
 #include <openssl/rc5.h>
 //----------------------------------------------------------------------
 // RC5 CRYPT ALGORITHM
@@ -234,6 +235,7 @@
 	RC5_32_KEY schd;
 	scheduleKeys(key,schd);
 	RC5_32_cbc_encrypt(is,os,l,&schd,iv,DES_DECRYPT);}
+#endif
 
 #include <openssl/cast.h>
 //----------------------------------------------------------------------
@@ -589,8 +591,10 @@
 MfDESCBC::~MfDESCBC() {}
 MfBLOWFISH::MfBLOWFISH(CSTR s,uint8_t k,uint8_t i,uint8_t a):MfCryptKey(s,k,i,a) {}
 MfBLOWFISH::~MfBLOWFISH() {}
+#if ! defined(__linux__)
 MfRC5::MfRC5(CSTR s,uint8_t k,uint8_t i,uint8_t a):MfCryptKey(s,k,i,a) {}
 MfRC5::~MfRC5() {}
+#endif
 MfCAST128::MfCAST128(CSTR s,uint8_t k,uint8_t i,uint8_t a):MfCryptKey(s,k,i,a) {}
 MfCAST128::~MfCAST128() {}
 MfDES3CBC::MfDES3CBC(CSTR s,uint8_t k,uint8_t i,uint8_t a):MfCryptKey(s,k,i,a) {}
diff -urN tahi-linux-3.0.12/lib/Pz/MfAlgorithm.h tahi-linux-3.0.12-linux/lib/Pz/MfAlgorithm.h
--- tahi-linux-3.0.12/lib/Pz/MfAlgorithm.h	2007-03-07 12:04:57.000000000 +0100
+++ tahi-linux-3.0.12-linux/lib/Pz/MfAlgorithm.h	2007-12-09 23:19:58.000000000 +0100
@@ -48,7 +48,9 @@
 #include <openssl/des.h>
 #include <openssl/evp.h>
 #include <openssl/blowfish.h>
+#if ! defined(__linux__)
 #include <openssl/rc5.h>
+#endif
 #include <openssl/cast.h>
 #include <openssl/aes.h>
 
@@ -242,6 +244,7 @@
 };
 
 //----------------------------------------------------------------------
+#if ! defined(__linux__)
 class MfRC5:public MfCryptKey {
 public:
 	MfRC5(CSTR,uint8_t,uint8_t,uint8_t);
@@ -250,6 +253,7 @@
 virtual	void encrypt(OCTSTR,OCTSTR,uint32_t,const PObject*,OCTSTR) const;
 virtual	void decrypt(OCTSTR,OCTSTR,uint32_t,const PObject*,OCTSTR) const;
 };
+#endif
 
 //----------------------------------------------------------------------
 class MfCAST128:public MfCryptKey {
@@ -402,7 +406,8 @@
 		virtual	PvOctets* result(OCTSTR, const PObjectList &) const;
 		struct aes_ctx *crypto_alloc_xcbc_block(void) const;
 		void crypto_free_xcbc_block(struct aes_ctx *) const;
-		void MfAES_XCBC::_crypto_xcbc_init(struct aes_ctx *,
+		// void MfAES_XCBC::_crypto_xcbc_init(struct aes_ctx *,
+		void _crypto_xcbc_init(struct aes_ctx *,
 			const u_int8_t *, const int) const;
 		void xor_128(u_int8_t *, const u_int8_t *) const;
 };
diff -urN tahi-linux-3.0.12/lib/Pz/PvOctets.cc tahi-linux-3.0.12-linux/lib/Pz/PvOctets.cc
--- tahi-linux-3.0.12/lib/Pz/PvOctets.cc	2005-05-09 11:35:24.000000000 +0200
+++ tahi-linux-3.0.12-linux/lib/Pz/PvOctets.cc	2007-12-09 23:19:58.000000000 +0100
@@ -67,6 +67,9 @@
 }
 */
 #endif
+#if defined(__linux__)
+#include <netinet/ether.h>
+#endif
 #include <string.h>
 
 PvOctets::~PvOctets() {
@@ -123,7 +126,11 @@
 bool PvEther::pton(CSTR p) {
 	if(p==0) {return false;}
 	struct ether_addr *n=ether_aton((char*)p);
+#if defined(__linux__)
+	if(n!=0) {set(length(),n->ether_addr_octet);}
+#else
 	if(n!=0) {set(length(),n->octet);}
+#endif
 	return (n!=0);}
 PvEther::PvEther(const PvV6Addr& v6,OCTSTR o):PvOctets(sizeof(etheraddr),o) {
 	multicast(v6);}
Dateien tahi-linux-3.0.12/lib/Pz/Pz und tahi-linux-3.0.12-linux/lib/Pz/Pz sind verschieden.
Dateien tahi-linux-3.0.12/lib/Pz/rijndael-alg-fst.o und tahi-linux-3.0.12-linux/lib/Pz/rijndael-alg-fst.o sind verschieden.
Dateien tahi-linux-3.0.12/lib/Pz/rijndael-api-fst.o und tahi-linux-3.0.12-linux/lib/Pz/rijndael-api-fst.o sind verschieden.
Dateien tahi-linux-3.0.12/lib/Pz/sha2.o und tahi-linux-3.0.12-linux/lib/Pz/sha2.o sind verschieden.
diff -urN tahi-linux-3.0.12/lorder tahi-linux-3.0.12-linux/lorder
--- tahi-linux-3.0.12/lorder	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/lorder	2007-12-09 23:19:59.000000000 +0100
@@ -0,0 +1,6 @@
+#!/bin/sh
+#
+# *** This is a dummy lorder only for compiling TAHI on Linux ***
+#
+while [ $1 ]; do echo $1; shift; done;
+exit 0;
diff -urN tahi-linux-3.0.12/Makefile tahi-linux-3.0.12-linux/Makefile
--- tahi-linux-3.0.12/Makefile	2005-05-25 04:46:16.000000000 +0200
+++ tahi-linux-3.0.12-linux/Makefile	2007-12-09 23:19:59.000000000 +0100
@@ -8,6 +8,29 @@
 #SECTIONS=       1 2 3 4 5 6 7 8 9 n
 SECTIONS=       1
 .MAIN: depend all
+
+all:
+	cd lib/; make all
+	cd bin/; make all
+	cd script/pmod/V6evalCommon/; perl Makefile.PL; make
+	cd script/pmod/V6evalRemote/; perl Makefile.PL; make
+	cd script/pmod/V6evalRemote/; perl Makefile.PL; make
+
+clean:
+	cd lib/; make clean
+	cd bin/; make clean
+	cd script/pmod/V6evalCommon/; make clean
+	cd script/pmod/V6evalRemote/; make clean
+	cd script/pmod/V6evalRemote/; make clean
+
+install:
+	cd etc; make install
+	cd include; make install
+	cd bin; make install
+	cd script/pmod/V6evalCommon/; make install
+	cd script/pmod/V6evalRemote/; make install
+	cd script/pmod/V6evalTool/; make install
+
 beforeinstall:
 	for i in $(DIRS); do \
 		[ -d $$i ] || mkdir $$i; \
@@ -21,4 +44,4 @@
 	done
 	install -c -o bin -g bin -m 444 $(DOCFILES) $(PREFIX)/doc
 
-.include <bsd.subdir.mk>
+#.include <bsd.subdir.mk>
diff -urN tahi-linux-3.0.12/script/pmod/V6evalCommon/blib/lib/V6evalCommon.pm tahi-linux-3.0.12-linux/script/pmod/V6evalCommon/blib/lib/V6evalCommon.pm
--- tahi-linux-3.0.12/script/pmod/V6evalCommon/blib/lib/V6evalCommon.pm	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalCommon/blib/lib/V6evalCommon.pm	2007-12-09 23:19:59.000000000 +0100
@@ -0,0 +1,194 @@
+#
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# Yokogawa Electric Corporation,
+# YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
+# All rights reserved.
+# 
+# Redistribution and use of this software in source and binary forms, with 
+# or without modification, are permitted provided that the following 
+# conditions and disclaimer are agreed and accepted by the user:
+# 
+# 1. Redistributions of source code must retain the above copyright 
+# notice, this list of conditions and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright 
+# notice, this list of conditions and the following disclaimer in the 
+# documentation and/or other materials provided with the distribution.
+# 
+# 3. Neither the names of the copyrighters, the name of the project which 
+# is related to this software (hereinafter referred to as "project") nor 
+# the names of the contributors may be used to endorse or promote products 
+# derived from this software without specific prior written permission.
+# 
+# 4. No merchantable use may be permitted without prior written 
+# notification to the copyrighters. However, using this software for the 
+# purpose of testing or evaluating any products including merchantable 
+# products may be permitted without any notification to the copyrighters.
+# 
+# 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
+# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
+# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
+# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+# THE POSSIBILITY OF SUCH DAMAGE.
+#
+########################################################################
+package V6evalCommon;
+use Exporter;
+@ISA = qw(Exporter);
+use File::Basename;
+
+@EXPORT = qw(
+	     pathinit
+	     searchPath
+	     $SeqName
+	     $SeqDir
+	     $V6EVALPREFX
+	     $V6EVALROOT
+	     $V6EVALBIN
+	     $V6EVALETC
+	     $V6EVALINC
+	     );
+
+sub pathinit(@);
+sub searchPath($$);
+#sub readTnDef($);
+#sub readNutDef($);
+
+########################################################################
+#       Path Init
+#-----------------------------------------------------------------------
+sub pathinit(@) { my(
+        $path,           # path  
+    ) = @_; 
+	($SeqName,$SeqDir,$SeqSuffix) = fileparse($0,'.seq');
+	$V6EVALPREFIX= "/usr/local/v6eval";
+	$V6EVALROOT  = $path            || $ENV{V6EVALROOT} || $V6EVALPREFIX;
+	$V6EVALBIN   = $ENV{V6EVALBIN}  || "$V6EVALROOT/bin/";
+	$V6EVALETC   = $ENV{V6EVALETC}  || "./:$V6EVALROOT/etc/";
+	$V6EVALINC   = $ENV{V6EVALINC}  || "$SeqDir:./:$V6EVALROOT/include/";
+}
+
+########################################################################
+#       Search Path
+#-----------------------------------------------------------------------
+sub searchPath($$) { my(
+        $path,           # path  
+        $filename        # filename for search
+    ) = @_;
+        my $fullname="";
+        if($filename =~ m!.*/.+!) {
+                $fullname=$filename;
+        }
+        my @paths=split(/:/,($path));
+        foreach(@paths) {
+                my $tmpname=$_ . "/" . $filename;
+                #my $tmpname=$_ .  $filename;
+                if($fullname eq "") {
+                        $fullname=$tmpname if(-r $tmpname);
+                }
+        }
+        $fullname;
+}
+
+__END__
+
+sub readTnDef($) { my(
+        $tn
+    ) = @_; 
+	#---------------------------------------------------------------
+	# Check TN definition and setup environment
+	#---------------------------------------------------------------
+	my (%TnDef);
+	prTrace("Looking up $tn");
+	open(FILE,"$tn") || prErrExit("Can not open $tn");
+
+	my $lines=0;
+	while(<FILE>){
+		$lines++;
+
+		# skip comment line
+		next if(/^\s*$/ || /^#/);
+
+		#
+		chomp;
+
+		# check syntax
+		if( /^(socketpath)\s+(\S+)/  ) {
+			$SocketPath=$2;
+		}
+		elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-f]{1,2}:){5}[0-9a-f]{1,2})/){
+			$TnDef{$1."_device"}=$2;
+			$TnDef{$1."_addr"}=$3;
+		}
+		elsif( /^(RemoteCuPath)\s+(\S+)/  ||
+		       /^(RemoteDevice)\s+(\S+)/   ||
+		       /^(RemoteDebug)\s+(\S+)/    ||
+		       /^(RemoteIntDebug)\s+(\S+)/ ||
+		       /^(RemoteLog)\s+(\S+)/      ||
+		       /^(RemoteSpeed)\s+(\S+)/    ||
+		       /^(RemoteLogout)\s+(\S+)/   ||
+		       /^(RemoteMethod)\s+(\S+)/   ||
+		       /^(filter)\s+(\S+)/){
+		}
+		else{ $TnDef{'error'} .= "line $lines : unknown directive $_\n";}
+
+		# set
+		if( /^(\S+)\s+(.*)/ ) {
+			if($TnDef{$1}){
+				$TnDef{'error'} .= "line $lines : duplicate entry $_\n";}
+			} else {
+				$TnDef{$1} = $2;
+			}
+		}
+		prTrace("TN : $_");
+	}
+	close FILE;
+
+	return %TnDef;
+}
+
+sub readNutDef($) { my(
+        $nut
+    ) = @_; 
+	#---------------------------------------------------------------
+	# Check NUT definition and setup environment
+	#---------------------------------------------------------------
+	my (%NutDef);
+	prTrace("Looking up $nut");
+	open(FILE, "$nut") || prErrExit("Can not open $nut");
+
+	while(<FILE>){
+		next if(/^\s*$/ || /^#/);	# remove comment
+		chomp;
+		if( /^(\S+)\s+(.*)/ )		{
+		    $NutDef{$1} = $2;
+		}
+		if( /^(System)\s+(.*)/              ||
+		    /^(TargetName)\s+(.*)/	    ||
+		    /^(HostName)\s+(.*)/            ||
+		    /^(Type)\s+(.*)/                ) {
+		    prLog("<TR><TD>$1</TD><TD>$2</TD></TR>");
+		} elsif(
+		    /^(User)\s+(\S+)/               ||
+		    /^(Password)\s+(\S+)/    ){
+		}
+		elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2})/){
+			$NutDef{$1."_device"}=$2;
+			$NutDef{$1."_addr"}=$3;
+		}
+		else{ $NutDef{'error'} .= "line $lines : unknown directive $_\n";}
+		prTrace("NUT: $_");
+	}
+	close FILE;
+
+	return %NutDef;
+}
diff -urN tahi-linux-3.0.12/script/pmod/V6evalCommon/Makefile.tmp tahi-linux-3.0.12-linux/script/pmod/V6evalCommon/Makefile.tmp
--- tahi-linux-3.0.12/script/pmod/V6evalCommon/Makefile.tmp	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalCommon/Makefile.tmp	2007-12-10 20:48:57.000000000 +0100
@@ -0,0 +1,786 @@
+# This Makefile is for the V6evalCommon extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 6.30 (Revision: Revision: 4535 ) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+#       ANY CHANGES MADE HERE WILL BE LOST!
+#
+#   MakeMaker ARGV: ()
+#
+#   MakeMaker Parameters:
+
+#     MAKEFILE => q[Makefile.tmp]
+#     NAME => q[V6evalCommon]
+#     VERSION => q[1.00]
+#     dist => { COMPRESS=>q[gzip], SUFFIX=>q[gz] }
+#     linkext => { LINKTYPE=>q[] }
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib/perl5/5.8.8/i586-linux-thread-multi/Config.pm)
+
+# They may have been overridden via Makefile.PL or on the command line
+AR = ar
+CC = cc
+CCCDLFLAGS = -fPIC
+CCDLFLAGS = -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.8/i586-linux-thread-multi/CORE
+DLEXT = so
+DLSRC = dl_dlopen.xs
+LD = cc
+LDDLFLAGS = -shared
+LDFLAGS = 
+LIBC = /lib/libc-2.6.1.so
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 2.6.22
+RANLIB = :
+SITELIBEXP = /usr/lib/perl5/site_perl/5.8.8
+SITEARCHEXP = /usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
+SO = so
+EXE_EXT = 
+FULL_AR = /usr/bin/ar
+VENDORARCHEXP = /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
+VENDORLIBEXP = /usr/lib/perl5/vendor_perl/5.8.8
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+DFSEP = $(DIRFILESEP)
+NAME = V6evalCommon
+NAME_SYM = V6evalCommon
+VERSION = 1.00
+VERSION_MACRO = VERSION
+VERSION_SYM = 1_00
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 1.00
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1
+MAN3EXT = 3pm
+INSTALLDIRS = site
+DESTDIR = 
+PREFIX = $(SITEPREFIX)
+PERLPREFIX = /usr
+SITEPREFIX = /usr
+VENDORPREFIX = /usr
+INSTALLPRIVLIB = /usr/lib/perl5/5.8.8
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /usr/lib/perl5/site_perl/5.8.8
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = /usr/lib/perl5/vendor_perl/5.8.8
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = /usr/lib/perl5/5.8.8/i586-linux-thread-multi
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = /usr/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = /usr/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = /usr/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = /usr/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLMAN1DIR = /usr/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = /usr/share/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = /usr/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = /usr/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = /usr/share/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = /usr/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/lib/perl5/5.8.8
+PERL_ARCHLIB = /usr/lib/perl5/5.8.8/i586-linux-thread-multi
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile.tmp
+MAKEFILE_OLD = Makefile.tmp.old
+MAKE_APERL_FILE = Makefile.tmp.aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib/perl5/5.8.8/i586-linux-thread-multi/CORE
+PERL = /usr/bin/perl
+FULLPERL = /usr/bin/perl
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER   = /usr/lib/perl5/5.8.8/ExtUtils/MakeMaker.pm
+MM_VERSION  = 6.30
+MM_REVISION = Revision: 4535 
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE  = Basename part of dynamic library. May be just equal BASEEXT.
+FULLEXT = V6evalCommon
+BASEEXT = V6evalCommon
+PARENT_NAME = 
+DLBASE = $(BASEEXT)
+VERSION_FROM = 
+OBJECT = 
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+BOOTDEP = 
+
+# Handy lists of source code files:
+XS_FILES = 
+C_FILES  = 
+O_FILES  = 
+H_FILES  = 
+MAN1PODS = 
+MAN3PODS = 
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h
+
+# Where to build things
+INST_LIBDIR      = $(INST_LIB)
+INST_ARCHLIBDIR  = $(INST_ARCHLIB)
+
+INST_AUTODIR     = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC      = 
+INST_DYNAMIC     = 
+INST_BOOT        = 
+
+# Extra linker info
+EXPORT_LIST        = 
+PERL_ARCHIVE       = 
+PERL_ARCHIVE_AFTER = 
+
+
+TO_INST_PM = V6evalCommon.pm
+
+PM_TO_BLIB = V6evalCommon.pm \
+	$(INST_LIB)/V6evalCommon.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 1.50
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(ABSPERLRUN)  -e 'use AutoSplit;  autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)'
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(SHELL) -c true
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(ABSPERLRUN) "-MExtUtils::Command" -e mkpath
+EQUALIZE_TIMESTAMP = $(ABSPERLRUN) "-MExtUtils::Command" -e eqtime
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');'
+DOC_INSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install
+UNINSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall
+WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist
+MACROSTART = 
+MACROEND = 
+USEMAKEFILE = -f
+FIXIN = $(PERLRUN) "-MExtUtils::MY" -e "MY->fixin(shift)"
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt: all
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip
+SUFFIX = gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = V6evalCommon
+DISTVNAME = V6evalCommon-1.00
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+
+# --- MakeMaker const_loadlibs section:
+
+
+# --- MakeMaker const_cccmd section:
+
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIBPERL_A="$(LIBPERL_A)"\
+	LINKTYPE="$(LINKTYPE)"\
+	PREFIX="$(PREFIX)"
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir
+
+
+
+# --- MakeMaker c_o section:
+
+
+# --- MakeMaker xs_c section:
+
+
+# --- MakeMaker xs_o section:
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+	$(NOECHO) $(NOOP)
+
+
+pure_all :: config pm_to_blib subdirs linkext
+	$(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+	$(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) blibdirs
+	$(NOECHO) $(NOOP)
+
+help :
+	perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker blibdirs section:
+blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists
+	$(NOECHO) $(NOOP)
+
+# Backwards compat with 6.18 through 6.25
+blibdirs.ts : blibdirs
+	$(NOECHO) $(NOOP)
+
+$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_LIBDIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_LIBDIR)
+	$(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
+
+$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_ARCHLIB)
+	$(NOECHO) $(CHMOD) 755 $(INST_ARCHLIB)
+	$(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
+
+$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_AUTODIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_AUTODIR)
+	$(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
+
+$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_ARCHAUTODIR)
+	$(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
+
+$(INST_BIN)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_BIN)
+	$(NOECHO) $(CHMOD) 755 $(INST_BIN)
+	$(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
+
+$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_SCRIPT)
+	$(NOECHO) $(CHMOD) 755 $(INST_SCRIPT)
+	$(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
+
+$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_MAN1DIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_MAN1DIR)
+	$(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
+
+$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_MAN3DIR)
+	$(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
+
+
+
+# --- MakeMaker linkext section:
+
+linkext :: 
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT)
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_bs section:
+
+BOOTSTRAP =
+
+
+# --- MakeMaker dynamic_lib section:
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+
+
+# --- MakeMaker manifypods section:
+
+POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
+POD2MAN = $(POD2MAN_EXE)
+
+
+manifypods : pure_all 
+	$(NOECHO) $(NOOP)
+
+
+
+
+# --- MakeMaker processPL section:
+
+
+# --- MakeMaker installbin section:
+
+
+# --- MakeMaker subdirs section:
+
+# none
+
+# --- MakeMaker clean_subdirs section:
+clean_subdirs :
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker clean section:
+
+# Delete temporary files but do not touch installed files. We don't delete
+# the Makefile here so a later make realclean still has a makefile to use.
+
+clean :: clean_subdirs
+	- $(RM_F) \
+	  *$(LIB_EXT) core \
+	  core.[0-9] $(INST_ARCHAUTODIR)/extralibs.all \
+	  core.[0-9][0-9] $(BASEEXT).bso \
+	  pm_to_blib.ts core.[0-9][0-9][0-9][0-9] \
+	  $(BASEEXT).x $(BOOTSTRAP) \
+	  perl$(EXE_EXT) tmon.out \
+	  *$(OBJ_EXT) pm_to_blib \
+	  $(INST_ARCHAUTODIR)/extralibs.ld blibdirs.ts \
+	  core.[0-9][0-9][0-9][0-9][0-9] *perl.core \
+	  core.*perl.*.? $(MAKE_APERL_FILE) \
+	  perl $(BASEEXT).def \
+	  core.[0-9][0-9][0-9] mon.out \
+	  lib$(BASEEXT).def perlmain.c \
+	  perl.exe so_locations \
+	  $(BASEEXT).exp 
+	- $(RM_RF) \
+	  blib 
+	- $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
+
+
+# --- MakeMaker realclean_subdirs section:
+realclean_subdirs :
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker realclean section:
+# Delete temporary files (via clean) and also delete dist files
+realclean purge ::  clean realclean_subdirs
+	- $(RM_F) \
+	  $(MAKEFILE_OLD) $(FIRST_MAKEFILE) 
+	- $(RM_RF) \
+	  $(DISTVNAME) 
+
+
+# --- MakeMaker metafile section:
+metafile : create_distdir
+	$(NOECHO) $(ECHO) Generating META.yml
+	$(NOECHO) $(ECHO) '# http://module-build.sourceforge.net/META-spec.html' > META_new.yml
+	$(NOECHO) $(ECHO) '#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#' >> META_new.yml
+	$(NOECHO) $(ECHO) 'name:         V6evalCommon' >> META_new.yml
+	$(NOECHO) $(ECHO) 'version:      1.00' >> META_new.yml
+	$(NOECHO) $(ECHO) 'version_from: ' >> META_new.yml
+	$(NOECHO) $(ECHO) 'installdirs:  site' >> META_new.yml
+	$(NOECHO) $(ECHO) 'requires:' >> META_new.yml
+	$(NOECHO) $(ECHO) '' >> META_new.yml
+	$(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml
+	$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.30' >> META_new.yml
+	-$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
+
+
+# --- MakeMaker signature section:
+signature :
+	cpansign -s
+
+
+# --- MakeMaker dist_basics section:
+distclean :: realclean distcheck
+	$(NOECHO) $(NOOP)
+
+distcheck :
+	$(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
+
+skipcheck :
+	$(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
+
+manifest :
+	$(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
+
+veryclean : realclean
+	$(RM_F) *~ *.orig */*~ */*.orig
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+	$(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
+	  -e '    if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';'
+
+tardist : $(DISTVNAME).tar$(SUFFIX)
+	$(NOECHO) $(NOOP)
+
+uutardist : $(DISTVNAME).tar$(SUFFIX)
+	uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
+
+$(DISTVNAME).tar$(SUFFIX) : distdir
+	$(PREOP)
+	$(TO_UNIX)
+	$(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+	$(RM_RF) $(DISTVNAME)
+	$(COMPRESS) $(DISTVNAME).tar
+	$(POSTOP)
+
+zipdist : $(DISTVNAME).zip
+	$(NOECHO) $(NOOP)
+
+$(DISTVNAME).zip : distdir
+	$(PREOP)
+	$(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+	$(RM_RF) $(DISTVNAME)
+	$(POSTOP)
+
+shdist : distdir
+	$(PREOP)
+	$(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+	$(RM_RF) $(DISTVNAME)
+	$(POSTOP)
+
+
+# --- MakeMaker distdir section:
+create_distdir :
+	$(RM_RF) $(DISTVNAME)
+	$(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+		-e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+distdir : create_distdir distmeta 
+	$(NOECHO) $(NOOP)
+
+
+
+# --- MakeMaker dist_test section:
+disttest : distdir
+	cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL 
+	cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+	cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
+
+
+
+# --- MakeMaker dist_ci section:
+
+ci :
+	$(PERLRUN) "-MExtUtils::Manifest=maniread" \
+	  -e "@all = keys %{ maniread() };" \
+	  -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \
+	  -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
+
+
+# --- MakeMaker distmeta section:
+distmeta : create_distdir metafile
+	$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
+	  -e '    or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"'
+
+
+
+# --- MakeMaker distsignature section:
+distsignature : create_distdir
+	$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
+	  -e '    or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"'
+	$(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
+	cd $(DISTVNAME) && cpansign -s
+
+
+
+# --- MakeMaker install section:
+
+install :: all pure_install doc_install
+	$(NOECHO) $(NOOP)
+
+install_perl :: all pure_perl_install doc_perl_install
+	$(NOECHO) $(NOOP)
+
+install_site :: all pure_site_install doc_site_install
+	$(NOECHO) $(NOOP)
+
+install_vendor :: all pure_vendor_install doc_vendor_install
+	$(NOECHO) $(NOOP)
+
+pure_install :: pure_$(INSTALLDIRS)_install
+	$(NOECHO) $(NOOP)
+
+doc_install :: doc_$(INSTALLDIRS)_install
+	$(NOECHO) $(NOOP)
+
+pure__install : pure_site_install
+	$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+doc__install : doc_site_install
+	$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+pure_perl_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLPRIVLIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+		$(INST_BIN) $(DESTINSTALLBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
+	$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+		$(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+pure_site_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLSITELIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+		$(INST_BIN) $(DESTINSTALLSITEBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
+	$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+		$(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+pure_vendor_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLVENDORARCH)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLVENDORLIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+		$(INST_BIN) $(DESTINSTALLVENDORBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+doc_perl_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLPRIVLIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_site_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLSITELIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_vendor_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLVENDORLIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+	$(NOECHO) $(NOOP)
+
+uninstall_from_perldirs ::
+	$(NOECHO) $(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_sitedirs ::
+	$(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_vendordirs ::
+	$(NOECHO) $(UNINSTALL) $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+# --- MakeMaker force section:
+# Phony target to force checking subdirectories.
+FORCE:
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker perldepend section:
+
+
+# --- MakeMaker makefile section:
+# We take a very conservative approach here, but it's worth it.
+# We move Makefile to Makefile.old here to avoid gnu make looping.
+$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
+	$(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
+	$(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
+	-$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+	-$(NOECHO) $(MV)   $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
+	- $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
+	$(PERLRUN) Makefile.PL 
+	$(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
+	$(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command.  <=="
+	false
+
+
+
+# --- MakeMaker staticmake section:
+
+# --- MakeMaker makeaperl section ---
+MAP_TARGET    = perl
+FULLPERL      = /usr/bin/perl
+
+$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+	$(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib
+	$(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+	$(NOECHO) $(PERLRUNINST) \
+		Makefile.PL DIR= \
+		MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+		MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+# --- MakeMaker test section:
+
+TEST_VERBOSE=0
+TEST_TYPE=test_$(LINKTYPE)
+TEST_FILE = test.pl
+TEST_FILES = 
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+
+test :: $(TEST_TYPE)
+	$(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.'
+
+test_dynamic :: pure_all
+
+testdb_dynamic :: pure_all
+	PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+test_ : test_dynamic
+
+test_static :: test_dynamic
+testdb_static :: testdb_dynamic
+
+
+# --- MakeMaker ppd section:
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd:
+	$(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1,00,0,0">' > $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <AUTHOR></AUTHOR>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <IMPLEMENTATION>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <ARCHITECTURE NAME="i586-linux-thread-multi" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <CODEBASE HREF="" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    </IMPLEMENTATION>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
+
+
+# --- MakeMaker pm_to_blib section:
+
+pm_to_blib : $(TO_INST_PM)
+	$(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')' \
+	  V6evalCommon.pm $(INST_LIB)/V6evalCommon.pm 
+	$(NOECHO) $(TOUCH) pm_to_blib
+
+
+# --- MakeMaker selfdocument section:
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
diff -urN tahi-linux-3.0.12/script/pmod/V6evalRemote/blib/lib/V6evalRemote.pm tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/blib/lib/V6evalRemote.pm
--- tahi-linux-3.0.12/script/pmod/V6evalRemote/blib/lib/V6evalRemote.pm	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/blib/lib/V6evalRemote.pm	2007-12-09 23:19:59.000000000 +0100
@@ -0,0 +1,1743 @@
+#
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
+# Yokogawa Electric Corporation, 
+# INTAP(Interoperability Technology Association for Information 
+# Processing, Japan), IPA (Information-technology Promotion Agency, Japan).
+# All rights reserved.
+# 
+# Redistribution and use of this software in source and binary forms, with 
+# or without modification, are permitted provided that the following 
+# conditions and disclaimer are agreed and accepted by the user:
+# 
+# 1. Redistributions of source code must retain the above copyright 
+# notice, this list of conditions and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright 
+# notice, this list of conditions and the following disclaimer in the 
+# documentation and/or other materials provided with the distribution.
+# 
+# 3. Neither the names of the copyrighters, the name of the project which 
+# is related to this software (hereinafter referred to as "project") nor 
+# the names of the contributors may be used to endorse or promote products 
+# derived from this software without specific prior written permission.
+# 
+# 4. No merchantable use may be permitted without prior written 
+# notification to the copyrighters. However, using this software for the 
+# purpose of testing or evaluating any products including merchantable 
+# products may be permitted without any notification to the copyrighters.
+# 
+# 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
+# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
+# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
+# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+# THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $TAHI: v6eval/script/pmod/V6evalRemote/V6evalRemote.pm,v 1.143 2006/02/03 10:40:15 akisada Exp $
+#
+########################################################################
+
+package V6evalRemote;
+use Exporter;
+@ISA = qw(Exporter);
+
+use 5;
+use Getopt::Std;
+use Expect;
+
+$debug=0;
+$retry=2;
+$exit_error=1;
+$init_timeout=0.2;
+$dummy_prompt='DUMMY_PROMPT';
+
+@EXPORT = qw(
+	     rType
+	     rDevice
+	     rUser
+	     rUserPrompt
+	     rPasswordPrompt
+	     rCommandPrompt
+	     rDebug
+	     rExpInternal
+	     rLogStdout
+	     rSendSpeed
+	     rCmdOutput
+	     rEnableLogout
+	     rOpen
+	     rLogin
+	     rLogout
+	     rClose
+	     rCommandAsync
+	     rCommand
+	     rRebootAsync
+	     rReboot
+	     rPutfile
+	     rInit
+	     rShutdown
+	     rArg
+	     );
+
+my %storedSIG	= ();
+
+########################################################################
+
+# The following status values must be same as V6evalTool.pm's ones.
+
+$exitPass=0;		# PASS
+$exitNS=2;		# Not yet supported
+$exitFail=32;		# FAIL
+$exitFatal=64;		# FATAL
+
+########################################################################
+BEGIN
+{
+	%storedSIG = %SIG;
+
+	foreach my $key (keys(%SIG)) {
+		$SIG{$key} = 'DEFAULT';
+	}
+
+    $SIG{CHLD}=\&_sigchld_handler;
+    $SIG{INT}=\&_sig_handler;
+    $SIG{TERM}=\&_sig_handler;
+
+    $Bye="~.";
+    $Type="tahi-v6eval";
+    $CU="cu";
+    $Device="cuaa0";
+    $User="root";
+    $Password="v6eval";
+    undef $Remote;
+    $Expect::Log_Stdout=0;
+    $SendSpeed=0;
+    $EnableLogout=0;
+
+    $CmdOutput="";
+
+    # login prompt
+    %prompt_user = (
+		   );
+#    %prompt_user = (
+#		    'kame-freebsd',	'login: ',
+#		    'freebsd43-i386',	'login: ',
+#		    'hitachi-nr60',	'login:',
+#		    'hitachi-nr60-v2',	'login:',
+#		    'hitachi-gr2k',	'login:',
+#		    'hitachi-gr2k-beta',	'login:',
+#		    'nec-libra',	'login: ',
+#		    'nec-libra-utcpip',	'login: ',
+#		    'nec-mip6',		'login: ',
+#		    'nec-ix1k',		'login: ',
+#		    'sfc-mip6',		'login: ',
+#		    'yamaha-ws-one',	'(starts|Yamaha Corporation)',
+#		    'linux-v6',		'login: ',
+#		    'sun-solaris',	'login: ',
+#		    'ms-win2k',		'Login: ',
+#		    'cisco-ios',	'get started',   
+#		    'iij-seil',		'login: ',
+#		    'telebit-tbc2k',	'Username:',
+#		    'mgcs-sj6',		'login: ',
+#		    'netbsd-i386',	'login: ',
+#		    'kame-netbsd-i386',	'login: ',
+#		    'freebsd-i386',	'login: ',
+#		    'openbsd-i386',	'login: ',
+#		    'aix',		'login: ',
+#		    'hpux',		'login: ',
+#		    'usagi-i386',	'login: ',
+#		    'usagi24-i386',	'login: ',
+#		    'mipl',		'login: ',
+#		    'lcna',		'login: ',
+#		    'ttb3010',		'login: ',
+#		    'unitedlinux',		'login: ',
+#		   );
+
+    # password prompt
+    %prompt_password = (
+			);
+#    %prompt_password = (
+#			'kame-freebsd',		'Password:',
+#			'freebsd43-i386',	'Password:',
+#			'hitachi-nr60',		'Password:',
+#			'hitachi-nr60-v2',	'Password:',
+#			'hitachi-gr2k',		'Password:',
+#			'hitachi-gr2k-beta',	'Password:',
+#			'nec-libra',		'Password:',
+#			'nec-libra-utcpip',	'Password:',
+#			'nec-mip6',		'Password:',
+#			'nec-ix1k',		'Password:',
+#			'sfc-mip6',		'Password:',
+#			'yamaha-ws-one',	'Password:',
+#			'linux-v6',		'Password: ',
+#			'sun-solaris',		'Password:',
+#			'ms-win2k',		'Password:',
+#			'cisco-ios',		'Password:',
+#			'iij-seil',		'DUMMY_PROMPT',	# dummy
+#			'telebit-tbc2k',	'Password:',
+#			'mgcs-sj6',		'Password:',
+#			'netbsd-i386',		'Password:',
+#			'kame-netbsd-i386',	'Password:',
+#			'freebsd-i386',		'Password:',
+#			'openbsd-i386',		'Password:',
+#			'aix',			'Password:',
+#			'hpux',			'Password:',
+#			'usagi-i386',		'Password: ',
+#			'usagi24-i386',		'Password: ',
+#			'mipl',			'Password: ',
+#			'lcna',			'Password:',
+#			'ttb3010',		'Password:',
+#			'unitedlinux',		'Password: ',
+#			);
+
+    # command prompt
+    %prompt_command = (
+		       );
+#    %prompt_command = (
+#		       'kame-freebsd',		'(\$|#) ',
+#		       'freebsd43-i386',	'(\$|#) ',
+#		       'hitachi-nr60',		'% ',
+#		       'hitachi-nr60-v2',	'% ',
+#		       'hitachi-gr2k',		'(command|admin)(:|>) ',
+#		       'hitachi-gr2k-beta',	'(command|admin): ',
+#		       'nec-libra',		'(\$|#) ',
+#		       'nec-libra-utcpip',	'(\$|#) ',
+#		       'nec-mip6',		'(\$|#) ',
+#		       'nec-ix1k',		'(\$|#) ',
+#		       'sfc-mip6',		'(\$|#) ',
+#		       'yamaha-ws-one',		'(>|#) ',
+#		       'linux-v6',		'# ',
+#		       'sun-solaris',		'# ',
+#		       'ms-win2k',		'.:.>',
+#		       'cisco-ios',		'(>|#)',
+#		       'iij-seil',		'\r(>|#) ',
+#		       'telebit-tbc2k',		'(> |% |accepted)',
+#		       'mgcs-sj6',		'(\$|#) ',
+#		       'netbsd-i386',		'(\$|#) ',
+#		       'kame-netbsd-i386',	'(\$|#) ',
+#		       'freebsd-i386',		'(\$|#) ',
+#		       'openbsd-i386',		'(\$|#) ',
+#		       'aix',			'(\$|#) ',
+#		       'hpux',			'(\$|#) ',
+#		       'usagi-i386',		'# ',
+#		       'usagi24-i386',		'# ',
+#		       'mipl',			'# ',
+#		       'lcna',			'(\$|#) ',
+#		       'ttb3010',		'(>|#) ',
+#		       'unitedlinux',	'# ',
+#		       );
+
+    # command of the admin mode if any
+    %cmd_admin = (
+		  );
+#    %cmd_admin = (
+#		  'hitachi-gr2k',  'admin',
+#		  'hitachi-gr2k-beta',  'admin',
+#		  'yamaha-ws-one', 'administrator',
+#		  'cisco-ios',     'enable',
+#		  'iij-seil',      '!sh',
+#		  'telebit-tbc2k', "\esystem",
+#		  'ttb3010', 	'config',
+#		  );
+
+    # another command of the admin mode if any
+    %cmd_admin2 = (
+		   );
+#    %cmd_admin2 = (
+#		   'telebit-tbc2k', "\epaxtcl0\r",
+#		   );
+
+    # logout command
+    %cmd_exit = (
+		 );
+#    %cmd_exit = (
+#		 'kame-freebsd',	'exit',
+#		 'freebsd43-i386',	'exit',
+#		 'hitachi-nr60',	'exit',
+#		 'hitachi-nr60-v2',	'exit',
+#		 'hitachi-gr2k',	'exit',
+#		 'hitachi-gr2k-beta',	'exit',
+#		 'nec-libra',		'exit',
+#		 'nec-libra-utcpip',	'exit',
+#		 'nec-mip6',		'exit',
+#		 'nec-ix1k',		'exit',
+#		 'sfc-mip6',		'exit',
+#		 'yamaha-ws-one',	'exit',
+#		 'linux-v6',		'exit',
+#		 'sun-solaris',		'exit',
+#		 'ms-win2k',		'exit',
+#		 'cisco-ios',		'exit',
+#		 'iij-seil',		'exit',
+#		 'telebit-tbc2k',	"\elogout\r",
+#		 'mgcs-sj6',		'exit',
+#		 'netbsd-i386',		'exit',
+#		 'kame-netbsd-i386',	'exit',
+#		 'freebsd-i386',	'exit',
+#		 'openbsd-i386',	'exit',
+#		 'aix',			'exit',
+#		 'hpux',		'exit',
+#		 'usagi-i386',		'exit',
+#		 'usagi24-i386',	'exit',
+#		 'mipl',		'exit',
+#		 'lcna',		'exit',
+#		 'ttb3010',		'logout',
+#		 'unitedlinux',		'exit',
+#		 );
+
+    # confirmation for logout
+    %prompt_exit_confirm = (
+			    );
+#    %prompt_exit_confirm = (
+#			    'ms-win2k',	'ENTER',
+#			    );
+
+    # reply of the confirmation for logout
+    %reply_exit_confirm = (
+			   );
+#    %reply_exit_confirm = (
+#			   'ms-win2k',		"\r",
+#			   );
+
+    # command for initialize
+    %cmd_init = (
+		  );
+#    %cmd_init = (
+#		  'ttb3010', 	'init all',
+#		  );
+
+    # confirmation for Initialize
+    %prompt_init_confirm = (
+			    );
+#    %prompt_init_confirm = (
+#			    'ttb3010',	"y/n",
+#			    );
+
+    # reply of the confirmation for Initialize
+    %reply_init_confirm = (
+			   );
+#    %reply_init_confirm = (
+#			   'ttb3010',	"y",
+#			   );
+
+    # command for shutdown
+    %cmd_shutdown = (
+		  );
+#    %cmd_shutdown = (
+#		  'ttb3010', 	"shutdown",
+#		  );
+
+    # confirmation for Initialize
+    %prompt_shutdown_confirm = (
+			    );
+#    %prompt_shutdown_confirm = (
+#			    # TTB asks [y/n]
+#			    'ttb3010',	"y/n",
+#			    );
+
+    # reply of the confirmation for Initialize
+    %reply_shutdown_confirm = (
+			   );
+#    %reply_shutdown_confirm = (
+#			   'ttb3010',		"y",
+#			   );
+
+
+    # reboot command
+    %cmd_reboot = (
+		   );
+#    %cmd_reboot = (
+#		   'kame-freebsd',	'reboot',
+#		   'freebsd43-i386',	'reboot',
+#		   'hitachi-nr60',	'reboot',
+#		   'hitachi-nr60-v2',	'reboot',
+#		   'hitachi-gr2k',	'boot -nf',
+#		   'hitachi-gr2k-beta',	'boot -nf',
+#		   'nec-libra',		'reboot',
+#		   'nec-libra-utcpip',	'reboot',
+#		   'nec-mip6',		'reboot',
+#		   'nec-ix1k',		'reload y',
+#		   'sfc-mip6',		'reboot',
+#		   'yamaha-ws-one',	'restart',
+#		   'linux-v6',		'reboot',
+#		   'sun-solaris',	'reboot',
+#		   # ms-win2k
+#		   'cisco-ios',		'reload',
+#		   'iij-seil',		'reboot',
+#		   'telebit-tbc2k',	'restart',
+#		   'mgcs-sj6',		'reboot',
+#		   'netbsd-i386',	'reboot',
+#		   'kame-netbsd-i386',	'reboot',
+#		   'freebsd-i386',	'reboot',
+#		   'openbsd-i386',	'reboot',
+#		   'aix',		'reboot',
+#		   'hpux',		'reboot',
+#		   'usagi-i386',	'reboot',
+#		   'usagi24-i386',	'reboot',
+#		   'mipl',		'reboot',
+#		   'lcna',		'reboot',
+#		   'ttb3010',		'reboot',
+#		   'unitedlinux',	'reboot',
+#		   );
+
+    # final confirmation for reboot if any
+    %prompt_reboot_confirm = (
+			      );
+#    %prompt_reboot_confirm = (
+#			      'ms-win2k',	'ENTER',
+#			      # Proceed with reload? [confirm]
+#			      'cisco-ios',	'confirm',
+#			      # Proceed with init? [y/n]
+#			      'ttb3010',	'y/n',
+#			      );
+
+    # reply of the final confirmation for reboot
+    %reply_reboot_confirm = (
+			     );
+#    %reply_reboot_confirm = (
+#			     'ms-win2k',	"\r",
+#			     'cisco-ios',	'y',
+#			     'ttb3010',		'y',
+#			     );
+
+    # pre-final confirmation for reboot if any
+    %prompt_reboot_confirm2 = (
+			      );
+#    %prompt_reboot_confirm2 = (
+#			       # System configuration has been modified.
+#			       # Save? [yes/no]:
+#			      'cisco-ios',	'yes/no',
+#			      );
+
+    # reply of the pre-final confirmation for reboot
+    %reply_reboot_confirm2 = (
+			     );
+#    %reply_reboot_confirm2 = (
+#			     'cisco-ios',	"no\r",
+#			     );
+
+    # final confirmation for shutdown if any
+    %prompt_shutdown_confirm = (
+			      );
+#    %prompt_shutdown_confirm = (
+#			      # Proceed with init? [y/n]
+#			      'ttb3010',	'y/n',
+#			      );
+
+    # reply of the final confirmation for reboot
+    %reply_shutdown_confirm = (
+			     );
+#    %reply_shutdown_confirm = (
+#			     'ttb3010',		'y',
+#			     );
+
+    # command for reading command status
+    %cmd_status = (
+		   );
+#    %cmd_status = (
+#		   'kame-freebsd',	'echo $status',
+#		   'freebsd43-i386',	'echo $status',
+#		   'hitachi-nr60',	'echo $status',
+#		   'hitachi-nr60-v2',	'echo $status',
+#		   'hitachi-gr2k',	'echo $status',
+#		   'hitachi-gr2k-beta',	'echo $status',
+#		   'nec-libra',		'echo $status',
+#		   'nec-libra-utcpip',	'echo $status',
+#		   'nec-mip6',		'echo $status',
+#		   'sfc-mip6',		'echo $status',
+#		   'linux-v6',		'echo $?',
+#		   'sun-solaris',	'echo $?',
+#		   # ms-win2k
+#		   # cisco-ios
+#		   # iij-seil
+#		   # ttb3010
+#		   'mgcs-sj6',		'echo $status',
+#		   'netbsd-i386',	'echo $status',
+#		   'kame-netbsd-i386',	'echo $status',
+#		   'freebsd-i386',	'echo $status',
+#		   'openbsd-i386',	'echo $status',
+#		   'aix',		'echo $?',
+#		   'hpux',		'echo $?',
+#		   'usagi-i386',	'echo $?',
+#		   'usagi24-i386',	'echo $?',
+#		   'mipl',		'echo $?',
+#		   'lcna',		'echo $status',
+#		   'unitedlinux',	'echo $?',
+#		   );
+}
+
+########################################################################
+END
+{
+    rClose();
+
+	foreach my $key (keys(%SIG)) {
+		$SIG{$key} = 'DEFAULT';
+	}
+
+	%SIG = %storedSIG;
+}
+
+########################################################################
+sub _sig_handler
+{
+    exit $exitFatal;
+    # call END for rClose()
+}
+
+########################################################################
+sub _sigchld_handler
+{
+    $! = 0;
+    $? = ($exit_error << 8);
+    print STDERR "``$CU -l $Device'' was killed with SIGCHLD.\n";
+    exit $exitFatal;
+}
+
+########################################################################
+sub rType(;$)
+{
+    my($x)=$Type;
+    $Type=shift(@_) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rDevice(;$)
+{
+    my($x)=$Device;
+    $Device=shift(@_) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rUser(;$)
+{
+    my($x)=$User;
+    $User=shift(@_) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rUserPrompt(;$)
+{
+    my($x)=$prompt_user{$Type};
+    $prompt_user{$Type}=shift(@_) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rPasswordPrompt(;$)
+{
+    my($x)=$prompt_password{$Type};
+    $prompt_password{$Type}=shift(@_) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rCommandPrompt(;$)
+{
+    my($x)=$prompt_command{$Type};
+    $prompt_command{$Type}=shift(@_) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rDebug(;$)
+{
+#   return undef if $Remote == undef;
+    return undef if (!defined $Remote);
+    my($x)=$Remote->debug();
+    $Remote->debug(shift(@_)) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rExpInternal(;$)
+{
+#   return undef if $Remote == undef;
+    return undef if (!defined $Remote);
+
+    my($x)=$Remote->exp_internal();
+    $Remote->exp_internal(shift(@_)) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rLogStdout(;$)
+{
+#   return undef if $Remote == undef;
+    return undef if (!defind $Remote);
+
+    my($x)=$Remote->log_stdout();
+    $Remote->log_stdout(shift(@_)) if @_ != ();
+    $x
+}
+
+########################################################################
+sub rSendSpeed(;$)
+{
+    my($x)=$SendSpeed;
+    $SendSpeed=shift(@_) if @_ != ();
+    $x;
+}
+
+########################################################################
+sub rCmdOutput()
+{
+    my(@x);
+    @x=split(/\n/, $CmdOutput);
+}
+
+########################################################################
+sub rEnableLogout(;$)
+{
+    my($x)=$EnableLogout;
+#   $EnableLogout=shift(@_) if @_ != ();
+    $EnableLogout=shift(@_) if (@_ > 0);
+    $x;
+}
+
+########################################################################
+sub rOpen()
+{
+#   return undef if $Remote != undef;
+    return undef if (defined $Remote);
+
+    autoflush STDOUT 1;
+
+    getopts('t:T:d:u:p:v:i:o:U:P:C:Vs:l:h');
+
+    if($opt_h) {
+	usage();
+	exit 0;
+    }
+
+    $Type=$opt_t if defined($opt_t);	# target type
+    $CU=$opt_T if defined($opt_T);	# cu command path
+    $Device=$opt_d if defined($opt_d);	# serial device name
+    $User=$opt_u if defined($opt_u);	# user name
+    $Password=$opt_p if defined($opt_p);	# password
+
+    $prompt_user{$Type}=$opt_U if defined($opt_U);	# login prompt
+    $prompt_password{$Type}=$opt_P if defined($opt_P);	# password prompt
+    $prompt_command{$Type}=$opt_C if defined($opt_C);	# command prompt
+
+    $debug = 1 if defined($opt_V);		# debug flag
+    $SendSpeed=$opt_s if defined($opt_s);	# send speed
+    $EnableLogout=$opt_l if defined($opt_l);	# enable logout
+
+    my $TermCmd = "$CU -l $Device";
+    $Remote = Expect->spawn("$TermCmd");
+#   if($Remote == undef) {
+    if(!defined $Remote) {
+	print STDERR "$TermCmd exec failed\n";
+	return undef;
+    }
+
+    $Remote->debug($opt_v) if defined($opt_v);	# debug level
+    $Remote->exp_internal($opt_i) if defined($opt_i);	# internal debug level
+    $Remote->log_stdout($opt_o) if defined($opt_o);	# stdout
+
+    my($v, $lval, $rval);
+    while($v = shift(@ARGV)) {
+        ($lval, $rval) = split(/=/, $v, 2);
+        $rval=1 if $rval =~ /^\s*$/;
+        $v='$main::rOpt_'."$lval".'=\''."$rval".'\'';
+        eval($v);       # eval ``$main::rOpt<LVAL>=<RVAL>''
+	print STDERR "eval $v\n" if $debug;
+    }
+
+#   if($Remote->expect(4, "onnect") == undef) {
+    if(!defined $Remote->expect(4, "onnect")) {
+	print STDERR "Unable to sync with cu\n";
+	return undef;
+    }
+    $Remote;
+}
+
+sub usage()
+{
+    print "V6evalRemote.pm system options:\n".
+	  "  -h\n".
+	  "  -t<target_type>\n".
+	  "  -T<cu command path>\n".
+	  "  -d<serial_device_name>\n".
+	  "  -u<user_name>\n".
+	  "  -p<password>\n".
+	  "  -U<login_prompt>\n".
+	  "  -P<password_prompt>\n".
+	  "  -C<command_prompt>\n".
+	  "  -v<debug level>\n".
+	  "  -i<internal debug level>\n".
+	  "  -o<stdout>\n".
+	  "  -V\n".
+	  "  -s<interval>\n".
+	  "  -l<enable_logout>\n";
+}
+
+########################################################################
+#
+#
+#	START
+#	  |
+#	  | <----- A
+#	  |
+#	Retry out? ---> ERROR
+#	  |
+#	  |
+#	wait prompt ---------------------------+----+----> timeout
+#	  |                                    |    |        OR
+#	  | login prompt                       |    |      command prompt &&
+#	  |                                    |    |      logout
+#	put user_name                          |    |       THEN
+#	  |                                    |    |      goto A
+#	  |                                    |    |
+#	wait prompt ----> timeout THEN goto A  |    |
+#	  |                                    |    |
+#	  | password prompt                    |    |
+#	  |                                    |    |
+#	  | <----------------------------------+    |
+#	  |  password prompt && !logout             |
+#	  |                                         |
+#	put password                                |
+#	  |                                         |
+#	  |                                         |
+#	wait prompt ----> timeout THEN goto A       |
+#	  |                                         |
+#	  |  command prompt                         |
+#	  |                                         |
+#	  | <---------------------------------------+
+#	  |  command prompt
+#         |
+#	 END
+#
+
+sub rLogin($)
+{
+    my($timeout)=@_;
+    my($retry)=8;
+    my($i)=0;
+    my($t)=$init_timeout;
+    my($is_admin)=0;
+    my($is_admin2)=0;
+
+    ### $timeout=50;    # special patch for long login timeout (such as netbsd-i386)
+
+#   if($Remote == undef) {
+    if(!defined $Remote) {
+	print STDERR "rOpen() should be called first.\n";
+	return 0;
+    }
+
+    if($debug) {
+	print STDERR "prompt_user: ``$prompt_user{$Type}'', ".
+	    "prompt_password: ``$prompt_password{$Type}'', ".
+		"prompt_command: ``$prompt_command{$Type}''\n";
+    }
+
+    while($i<$retry) {
+	#
+	# wait for login prompt
+	#
+	print STDERR "rLogin: Wait for login prompt ($t sec)\n" if $debug;
+#	next if $Remote->expect($t,
+#				'-re', "$prompt_user{$Type}",
+#				'-re', "$prompt_password{$Type}",
+#				'-re', "$prompt_command{$Type}"
+#				) == undef;
+	next if (!defined $Remote->expect($t,
+				'-re', "$prompt_user{$Type}",
+				'-re', "$prompt_password{$Type}",
+				'-re', "$prompt_command{$Type}"
+					  ));
+	$t=$timeout;
+	my($num)=$Remote->exp_match_number();
+	if($num == 1) {
+	    #
+	    # got login prompt
+	    #
+	    print STDERR "rLogin: Got login prompt\n" if $debug;
+	    sendMessages("$User\r"); # put user name
+	} elsif($num == 2) {
+	    #
+	    # got password prompt
+	    #
+	    print STDERR "rLogin: Got password prompt\n" if $debug;
+	    goto password;
+	} elsif($num == 3) {
+	    #
+	    # got command prompt
+	    #
+	    print STDERR "rLogin: Got command prompt\n" if $debug;
+	    if(!$EnableLogout || $is_admin || $is_admin2) {
+		goto command;
+	    } else {
+		rLogout($timeout);
+		next;
+	    }
+	}
+
+	#
+	# wait for password prompt
+	#
+	if($prompt_password{$Type} eq $dummy_prompt) {
+	    print STDERR "rlogin: password prompt is not defined\n"
+		if $debug;
+	} else {
+	    print STDERR "rLogin: Wait for password prompt ($timeout sec)\n"
+		if $debug;
+#	    next if $Remote->expect($timeout,
+#				    '-re', "$prompt_password{$Type}",
+#				    ) == undef;
+	    next if (!defined $Remote->expect($timeout,
+				    '-re', "$prompt_password{$Type}",
+					      ));
+	}
+      password:
+	if($prompt_password{$Type} ne $dummy_prompt) {
+	    print STDERR "rLogin: Got password prompt\n" if $debug;
+	    sendMessages("$Password\r"); # put password
+	}
+
+	#
+	# wait for command prompt
+	#
+	print STDERR "rLogin: Wait for command prompt ($timeout sec)\n"
+	    if $debug;
+#	next if $Remote->expect($timeout,
+#				'-re', "$prompt_command{$Type}"
+#				) == undef;
+	next if (!defined $Remote->expect($timeout,
+				'-re', "$prompt_command{$Type}"
+					  ));
+      command:
+	print STDERR "rLogin: Got command prompt\n" if $debug;
+
+	#
+	#
+	#
+	if($is_admin == 0 && $cmd_admin{$Type}) {
+	    $is_admin = 1;
+	    print STDERR "rLogin: Need admin command: $cmd_admin{$Type}\n" if $debug;
+	    sendMessages("$cmd_admin{$Type}\r");
+	    redo;
+	}
+
+	#
+	#
+	#
+	if($is_admin2 == 0 && $cmd_admin2{$Type}) {
+	    $is_admin2 = 1;
+	    print STDERR "rLogin: Need admin command2\n" if $debug;
+	    sendMessages("$cmd_admin2{$Type}\r");
+	    redo;
+	}
+
+	last;
+
+    } continue {
+	#
+	# timeout: never got any prompt
+	#
+	print STDERR "rLogin: Never got prompt; try again\n" if $debug;
+	sendMessages("\r");
+	$t=$timeout;
+	$i++;
+    }
+
+    if($i >= $retry) {
+	#
+	# Retry out
+	#
+	print STDERR "rLogin: Retry error (> $retry)\n";
+	print STDERR getOutput();
+	return 0;
+    }
+
+    #
+    # login
+    #
+    return 1;
+}
+
+########################################################################
+#
+#	START
+#	  |
+#	  | <------- A
+#	  |
+#	Retry out ? -----> ERROR
+#	  |
+#	wait for prompt ------------+----------------------+
+#	  |                         |                      |
+#	  | login prompt OR         | command prompt       | timeout
+#	  | passowrd prompt         |                      |
+#	  |                  put exit command              |
+#	 END                        |                      |
+#                                goto A                  goto A
+#
+
+sub rLogout($)
+{
+    my($timeout)=@_;
+    my($retry)=6;
+    my($i)=0;
+    my($t)=$init_timeout;
+
+    if(!defined $Remote) {
+	print STDERR "rOpen() should be called first.\n";
+	return 0;
+    }
+
+    if($debug) {
+	print STDERR "prompt_user: ``$prompt_user{$Type}'', ".
+	    "prompt_password: ``$prompt_password{$Type}'', ".
+		"prompt_command: ``$prompt_command{$Type}''\n";
+    }
+
+    #
+    # if $EnableLogout == 0 then keep login
+    #
+    if($EnableLogout == 0) {
+	print STDERR "rLogout: skip by not specifing ``-l'' $opt_l\n"
+	    if $debug;
+	return 1;
+    }
+
+    my(@ptn)= (
+	       '-re', "$prompt_user{$Type}",
+	       '-re', "$prompt_password{$Type}",
+	       '-re', "$prompt_command{$Type}"
+	       );
+    push(@ptn, '-re', $prompt_exit_confirm{$Type})
+	if $prompt_exit_confirm{$Type};
+
+    while($i<$retry) {
+	#
+	# wait for login prompt
+	#
+	print STDERR "rLogout: Wait for prompt ($t sec)\n" if $debug;
+#	next if $Remote->expect($t, @ptn) == undef;
+	next if (!defined $Remote->expect($t, @ptn));
+	$t=$timeout;
+	my($num)=$Remote->exp_match_number();
+	if($num == 1) {
+	    #
+	    # got login prompt
+	    #
+	    print STDERR "rLogout: Got login prompt\n" if $debug;
+	    last;
+	} elsif($num == 2) {
+	    #
+	    # got password prompt
+	    #
+	    print STDERR "rLogout: Got password prompt\n" if $debug;
+	    last;
+	} elsif($num == 3) {
+	    #
+	    # got command prompt
+	    #
+	    print STDERR "rLogout: Got command prompt\n" if $debug;
+	    sendMessagesSync("$cmd_exit{$Type}\r");
+	    $i++;
+	    redo;
+	} elsif ($num == 4) {
+	    #
+	    # got confirmation message
+	    #
+	    print STDERR "rLogout: Got confirmation prompt\n" if $debug;
+	    sendMessages("$reply_exit_confirm{$Type}");
+	    $i++;
+	    redo;
+	}
+    } continue {
+	#
+	# timeout: never got any prompt
+	#
+	print STDERR "rLogout: Never got prompt; try again\n" if $debug;
+	sendMessages("\r");
+	$t=$timeout;
+	$i++;
+    }
+
+    if($i >= $retry) {
+	#
+	# Retry out
+	#
+	print STDERR "rLogout: Retry error (> $retry)\n";
+	print STDERR getOutput();
+	return 0;
+    }
+
+    #
+    # logout
+    #
+    return 1;
+}
+
+########################################################################
+sub rClose()
+{
+#   return 0 if $Remote == undef;
+    return 0 if (!defined $Remote);
+    $SIG{CHLD}='DEFAULT';
+    
+    print $Remote "$Bye\r";
+    print $Remote "$Bye\r";
+    print $Remote "$Bye\r";
+    $Remote->soft_close();
+    undef $Remote;
+    1;
+}
+
+########################################################################
+sub _rCommand($$$)
+{
+    my($cmd, $timeout, $sync)=@_;
+    my($i);
+
+    if(!$prompt_command{$Type}) {
+	print STDERR "$Type: Not defining the patterns of the prompts\n";
+	return 0;
+    }
+
+#   return 0 if $Remote == undef;
+    return 0 if (!defined $Remote);
+
+    for($i=0, $t=$init_timeout; $i<$retry; $i++) {
+	print STDERR "_rCommand: Try to get command prompt ($t sec.)\n"
+	    if $debug;
+#	last if $Remote->expect($t, '-re', "$prompt_command{$Type}") != undef;
+	last if (defined $Remote->expect($t, '-re', "$prompt_command{$Type}"));
+	#
+	# Try to get any prompt
+	#
+	sendMessages("\r");
+	$t = $timeout;
+    }
+    if($i >= $retry) {
+	#
+	# retry error
+	#
+	print STDERR "_rCommand: never got command prompt\n";
+	print STDERR getOutput();
+	return 0;
+    }
+    print STDERR "_rCommand: Do ``$cmd'' command\n" if $debug;
+    if($sync) {
+	sendMessagesSync("$cmd\r");
+    } else {
+	sendMessages("$cmd\r");
+    }
+    return 3;
+}
+
+########################################################################
+sub rCommandAsync($$)
+{
+    my($cmd, $timeout)=@_;
+    return _rCommand($cmd, $timeout, 0);
+}
+
+########################################################################
+sub rCommand($$)
+{
+    my($cmd, $timeout)=@_;
+    my($i, $s, $t);
+
+    return 0 if _rCommand($cmd, $timeout, 1) == 0;
+
+    for($i=0, $t=$init_timeout; $i<$retry; $i++) {
+	print STDERR "rCommand: Try to get command prompt ($t sec)\n"
+	    if $debug;
+#       last if $Remote->expect($t, '-re', "$prompt_command{$Type}") != undef;
+        last if (defined $Remote->expect($t, '-re', "$prompt_command{$Type}"));
+	sendMessages("\r");
+	$t = $timeout;
+    }
+    if($i >= $retry) {
+	#
+	# retry error
+	#
+	print STDERR "rCommand: never got command exit status\n" if $debug;
+	return 3;
+    }
+    $CmdOutput=$Remote->exp_before();
+    print STDERR "rCommand: CmdOutput=``$CmdOutput''\n" if $debug;
+
+    if($cmd_status{$Type}) {
+	# Invoke for getting exit status
+	sendMessagesSync("$cmd_status{$Type}\r");
+
+	# Get exit status
+#	if($Remote->expect($timeout, '-re', '[0-9]+') != undef) {
+	if(defined $Remote->expect($timeout, '-re', '[0-9]+')) {
+	    $s = $Remote->exp_match();
+	    print STDERR "rCommand: exit status: $s\n" if $debug;
+	    return (($s == 0) ? 1 : 2);
+	}
+    }
+    print STDERR "rCommand: never got command exit status\n" if $debug;
+    return 3;
+}
+
+########################################################################
+sub rRebootAsync($)
+{
+    my($timeout)=@_;
+    my($i);
+
+    if(0) {
+	if(!$prompt_command{$Type}) {
+	    print STDERR "$Type: Not defining the patterns of the prompts\n";
+	    return 0;
+	}
+
+#	return 0 if $Remote == undef;
+	return 0 if (!defined $Remote);
+
+	my($cmd)=$cmd_reboot{$Type};
+
+	for($i=0, $t=$init_timeout; $i<$retry; $i++) {
+	    print STDERR "rRebootAsync: Try to get command prompt ($t sec.)\n"
+		if $debug;
+#	    last if
+#		$Remote->expect($t, '-re', "$prompt_command{$Type}") != undef;
+	    last if (defined $Remote->expect($t,
+					     '-re',
+					     "$prompt_command{$Type}"
+					     ));
+	    #
+	    # Try to get any prompt
+	    #
+	    sendMessages("\r");
+	    $t = $timeout;
+	}
+	if($i >= $retry) {
+	    #
+	    # retry error
+	    #
+	    print STDERR "rRebootAsync: never got command prompt\n";
+	    print STDERR getOutput();
+	    return 0;
+	}
+	print STDERR "rRebootAsync: Do ``$cmd'' command\n" if $debug;
+	sendMessagesSync("$cmd\r");
+    }
+    my($cmd)=$cmd_reboot{$Type};
+    return 0 if rCommandAsync($cmd, $timeout) == 0;
+
+    my(@ptn)=();
+    push(@ptn, '-re', "$prompt_reboot_confirm{$Type}")
+	if $prompt_reboot_confirm{$Type};
+    push(@ptn, '-re', "$prompt_reboot_confirm2{$Type}")
+	if $prompt_reboot_confirm2{$Type};
+
+    if(@ptn > 0) {
+	while(1) {
+# 	    if($Remote->expect($timeout,
+#			       @ptn
+#			       ) == undef) {
+ 	    if(!defined $Remote->expect($timeout,
+			       @ptn
+					)) {
+		print STDERR
+		    "Did not get any confirmation message in reboot\n";
+		return 0;
+	    }
+	    my($num)=$Remote->exp_match_number();
+	    if($num == 1) {
+		print STDERR "rRebootAsync: Got reboot prompt #1\n" if $debug;
+		sendMessages("$reply_reboot_confirm{$Type}");
+		last;
+	    } elsif($num == 2) {
+		print STDERR "rRebootAsync: Got reboot prompt #2\n" if $debug;
+		sendMessages("$reply_reboot_confirm2{$Type}");
+		# try again
+	    } else {
+		print STDERR "rRebootAsync: Internal error\n";
+		return 0;
+	    }
+	}
+    }
+
+    return 1;
+}
+
+########################################################################
+sub rReboot($)
+{
+    my($timeout) = @_;
+    my($i, $t);
+
+    if(!$prompt_user{$Type}) {
+	printf STDERR "$Type: Not defining the pattern of the prompts\n";
+	return 0
+    }
+    if($Type eq 'telebit-tbc2k') {
+	printf STDERR "rReboot: $Type: Does not support\n";
+	return 0
+    }
+
+    #
+    # Do reboot command
+    #
+    rRebootAsync(5) || return 0;
+
+    #
+    # The login again.
+    #
+    for($i=0, $t=$init_timeout; $i<$retry; $i++) {
+	print STDERR "rReboot: Try to get login prompt ($t sec)\n"
+	    if $debug;
+#	return 1 if $Remote->expect($t,
+#				    '-re', "$prompt_user{$Type}",
+#				    ) != undef;
+	return 1 if (defined $Remote->expect($t,
+				    '-re', "$prompt_user{$Type}",
+					     ));
+	sendMessages("\r");
+	$t = $timeout;
+    }
+    print STDERR "rReboot: never got login prompt\n";
+    print STDERR getOutput();
+    return 0;
+}
+
+########################################################################
+sub rPutfile($$$)
+{
+    my($from, $to, $timeout)=@_;
+
+    setTipVar($timeout, 'echocheck') || goto error;
+    print STDERR "rPutfile: Starting copying\n" if $debug;
+
+	unless(get_prompt($timeout)) {
+		goto error;
+	}
+
+	sendMessages("~p");
+	sendMessages("$from $to\r");
+
+	unless(get_prompt($timeout)) {
+		goto error;
+	}
+    #
+    #
+    #
+    sendMessages("\r"); # it's important if prompt pattern is ``^(>|#) ''
+#   if($Remote->expect($timeout, '-re', "$prompt_command{$Type}") == undef) {
+    if(!defined $Remote->expect($timeout, '-re', "$prompt_command{$Type}")) {
+	print STDERR "Never sync with copy\n";
+	goto error;
+    }
+    print STDERR "rPutfile: Copying completed\n" if $debug;
+
+    #
+    #
+    #
+    return(1);
+
+error:
+    return(0);
+}
+
+########################################################################
+sub getOutput()
+{
+    my($s);
+
+    $s = sprintf("Before: ``%s''\nMatch: ``%s''\nAfter: ``%s''\n",
+		 $Remote->exp_before(),
+		 $Remote->exp_match(),
+		 $Remote->exp_after()
+		 );
+}
+
+########################################################################
+sub sendMessages(@)
+{
+    my(@strings)=@_;
+
+    foreach(@strings) {
+	if($SendSpeed == 0){
+	    print $Remote $_;
+	} else {
+	    $Remote-> send_slow($SendSpeed, $_);
+	}
+    }
+}
+
+########################################################################
+sub sendMessagesSync(@)
+{
+    my(@strings)=@_;
+    my($timeout)=5;
+
+    foreach(@strings) {
+	if($SendSpeed == 0){
+	    print $Remote $_;
+	} else {
+	    $Remote-> send_slow($SendSpeed, $_);
+	}
+
+	# Sync with command echo back
+	# It is important if a target is WIN2K
+#	if($Remote->expect($timeout, "$_") == undef) {
+	if(!defined $Remote->expect($timeout, "$_")) {
+	    print STDERR "sendMessagesSync: never got $_\n";
+	} else {
+	    print STDERR "sendMessagesSync: got echo back of $_\n"
+		if $debug;
+	}
+    }
+}
+
+########################################################################
+sub setTipVar($@)
+{
+    my($timeout, @var)=@_;
+
+    foreach(@var) {
+	my($v)=$_;
+
+	unless(get_prompt($timeout)) {
+		return(0);
+	}
+
+	sendMessages("~s");
+	sendMessages("$v\r");
+
+	unless(get_prompt($timeout)) {
+		return(0);
+	}
+    }
+    return 1;
+}
+
+########################################################################
+sub rInit($)
+{
+    my($timeout)=@_;
+    my($i);
+
+    my($cmd)=$cmd_init{$Type};
+    return 0 if rCommandAsync($cmd, $timeout) == 0;
+
+    my(@ptn)=();
+    push(@ptn, '-re', "$prompt_init_confirm{$Type}")
+	if $prompt_init_confirm{$Type};
+    push(@ptn, '-re', "$prompt_command{$Type}")
+	if $prompt_command{$Type};
+
+    if(@ptn > 0) {
+	while(1) {
+# 	    if($Remote->expect($timeout,
+#			       @ptn
+#			       ) == undef) {
+ 	    if(!defined $Remote->expect($timeout,
+			       @ptn
+					)) {
+		print STDERR
+		    "Did not get any confirmation message in initialize\n";
+		return 0;
+	    }
+	    my($num)=$Remote->exp_match_number();
+	    if($num == 1) {
+		print STDERR "rInit: Got confirm prompt #1\n" if $debug;
+		sendMessages("$reply_init_confirm{$Type}\r");
+	    } elsif($num == 2) {
+		print STDERR "rInit: Got Command prompt #2\n" if $debug;
+		sendMessages("$cmd_exit{$Type}\r");
+		last;
+	    } else {
+		print STDERR "rInit: Internal error\n";
+		return 0;
+	    }
+	}
+    }
+
+    return 1;
+}
+
+########################################################################
+sub rShutdown($)
+{
+    my($timeout)=@_;
+    my($i);
+
+    my($cmd)=$cmd_shutdown{$Type};
+    return 0 if rCommandAsync($cmd, $timeout) == 0;
+
+    my(@ptn)=();
+    push(@ptn, '-re', "$prompt_shutdown_confirm{$Type}")
+	if $prompt_shutdown_confirm{$Type};
+
+    if(@ptn > 0) {
+	while(1) {
+# 	    if($Remote->expect($timeout,
+#			       @ptn
+#			       ) == undef) {
+ 	    if(!defined $Remote->expect($timeout,
+			       @ptn
+					)) {
+		print STDERR
+		    "Did not get any confirmation message in shutdown\n";
+		return 0;
+	    }
+	    my($num)=$Remote->exp_match_number();
+	    if($num == 1) {
+		print STDERR "rShutdown: Got confirm prompt #1\n" if $debug;
+		sendMessages("$reply_shutdown_confirm{$Type}\n");
+		last;
+	    } else {
+		print STDERR "rShutdown: Internal error\n";
+		return 0;
+	    }
+	}
+    }
+
+    return 1;
+}
+
+########################################################################
+sub get_prompt($)
+{
+	my ($timeout) = @_;
+
+	my $count = 0;
+
+	for(my $d = 0; $d < $timeout; $d ++) {
+		if(defined($Remote->expect(1,
+			'-re', "$prompt_command{$Type}"))) {
+
+			$count ++;
+			last;
+		}
+
+		sendMessages("\r");
+	}
+
+	return($count);
+}
+
+########################################################################
+#rArg()		for pass argments to *.rmt
+#		return:	always 1
+#######################################
+sub rArg() 
+{
+    autoflush STDOUT 1;
+
+    my($v, $lval, $rval);
+    while($v = shift(@ARGV)) {
+        ($lval, $rval) = split(/=/, $v, 2);
+        $rval=1 if $rval =~ /^\s*$/;
+        $v='$main::rOpt_'."$lval".'=\''."$rval".'\'';
+        eval($v);       # eval ``$main::rOpt<LVAL>=<RVAL>''
+	print STDERR "eval $v\n" if $debug;
+    }
+    return 1;
+}
+
+########################################################################
+1;
+
+########################################################################
+__END__
+
+=head1 NAME
+
+V6evalRemote - Perl interface to control NUT via serial line.
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=head1 INTERFACE OF REMOTE CONTROL SCRIPT
+
+                              <Default>      <Descriptions>
+                              -----------    -----------------------
+  -t<target_type>             kame-freebsd   kame-freebsd
+                                             hitachi-nr60
+                                             nec-libra
+                                             nec-libra-utcpip
+                                             yamaha-ws-one
+  -T<cu_command_path>         cu             cu command path
+  -d<serial_device_name>      cuaa0c         see cu(1)
+  -u<user_name>               root           user name
+  -p<password>                v6eval         user password
+  -U<login_prompt>            'ogin: '       Regular-expression
+  -P<password_prompt>         'assword:'     Reqular-expression
+  -C<command_prompt>          '(#|\$|%|>) '  Reqular-expression
+  -v<debug level>             0              $Expect::Debug
+  -i<internal debug level>    0              $Expect::Exp_Internal
+  -o<stdout>                  0              $Expect::Log_Stdout
+  -V			      N/A	     enable other debug messages
+  -s<interval>                0              send speed (sec.)
+  -l{0,1}                     0              enable rLogout()
+  -h                          N/A            show this message
+
+=head1 SUPPORTED FUNCTION
+
+=head1 rOpen
+
+  Open the remote control program.
+
+  sub rOpen()
+
+=head2 RETURN VALUES
+
+  undef: error
+  Otherwise: Expect handle
+
+=head1 rLogin
+
+  Log into the target machine.
+
+  sub rLogin($) { my (
+      $timeout		# timeout sec.
+  )=@_;
+
+=head2 RETURN VALUES
+
+  ==0: error
+  !=0: success
+
+=head1 rCommand
+
+  Execute a command.
+
+  sub rCommand($$) { my (
+      $command	# command
+      $timeout	# timeout sec.
+  )=@_;
+
+=head2 RETURN VALUES
+
+  ==0: error
+  ==1: success: command exit status is 0
+  ==2: warning: command exit status isn't 0
+  ==3: warning: command exit status unknown
+
+=head1 rReboot
+
+  Reboot the target machine.
+  The functin return when getting login prompt.
+
+  sub rReboot($) { my (
+      $timeout		# timeout sec.
+  )=@_;
+
+=head2 RETURN VALUES
+
+  ==0: error
+  !=0: success
+
+=head1 rRebootAsync
+
+  Reboot the target machine.
+  The function return immediately when executing reboot command.
+
+  sub rRebootAsync($) { my (
+      $timeout		# timeout sec.
+  )=@_;
+
+=head2 RETURN VALUES
+
+  ==0: error
+  !=0: success
+
+=head1 rPutfile
+
+  Copy a local file to a remote file.
+
+  sub rPutfile($$$) { my (
+      $from,
+      $to,
+      $timeout,
+  )=@_;
+
+=head2 RETURN VALUES
+
+  ==0: error
+  !=0: success
+
+=head1 rLogout
+
+  Log out of the target machine.
+
+  sub rLogout($) { my (
+      $timeout		# timeout sec.
+  )=@_;
+
+=head2 RETURN VALUES
+
+  ==0: error
+  !=0: success
+
+=head1 rClose
+
+  Terminate the remote control program.
+
+  sub rClose($) { my (
+      $timeout		# timeout sec.
+  )=@_;
+
+=head2 RETURN VALUES
+
+  ==0: error
+  !=0: success
+
+=head1 rType
+
+  Set/get a target machine type.
+
+  sub rType(;$)
+
+=head2 RETURN VALUES
+
+  Returns a target machine type.
+
+=head1 rDevice
+
+  Set/get serial device name.
+
+  sub rDevice(;$)
+
+=head2 RETURN VALUES
+
+  Returns serial device name.
+
+=head1 rUser
+
+  Set/get user name.
+
+  sub rUser(;$)
+
+=head2 RETURN VALUES
+
+  Returns user name.
+
+=head1 rUserPrompt
+
+  Set/get user prompt.
+
+  sub rUserPrompt(;$)
+
+=head2 RETURN VALUES
+
+  Returns user prompt.
+
+=head1 rPasswordPrompt
+
+  Set/get password prompt.
+
+  sub rPasswordPrompt(;$)
+
+=head2 RETURN VALUES
+
+  Returns password prompt.
+
+=head1 rCommandPrompt
+
+  Set/get command prompt.
+
+  sub rCommandPrompt(;$)
+
+=head2 RETURN VALUES
+
+  Returns command prompt.
+
+=head1 rDebug
+
+  Set/get Expect.pm's debug()
+
+  sub rDebug(;$)
+
+=head2 RETURN VALUES
+
+  Returns $Remote->debug().
+
+=head1 rExpInternal
+
+  Set/get Expect.pm's exp_internal()
+
+  sub rExpInternal(;$)
+
+=head2 RETURN VALUES
+
+  Returns $Remote->exp_internal()
+
+=head1 rLogStdout
+
+  Set/get Expect.pm's log_stdout()
+
+  sub rLogStdout(;$)
+
+=head2 RETURN VALUES
+
+  Returns $Remote->log_stdout()
+
+=head1 rRemoteSpeed
+
+  Set/get interval that characters are sent at.
+
+  sub rRemoteSpeed(;$)
+
+=head2 RETURN VALUES
+
+  Returns interval value.
+
+=head1 rEnableLogout
+
+  Enable(!=0)/Desable(==0, default) rLogout()
+
+  sub rEnableLogout(;$)
+
+=head2 RETURN VALUES
+
+  Returns previous value
+
+=head1 EXAMPLE
+
+  #!/usr/bin/perl
+
+  use V6evalRemote;
+
+  print "Open remote\n";
+  rOpen() || exit $V6evalRemote::exitFail;
+  $type=rType();
+
+  $rOpt_timeout=5 if (!defined $rOpt_timeout);
+
+  if($type eq "kame-freebsd") {
+      print "Login\n";
+      rLogin($rOpt_timeout) || exit $V6evalRemote::exitFail;
+      print "List dir\n";
+      rCommand("ls -a", $rOpt_timeout) || exit $V6evalRemote::exitFail;
+      print "Logout\n";
+      rLogout($rOpt_timeout) || exit $V6evalRemote::exitFail;
+  } else {
+    print "List dir of NUT($type) manually, ".
+        "then press enter key.\n";
+    <STDIN>;
+  }
+  print "Close remote\n";
+  rClose();
+  exit $V6evalRemote::exitPass;
+
+=head1 REQUIRED PACKAGES
+
+  Expect.pm
+  Stty.pm
+  Pty.pm
+
+=cut
diff -urN tahi-linux-3.0.12/script/pmod/V6evalRemote/blib/man3/V6evalRemote.3pm tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/blib/man3/V6evalRemote.3pm
--- tahi-linux-3.0.12/script/pmod/V6evalRemote/blib/man3/V6evalRemote.3pm	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/blib/man3/V6evalRemote.3pm	2007-12-10 20:48:42.000000000 +0100
@@ -0,0 +1,504 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  | will give a
+.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.\"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "V6evalRemote 3"
+.TH V6evalRemote 3 "2007-12-09" "perl v5.8.8" "User Contributed Perl Documentation"
+.SH "NAME"
+V6evalRemote \- Perl interface to control NUT via serial line.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+.SH "INTERFACE OF REMOTE CONTROL SCRIPT"
+.IX Header "INTERFACE OF REMOTE CONTROL SCRIPT"
+.Vb 21
+\&                              <Default>      <Descriptions>
+\&                              -----------    -----------------------
+\&  -t<target_type>             kame-freebsd   kame-freebsd
+\&                                             hitachi-nr60
+\&                                             nec-libra
+\&                                             nec-libra-utcpip
+\&                                             yamaha-ws-one
+\&  -T<cu_command_path>         cu             cu command path
+\&  -d<serial_device_name>      cuaa0c         see cu(1)
+\&  -u<user_name>               root           user name
+\&  -p<password>                v6eval         user password
+\&  -U<login_prompt>            'ogin: '       Regular-expression
+\&  -P<password_prompt>         'assword:'     Reqular-expression
+\&  -C<command_prompt>          '(#|\e$|%|>) '  Reqular-expression
+\&  -v<debug level>             0              $Expect::Debug
+\&  -i<internal debug level>    0              $Expect::Exp_Internal
+\&  -o<stdout>                  0              $Expect::Log_Stdout
+\&  -V                          N/A            enable other debug messages
+\&  -s<interval>                0              send speed (sec.)
+\&  -l{0,1}                     0              enable rLogout()
+\&  -h                          N/A            show this message
+.Ve
+.SH "SUPPORTED FUNCTION"
+.IX Header "SUPPORTED FUNCTION"
+.SH "rOpen"
+.IX Header "rOpen"
+.Vb 1
+\&  Open the remote control program.
+.Ve
+.PP
+.Vb 1
+\&  sub rOpen()
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 2
+\&  undef: error
+\&  Otherwise: Expect handle
+.Ve
+.SH "rLogin"
+.IX Header "rLogin"
+.Vb 1
+\&  Log into the target machine.
+.Ve
+.PP
+.Vb 3
+\&  sub rLogin($) { my (
+\&      $timeout          # timeout sec.
+\&  )=@_;
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 2
+\&  ==0: error
+\&  !=0: success
+.Ve
+.SH "rCommand"
+.IX Header "rCommand"
+.Vb 1
+\&  Execute a command.
+.Ve
+.PP
+.Vb 4
+\&  sub rCommand($$) { my (
+\&      $command  # command
+\&      $timeout  # timeout sec.
+\&  )=@_;
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 4
+\&  ==0: error
+\&  ==1: success: command exit status is 0
+\&  ==2: warning: command exit status isn't 0
+\&  ==3: warning: command exit status unknown
+.Ve
+.SH "rReboot"
+.IX Header "rReboot"
+.Vb 2
+\&  Reboot the target machine.
+\&  The functin return when getting login prompt.
+.Ve
+.PP
+.Vb 3
+\&  sub rReboot($) { my (
+\&      $timeout          # timeout sec.
+\&  )=@_;
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 2
+\&  ==0: error
+\&  !=0: success
+.Ve
+.SH "rRebootAsync"
+.IX Header "rRebootAsync"
+.Vb 2
+\&  Reboot the target machine.
+\&  The function return immediately when executing reboot command.
+.Ve
+.PP
+.Vb 3
+\&  sub rRebootAsync($) { my (
+\&      $timeout          # timeout sec.
+\&  )=@_;
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 2
+\&  ==0: error
+\&  !=0: success
+.Ve
+.SH "rPutfile"
+.IX Header "rPutfile"
+.Vb 1
+\&  Copy a local file to a remote file.
+.Ve
+.PP
+.Vb 5
+\&  sub rPutfile($$$) { my (
+\&      $from,
+\&      $to,
+\&      $timeout,
+\&  )=@_;
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 2
+\&  ==0: error
+\&  !=0: success
+.Ve
+.SH "rLogout"
+.IX Header "rLogout"
+.Vb 1
+\&  Log out of the target machine.
+.Ve
+.PP
+.Vb 3
+\&  sub rLogout($) { my (
+\&      $timeout          # timeout sec.
+\&  )=@_;
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 2
+\&  ==0: error
+\&  !=0: success
+.Ve
+.SH "rClose"
+.IX Header "rClose"
+.Vb 1
+\&  Terminate the remote control program.
+.Ve
+.PP
+.Vb 3
+\&  sub rClose($) { my (
+\&      $timeout          # timeout sec.
+\&  )=@_;
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 2
+\&  ==0: error
+\&  !=0: success
+.Ve
+.SH "rType"
+.IX Header "rType"
+.Vb 1
+\&  Set/get a target machine type.
+.Ve
+.PP
+.Vb 1
+\&  sub rType(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns a target machine type.
+.Ve
+.SH "rDevice"
+.IX Header "rDevice"
+.Vb 1
+\&  Set/get serial device name.
+.Ve
+.PP
+.Vb 1
+\&  sub rDevice(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns serial device name.
+.Ve
+.SH "rUser"
+.IX Header "rUser"
+.Vb 1
+\&  Set/get user name.
+.Ve
+.PP
+.Vb 1
+\&  sub rUser(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns user name.
+.Ve
+.SH "rUserPrompt"
+.IX Header "rUserPrompt"
+.Vb 1
+\&  Set/get user prompt.
+.Ve
+.PP
+.Vb 1
+\&  sub rUserPrompt(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns user prompt.
+.Ve
+.SH "rPasswordPrompt"
+.IX Header "rPasswordPrompt"
+.Vb 1
+\&  Set/get password prompt.
+.Ve
+.PP
+.Vb 1
+\&  sub rPasswordPrompt(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns password prompt.
+.Ve
+.SH "rCommandPrompt"
+.IX Header "rCommandPrompt"
+.Vb 1
+\&  Set/get command prompt.
+.Ve
+.PP
+.Vb 1
+\&  sub rCommandPrompt(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns command prompt.
+.Ve
+.SH "rDebug"
+.IX Header "rDebug"
+.Vb 1
+\&  Set/get Expect.pm's debug()
+.Ve
+.PP
+.Vb 1
+\&  sub rDebug(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns $Remote->debug().
+.Ve
+.SH "rExpInternal"
+.IX Header "rExpInternal"
+.Vb 1
+\&  Set/get Expect.pm's exp_internal()
+.Ve
+.PP
+.Vb 1
+\&  sub rExpInternal(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns $Remote->exp_internal()
+.Ve
+.SH "rLogStdout"
+.IX Header "rLogStdout"
+.Vb 1
+\&  Set/get Expect.pm's log_stdout()
+.Ve
+.PP
+.Vb 1
+\&  sub rLogStdout(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns $Remote->log_stdout()
+.Ve
+.SH "rRemoteSpeed"
+.IX Header "rRemoteSpeed"
+.Vb 1
+\&  Set/get interval that characters are sent at.
+.Ve
+.PP
+.Vb 1
+\&  sub rRemoteSpeed(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns interval value.
+.Ve
+.SH "rEnableLogout"
+.IX Header "rEnableLogout"
+.Vb 1
+\&  Enable(!=0)/Desable(==0, default) rLogout()
+.Ve
+.PP
+.Vb 1
+\&  sub rEnableLogout(;$)
+.Ve
+.Sh "\s-1RETURN\s0 \s-1VALUES\s0"
+.IX Subsection "RETURN VALUES"
+.Vb 1
+\&  Returns previous value
+.Ve
+.SH "EXAMPLE"
+.IX Header "EXAMPLE"
+.Vb 1
+\&  #!/usr/bin/perl
+.Ve
+.PP
+.Vb 1
+\&  use V6evalRemote;
+.Ve
+.PP
+.Vb 3
+\&  print "Open remote\en";
+\&  rOpen() || exit $V6evalRemote::exitFail;
+\&  $type=rType();
+.Ve
+.PP
+.Vb 1
+\&  $rOpt_timeout=5 if (!defined $rOpt_timeout);
+.Ve
+.PP
+.Vb 15
+\&  if($type eq "kame-freebsd") {
+\&      print "Login\en";
+\&      rLogin($rOpt_timeout) || exit $V6evalRemote::exitFail;
+\&      print "List dir\en";
+\&      rCommand("ls -a", $rOpt_timeout) || exit $V6evalRemote::exitFail;
+\&      print "Logout\en";
+\&      rLogout($rOpt_timeout) || exit $V6evalRemote::exitFail;
+\&  } else {
+\&    print "List dir of NUT($type) manually, ".
+\&        "then press enter key.\en";
+\&    <STDIN>;
+\&  }
+\&  print "Close remote\en";
+\&  rClose();
+\&  exit $V6evalRemote::exitPass;
+.Ve
+.SH "REQUIRED PACKAGES"
+.IX Header "REQUIRED PACKAGES"
+.Vb 3
+\&  Expect.pm
+\&  Stty.pm
+\&  Pty.pm
+.Ve
diff -urN tahi-linux-3.0.12/script/pmod/V6evalRemote/Makefile.tmp tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/Makefile.tmp
--- tahi-linux-3.0.12/script/pmod/V6evalRemote/Makefile.tmp	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/Makefile.tmp	2007-12-10 20:48:58.000000000 +0100
@@ -0,0 +1,789 @@
+# This Makefile is for the V6evalRemote extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 6.30 (Revision: Revision: 4535 ) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+#       ANY CHANGES MADE HERE WILL BE LOST!
+#
+#   MakeMaker ARGV: ()
+#
+#   MakeMaker Parameters:
+
+#     MAKEFILE => q[Makefile.tmp]
+#     NAME => q[V6evalRemote]
+#     VERSION => q[1.00]
+#     dist => { COMPRESS=>q[gzip], SUFFIX=>q[gz] }
+#     linkext => { LINKTYPE=>q[] }
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib/perl5/5.8.8/i586-linux-thread-multi/Config.pm)
+
+# They may have been overridden via Makefile.PL or on the command line
+AR = ar
+CC = cc
+CCCDLFLAGS = -fPIC
+CCDLFLAGS = -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.8/i586-linux-thread-multi/CORE
+DLEXT = so
+DLSRC = dl_dlopen.xs
+LD = cc
+LDDLFLAGS = -shared
+LDFLAGS = 
+LIBC = /lib/libc-2.6.1.so
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 2.6.22
+RANLIB = :
+SITELIBEXP = /usr/lib/perl5/site_perl/5.8.8
+SITEARCHEXP = /usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
+SO = so
+EXE_EXT = 
+FULL_AR = /usr/bin/ar
+VENDORARCHEXP = /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
+VENDORLIBEXP = /usr/lib/perl5/vendor_perl/5.8.8
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+DFSEP = $(DIRFILESEP)
+NAME = V6evalRemote
+NAME_SYM = V6evalRemote
+VERSION = 1.00
+VERSION_MACRO = VERSION
+VERSION_SYM = 1_00
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 1.00
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1
+MAN3EXT = 3pm
+INSTALLDIRS = site
+DESTDIR = 
+PREFIX = $(SITEPREFIX)
+PERLPREFIX = /usr
+SITEPREFIX = /usr
+VENDORPREFIX = /usr
+INSTALLPRIVLIB = /usr/lib/perl5/5.8.8
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /usr/lib/perl5/site_perl/5.8.8
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = /usr/lib/perl5/vendor_perl/5.8.8
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = /usr/lib/perl5/5.8.8/i586-linux-thread-multi
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = /usr/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = /usr/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = /usr/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = /usr/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLMAN1DIR = /usr/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = /usr/share/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = /usr/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = /usr/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = /usr/share/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = /usr/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/lib/perl5/5.8.8
+PERL_ARCHLIB = /usr/lib/perl5/5.8.8/i586-linux-thread-multi
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile.tmp
+MAKEFILE_OLD = Makefile.tmp.old
+MAKE_APERL_FILE = Makefile.tmp.aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib/perl5/5.8.8/i586-linux-thread-multi/CORE
+PERL = /usr/bin/perl
+FULLPERL = /usr/bin/perl
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER   = /usr/lib/perl5/5.8.8/ExtUtils/MakeMaker.pm
+MM_VERSION  = 6.30
+MM_REVISION = Revision: 4535 
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE  = Basename part of dynamic library. May be just equal BASEEXT.
+FULLEXT = V6evalRemote
+BASEEXT = V6evalRemote
+PARENT_NAME = 
+DLBASE = $(BASEEXT)
+VERSION_FROM = 
+OBJECT = 
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+BOOTDEP = 
+
+# Handy lists of source code files:
+XS_FILES = 
+C_FILES  = 
+O_FILES  = 
+H_FILES  = 
+MAN1PODS = 
+MAN3PODS = V6evalRemote.pm
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h
+
+# Where to build things
+INST_LIBDIR      = $(INST_LIB)
+INST_ARCHLIBDIR  = $(INST_ARCHLIB)
+
+INST_AUTODIR     = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC      = 
+INST_DYNAMIC     = 
+INST_BOOT        = 
+
+# Extra linker info
+EXPORT_LIST        = 
+PERL_ARCHIVE       = 
+PERL_ARCHIVE_AFTER = 
+
+
+TO_INST_PM = V6evalRemote.pm
+
+PM_TO_BLIB = V6evalRemote.pm \
+	$(INST_LIB)/V6evalRemote.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 1.50
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(ABSPERLRUN)  -e 'use AutoSplit;  autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)'
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(SHELL) -c true
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(ABSPERLRUN) "-MExtUtils::Command" -e mkpath
+EQUALIZE_TIMESTAMP = $(ABSPERLRUN) "-MExtUtils::Command" -e eqtime
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');'
+DOC_INSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install
+UNINSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall
+WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist
+MACROSTART = 
+MACROEND = 
+USEMAKEFILE = -f
+FIXIN = $(PERLRUN) "-MExtUtils::MY" -e "MY->fixin(shift)"
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt: all
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip
+SUFFIX = gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = V6evalRemote
+DISTVNAME = V6evalRemote-1.00
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+
+# --- MakeMaker const_loadlibs section:
+
+
+# --- MakeMaker const_cccmd section:
+
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIBPERL_A="$(LIBPERL_A)"\
+	LINKTYPE="$(LINKTYPE)"\
+	PREFIX="$(PREFIX)"
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir
+
+
+
+# --- MakeMaker c_o section:
+
+
+# --- MakeMaker xs_c section:
+
+
+# --- MakeMaker xs_o section:
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+	$(NOECHO) $(NOOP)
+
+
+pure_all :: config pm_to_blib subdirs linkext
+	$(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+	$(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) blibdirs
+	$(NOECHO) $(NOOP)
+
+help :
+	perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker blibdirs section:
+blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists
+	$(NOECHO) $(NOOP)
+
+# Backwards compat with 6.18 through 6.25
+blibdirs.ts : blibdirs
+	$(NOECHO) $(NOOP)
+
+$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_LIBDIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_LIBDIR)
+	$(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
+
+$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_ARCHLIB)
+	$(NOECHO) $(CHMOD) 755 $(INST_ARCHLIB)
+	$(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
+
+$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_AUTODIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_AUTODIR)
+	$(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
+
+$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_ARCHAUTODIR)
+	$(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
+
+$(INST_BIN)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_BIN)
+	$(NOECHO) $(CHMOD) 755 $(INST_BIN)
+	$(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
+
+$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_SCRIPT)
+	$(NOECHO) $(CHMOD) 755 $(INST_SCRIPT)
+	$(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
+
+$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_MAN1DIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_MAN1DIR)
+	$(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
+
+$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_MAN3DIR)
+	$(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
+
+
+
+# --- MakeMaker linkext section:
+
+linkext :: 
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT)
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_bs section:
+
+BOOTSTRAP =
+
+
+# --- MakeMaker dynamic_lib section:
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+
+
+# --- MakeMaker manifypods section:
+
+POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
+POD2MAN = $(POD2MAN_EXE)
+
+
+manifypods : pure_all  \
+	V6evalRemote.pm \
+	V6evalRemote.pm
+	$(NOECHO) $(POD2MAN) --section=3 --perm_rw=$(PERM_RW) \
+	  V6evalRemote.pm $(INST_MAN3DIR)/V6evalRemote.$(MAN3EXT) 
+
+
+
+
+# --- MakeMaker processPL section:
+
+
+# --- MakeMaker installbin section:
+
+
+# --- MakeMaker subdirs section:
+
+# none
+
+# --- MakeMaker clean_subdirs section:
+clean_subdirs :
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker clean section:
+
+# Delete temporary files but do not touch installed files. We don't delete
+# the Makefile here so a later make realclean still has a makefile to use.
+
+clean :: clean_subdirs
+	- $(RM_F) \
+	  *$(LIB_EXT) core \
+	  core.[0-9] $(INST_ARCHAUTODIR)/extralibs.all \
+	  core.[0-9][0-9] $(BASEEXT).bso \
+	  pm_to_blib.ts core.[0-9][0-9][0-9][0-9] \
+	  $(BASEEXT).x $(BOOTSTRAP) \
+	  perl$(EXE_EXT) tmon.out \
+	  *$(OBJ_EXT) pm_to_blib \
+	  $(INST_ARCHAUTODIR)/extralibs.ld blibdirs.ts \
+	  core.[0-9][0-9][0-9][0-9][0-9] *perl.core \
+	  core.*perl.*.? $(MAKE_APERL_FILE) \
+	  perl $(BASEEXT).def \
+	  core.[0-9][0-9][0-9] mon.out \
+	  lib$(BASEEXT).def perlmain.c \
+	  perl.exe so_locations \
+	  $(BASEEXT).exp 
+	- $(RM_RF) \
+	  blib 
+	- $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
+
+
+# --- MakeMaker realclean_subdirs section:
+realclean_subdirs :
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker realclean section:
+# Delete temporary files (via clean) and also delete dist files
+realclean purge ::  clean realclean_subdirs
+	- $(RM_F) \
+	  $(MAKEFILE_OLD) $(FIRST_MAKEFILE) 
+	- $(RM_RF) \
+	  $(DISTVNAME) 
+
+
+# --- MakeMaker metafile section:
+metafile : create_distdir
+	$(NOECHO) $(ECHO) Generating META.yml
+	$(NOECHO) $(ECHO) '# http://module-build.sourceforge.net/META-spec.html' > META_new.yml
+	$(NOECHO) $(ECHO) '#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#' >> META_new.yml
+	$(NOECHO) $(ECHO) 'name:         V6evalRemote' >> META_new.yml
+	$(NOECHO) $(ECHO) 'version:      1.00' >> META_new.yml
+	$(NOECHO) $(ECHO) 'version_from: ' >> META_new.yml
+	$(NOECHO) $(ECHO) 'installdirs:  site' >> META_new.yml
+	$(NOECHO) $(ECHO) 'requires:' >> META_new.yml
+	$(NOECHO) $(ECHO) '' >> META_new.yml
+	$(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml
+	$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.30' >> META_new.yml
+	-$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
+
+
+# --- MakeMaker signature section:
+signature :
+	cpansign -s
+
+
+# --- MakeMaker dist_basics section:
+distclean :: realclean distcheck
+	$(NOECHO) $(NOOP)
+
+distcheck :
+	$(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
+
+skipcheck :
+	$(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
+
+manifest :
+	$(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
+
+veryclean : realclean
+	$(RM_F) *~ *.orig */*~ */*.orig
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+	$(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
+	  -e '    if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';'
+
+tardist : $(DISTVNAME).tar$(SUFFIX)
+	$(NOECHO) $(NOOP)
+
+uutardist : $(DISTVNAME).tar$(SUFFIX)
+	uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
+
+$(DISTVNAME).tar$(SUFFIX) : distdir
+	$(PREOP)
+	$(TO_UNIX)
+	$(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+	$(RM_RF) $(DISTVNAME)
+	$(COMPRESS) $(DISTVNAME).tar
+	$(POSTOP)
+
+zipdist : $(DISTVNAME).zip
+	$(NOECHO) $(NOOP)
+
+$(DISTVNAME).zip : distdir
+	$(PREOP)
+	$(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+	$(RM_RF) $(DISTVNAME)
+	$(POSTOP)
+
+shdist : distdir
+	$(PREOP)
+	$(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+	$(RM_RF) $(DISTVNAME)
+	$(POSTOP)
+
+
+# --- MakeMaker distdir section:
+create_distdir :
+	$(RM_RF) $(DISTVNAME)
+	$(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+		-e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+distdir : create_distdir distmeta 
+	$(NOECHO) $(NOOP)
+
+
+
+# --- MakeMaker dist_test section:
+disttest : distdir
+	cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL 
+	cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+	cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
+
+
+
+# --- MakeMaker dist_ci section:
+
+ci :
+	$(PERLRUN) "-MExtUtils::Manifest=maniread" \
+	  -e "@all = keys %{ maniread() };" \
+	  -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \
+	  -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
+
+
+# --- MakeMaker distmeta section:
+distmeta : create_distdir metafile
+	$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
+	  -e '    or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"'
+
+
+
+# --- MakeMaker distsignature section:
+distsignature : create_distdir
+	$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
+	  -e '    or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"'
+	$(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
+	cd $(DISTVNAME) && cpansign -s
+
+
+
+# --- MakeMaker install section:
+
+install :: all pure_install doc_install
+	$(NOECHO) $(NOOP)
+
+install_perl :: all pure_perl_install doc_perl_install
+	$(NOECHO) $(NOOP)
+
+install_site :: all pure_site_install doc_site_install
+	$(NOECHO) $(NOOP)
+
+install_vendor :: all pure_vendor_install doc_vendor_install
+	$(NOECHO) $(NOOP)
+
+pure_install :: pure_$(INSTALLDIRS)_install
+	$(NOECHO) $(NOOP)
+
+doc_install :: doc_$(INSTALLDIRS)_install
+	$(NOECHO) $(NOOP)
+
+pure__install : pure_site_install
+	$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+doc__install : doc_site_install
+	$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+pure_perl_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLPRIVLIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+		$(INST_BIN) $(DESTINSTALLBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
+	$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+		$(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+pure_site_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLSITELIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+		$(INST_BIN) $(DESTINSTALLSITEBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
+	$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+		$(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+pure_vendor_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLVENDORARCH)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLVENDORLIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+		$(INST_BIN) $(DESTINSTALLVENDORBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+doc_perl_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLPRIVLIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_site_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLSITELIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_vendor_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLVENDORLIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+	$(NOECHO) $(NOOP)
+
+uninstall_from_perldirs ::
+	$(NOECHO) $(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_sitedirs ::
+	$(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_vendordirs ::
+	$(NOECHO) $(UNINSTALL) $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+# --- MakeMaker force section:
+# Phony target to force checking subdirectories.
+FORCE:
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker perldepend section:
+
+
+# --- MakeMaker makefile section:
+# We take a very conservative approach here, but it's worth it.
+# We move Makefile to Makefile.old here to avoid gnu make looping.
+$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
+	$(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
+	$(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
+	-$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+	-$(NOECHO) $(MV)   $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
+	- $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
+	$(PERLRUN) Makefile.PL 
+	$(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
+	$(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command.  <=="
+	false
+
+
+
+# --- MakeMaker staticmake section:
+
+# --- MakeMaker makeaperl section ---
+MAP_TARGET    = perl
+FULLPERL      = /usr/bin/perl
+
+$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+	$(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib
+	$(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+	$(NOECHO) $(PERLRUNINST) \
+		Makefile.PL DIR= \
+		MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+		MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+# --- MakeMaker test section:
+
+TEST_VERBOSE=0
+TEST_TYPE=test_$(LINKTYPE)
+TEST_FILE = test.pl
+TEST_FILES = 
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+
+test :: $(TEST_TYPE)
+	$(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.'
+
+test_dynamic :: pure_all
+
+testdb_dynamic :: pure_all
+	PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+test_ : test_dynamic
+
+test_static :: test_dynamic
+testdb_static :: testdb_dynamic
+
+
+# --- MakeMaker ppd section:
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd:
+	$(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1,00,0,0">' > $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <AUTHOR></AUTHOR>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <IMPLEMENTATION>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <ARCHITECTURE NAME="i586-linux-thread-multi" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <CODEBASE HREF="" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    </IMPLEMENTATION>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
+
+
+# --- MakeMaker pm_to_blib section:
+
+pm_to_blib : $(TO_INST_PM)
+	$(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')' \
+	  V6evalRemote.pm $(INST_LIB)/V6evalRemote.pm 
+	$(NOECHO) $(TOUCH) pm_to_blib
+
+
+# --- MakeMaker selfdocument section:
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
diff -urN tahi-linux-3.0.12/script/pmod/V6evalRemote/V6evalRemote.pm tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/V6evalRemote.pm
--- tahi-linux-3.0.12/script/pmod/V6evalRemote/V6evalRemote.pm	2006-02-03 11:40:15.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/V6evalRemote.pm	2007-12-15 11:01:14.000000000 +0100
@@ -125,114 +125,111 @@
 
     # login prompt
     %prompt_user = (
+		    'kame-freebsd',	'login: ',
+		    'freebsd43-i386',	'login: ',
+		    'hitachi-nr60',	'login:',
+		    'hitachi-nr60-v2',	'login:',
+		    'hitachi-gr2k',	'login:',
+		    'hitachi-gr2k-beta',	'login:',
+		    'nec-libra',	'login: ',
+		    'nec-libra-utcpip',	'login: ',
+		    'nec-mip6',		'login: ',
+		    'nec-ix1k',		'login: ',
+		    'sfc-mip6',		'login: ',
+		    'yamaha-ws-one',	'(starts|Yamaha Corporation)',
+		    'linux-v6',		'login: ',
+		    'sun-solaris',	'login: ',
+		    'ms-win2k',		'Login: ',
+		    'cisco-ios',	'get started',   
+		    'iij-seil',		'login: ',
+		    'telebit-tbc2k',	'Username:',
+		    'mgcs-sj6',		'login: ',
+		    'netbsd-i386',	'login: ',
+		    'kame-netbsd-i386',	'login: ',
+		    'freebsd-i386',	'login: ',
+		    'openbsd-i386',	'login: ',
+		    'aix',		'login: ',
+		    'hpux',		'login: ',
+		    'usagi-i386',	'login: ',
+		    'usagi24-i386',	'login: ',
+		    'mipl',		'login: ',
+		    'lcna',		'login: ',
+		    'ttb3010',		'login: ',
+		    'unitedlinux',		'login: ',
+		    'suse',		'login: ',
 		   );
-#    %prompt_user = (
-#		    'kame-freebsd',	'login: ',
-#		    'freebsd43-i386',	'login: ',
-#		    'hitachi-nr60',	'login:',
-#		    'hitachi-nr60-v2',	'login:',
-#		    'hitachi-gr2k',	'login:',
-#		    'hitachi-gr2k-beta',	'login:',
-#		    'nec-libra',	'login: ',
-#		    'nec-libra-utcpip',	'login: ',
-#		    'nec-mip6',		'login: ',
-#		    'nec-ix1k',		'login: ',
-#		    'sfc-mip6',		'login: ',
-#		    'yamaha-ws-one',	'(starts|Yamaha Corporation)',
-#		    'linux-v6',		'login: ',
-#		    'sun-solaris',	'login: ',
-#		    'ms-win2k',		'Login: ',
-#		    'cisco-ios',	'get started',   
-#		    'iij-seil',		'login: ',
-#		    'telebit-tbc2k',	'Username:',
-#		    'mgcs-sj6',		'login: ',
-#		    'netbsd-i386',	'login: ',
-#		    'kame-netbsd-i386',	'login: ',
-#		    'freebsd-i386',	'login: ',
-#		    'openbsd-i386',	'login: ',
-#		    'aix',		'login: ',
-#		    'hpux',		'login: ',
-#		    'usagi-i386',	'login: ',
-#		    'usagi24-i386',	'login: ',
-#		    'mipl',		'login: ',
-#		    'lcna',		'login: ',
-#		    'ttb3010',		'login: ',
-#		    'unitedlinux',		'login: ',
-#		   );
 
     # password prompt
     %prompt_password = (
+		'kame-freebsd',		'Password:',
+		'freebsd43-i386',	'Password:',
+			'hitachi-nr60',		'Password:',
+			'hitachi-nr60-v2',	'Password:',
+			'hitachi-gr2k',		'Password:',
+			'hitachi-gr2k-beta',	'Password:',
+			'nec-libra',		'Password:',
+			'nec-libra-utcpip',	'Password:',
+			'nec-mip6',		'Password:',
+			'nec-ix1k',		'Password:',
+			'sfc-mip6',		'Password:',
+			'yamaha-ws-one',	'Password:',
+			'linux-v6',		'Password: ',
+			'sun-solaris',		'Password:',
+			'ms-win2k',		'Password:',
+			'cisco-ios',		'Password:',
+			'iij-seil',		'DUMMY_PROMPT',	# dummy
+			'telebit-tbc2k',	'Password:',
+			'mgcs-sj6',		'Password:',
+			'netbsd-i386',		'Password:',
+			'kame-netbsd-i386',	'Password:',
+			'freebsd-i386',		'Password:',
+			'openbsd-i386',		'Password:',
+			'aix',			'Password:',
+			'hpux',			'Password:',
+			'usagi-i386',		'Password: ',
+			'usagi24-i386',		'Password: ',
+			'mipl',			'Password: ',
+			'lcna',			'Password:',
+			'ttb3010',		'Password:',
+			'unitedlinux',		'Password: ',
+			'suse',		'Password: ',
 			);
-#    %prompt_password = (
-#			'kame-freebsd',		'Password:',
-#			'freebsd43-i386',	'Password:',
-#			'hitachi-nr60',		'Password:',
-#			'hitachi-nr60-v2',	'Password:',
-#			'hitachi-gr2k',		'Password:',
-#			'hitachi-gr2k-beta',	'Password:',
-#			'nec-libra',		'Password:',
-#			'nec-libra-utcpip',	'Password:',
-#			'nec-mip6',		'Password:',
-#			'nec-ix1k',		'Password:',
-#			'sfc-mip6',		'Password:',
-#			'yamaha-ws-one',	'Password:',
-#			'linux-v6',		'Password: ',
-#			'sun-solaris',		'Password:',
-#			'ms-win2k',		'Password:',
-#			'cisco-ios',		'Password:',
-#			'iij-seil',		'DUMMY_PROMPT',	# dummy
-#			'telebit-tbc2k',	'Password:',
-#			'mgcs-sj6',		'Password:',
-#			'netbsd-i386',		'Password:',
-#			'kame-netbsd-i386',	'Password:',
-#			'freebsd-i386',		'Password:',
-#			'openbsd-i386',		'Password:',
-#			'aix',			'Password:',
-#			'hpux',			'Password:',
-#			'usagi-i386',		'Password: ',
-#			'usagi24-i386',		'Password: ',
-#			'mipl',			'Password: ',
-#			'lcna',			'Password:',
-#			'ttb3010',		'Password:',
-#			'unitedlinux',		'Password: ',
-#			);
 
     # command prompt
     %prompt_command = (
+		       'kame-freebsd',		'(\$|#) ',
+		       'freebsd43-i386',	'(\$|#) ',
+		       'hitachi-nr60',		'% ',
+		       'hitachi-nr60-v2',	'% ',
+		       'hitachi-gr2k',		'(command|admin)(:|>) ',
+		       'hitachi-gr2k-beta',	'(command|admin): ',
+		       'nec-libra',		'(\$|#) ',
+		       'nec-libra-utcpip',	'(\$|#) ',
+		       'nec-mip6',		'(\$|#) ',
+		       'nec-ix1k',		'(\$|#) ',
+		       'sfc-mip6',		'(\$|#) ',
+		       'yamaha-ws-one',		'(>|#) ',
+		       'linux-v6',		'# ',
+		       'sun-solaris',		'# ',
+		       'ms-win2k',		'.:.>',
+		       'cisco-ios',		'(>|#)',
+		       'iij-seil',		'\r(>|#) ',
+		       'telebit-tbc2k',		'(> |% |accepted)',
+		       'mgcs-sj6',		'(\$|#) ',
+		       'netbsd-i386',		'(\$|#) ',
+		       'kame-netbsd-i386',	'(\$|#) ',
+		       'freebsd-i386',		'(\$|#) ',
+		       'openbsd-i386',		'(\$|#) ',
+		       'aix',			'(\$|#) ',
+		       'hpux',			'(\$|#) ',
+		       'usagi-i386',		'# ',
+		       'usagi24-i386',		'# ',
+		       'mipl',			'# ',
+		       'lcna',			'(\$|#) ',
+		       'ttb3010',		'(>|#) ',
+		       'unitedlinux',	'# ',
+		       'suse',	'# ',
 		       );
-#    %prompt_command = (
-#		       'kame-freebsd',		'(\$|#) ',
-#		       'freebsd43-i386',	'(\$|#) ',
-#		       'hitachi-nr60',		'% ',
-#		       'hitachi-nr60-v2',	'% ',
-#		       'hitachi-gr2k',		'(command|admin)(:|>) ',
-#		       'hitachi-gr2k-beta',	'(command|admin): ',
-#		       'nec-libra',		'(\$|#) ',
-#		       'nec-libra-utcpip',	'(\$|#) ',
-#		       'nec-mip6',		'(\$|#) ',
-#		       'nec-ix1k',		'(\$|#) ',
-#		       'sfc-mip6',		'(\$|#) ',
-#		       'yamaha-ws-one',		'(>|#) ',
-#		       'linux-v6',		'# ',
-#		       'sun-solaris',		'# ',
-#		       'ms-win2k',		'.:.>',
-#		       'cisco-ios',		'(>|#)',
-#		       'iij-seil',		'\r(>|#) ',
-#		       'telebit-tbc2k',		'(> |% |accepted)',
-#		       'mgcs-sj6',		'(\$|#) ',
-#		       'netbsd-i386',		'(\$|#) ',
-#		       'kame-netbsd-i386',	'(\$|#) ',
-#		       'freebsd-i386',		'(\$|#) ',
-#		       'openbsd-i386',		'(\$|#) ',
-#		       'aix',			'(\$|#) ',
-#		       'hpux',			'(\$|#) ',
-#		       'usagi-i386',		'# ',
-#		       'usagi24-i386',		'# ',
-#		       'mipl',			'# ',
-#		       'lcna',			'(\$|#) ',
-#		       'ttb3010',		'(>|#) ',
-#		       'unitedlinux',	'# ',
-#		       );
 
     # command of the admin mode if any
     %cmd_admin = (
@@ -256,40 +253,39 @@
 
     # logout command
     %cmd_exit = (
+		 'kame-freebsd',	'exit',
+		 'freebsd43-i386',	'exit',
+		 'hitachi-nr60',	'exit',
+		 'hitachi-nr60-v2',	'exit',
+		 'hitachi-gr2k',	'exit',
+		 'hitachi-gr2k-beta',	'exit',
+		 'nec-libra',		'exit',
+		 'nec-libra-utcpip',	'exit',
+		 'nec-mip6',		'exit',
+		 'nec-ix1k',		'exit',
+		 'sfc-mip6',		'exit',
+		 'yamaha-ws-one',	'exit',
+		 'linux-v6',		'exit',
+		 'sun-solaris',		'exit',
+		 'ms-win2k',		'exit',
+		 'cisco-ios',		'exit',
+		 'iij-seil',		'exit',
+		 'telebit-tbc2k',	"\elogout\r",
+		 'mgcs-sj6',		'exit',
+		 'netbsd-i386',		'exit',
+		 'kame-netbsd-i386',	'exit',
+		 'freebsd-i386',	'exit',
+		 'openbsd-i386',	'exit',
+		 'aix',			'exit',
+		 'hpux',		'exit',
+		 'usagi-i386',		'exit',
+		 'usagi24-i386',	'exit',
+		 'mipl',		'exit',
+		 'lcna',		'exit',
+		 'ttb3010',		'logout',
+		 'unitedlinux',		'exit',
+		 'suse',		'exit',
 		 );
-#    %cmd_exit = (
-#		 'kame-freebsd',	'exit',
-#		 'freebsd43-i386',	'exit',
-#		 'hitachi-nr60',	'exit',
-#		 'hitachi-nr60-v2',	'exit',
-#		 'hitachi-gr2k',	'exit',
-#		 'hitachi-gr2k-beta',	'exit',
-#		 'nec-libra',		'exit',
-#		 'nec-libra-utcpip',	'exit',
-#		 'nec-mip6',		'exit',
-#		 'nec-ix1k',		'exit',
-#		 'sfc-mip6',		'exit',
-#		 'yamaha-ws-one',	'exit',
-#		 'linux-v6',		'exit',
-#		 'sun-solaris',		'exit',
-#		 'ms-win2k',		'exit',
-#		 'cisco-ios',		'exit',
-#		 'iij-seil',		'exit',
-#		 'telebit-tbc2k',	"\elogout\r",
-#		 'mgcs-sj6',		'exit',
-#		 'netbsd-i386',		'exit',
-#		 'kame-netbsd-i386',	'exit',
-#		 'freebsd-i386',	'exit',
-#		 'openbsd-i386',	'exit',
-#		 'aix',			'exit',
-#		 'hpux',		'exit',
-#		 'usagi-i386',		'exit',
-#		 'usagi24-i386',	'exit',
-#		 'mipl',		'exit',
-#		 'lcna',		'exit',
-#		 'ttb3010',		'logout',
-#		 'unitedlinux',		'exit',
-#		 );
 
     # confirmation for logout
     %prompt_exit_confirm = (
@@ -351,40 +347,39 @@
 
     # reboot command
     %cmd_reboot = (
+		   'kame-freebsd',	'reboot',
+		   'freebsd43-i386',	'reboot',
+		   'hitachi-nr60',	'reboot',
+		   'hitachi-nr60-v2',	'reboot',
+		   'hitachi-gr2k',	'boot -nf',
+		   'hitachi-gr2k-beta',	'boot -nf',
+		   'nec-libra',		'reboot',
+		   'nec-libra-utcpip',	'reboot',
+		   'nec-mip6',		'reboot',
+		   'nec-ix1k',		'reload y',
+		   'sfc-mip6',		'reboot',
+		   'yamaha-ws-one',	'restart',
+		   'linux-v6',		'reboot',
+		   'sun-solaris',	'reboot',
+		   # ms-win2k
+		   'cisco-ios',		'reload',
+		   'iij-seil',		'reboot',
+		   'telebit-tbc2k',	'restart',
+		   'mgcs-sj6',		'reboot',
+		   'netbsd-i386',	'reboot',
+		   'kame-netbsd-i386',	'reboot',
+		   'freebsd-i386',	'reboot',
+		   'openbsd-i386',	'reboot',
+		   'aix',		'reboot',
+		   'hpux',		'reboot',
+		   'usagi-i386',	'reboot',
+		   'usagi24-i386',	'reboot',
+		   'mipl',		'reboot',
+		   'lcna',		'reboot',
+		   'ttb3010',		'reboot',
+		   'unitedlinux',	'reboot',
+		   'suse',	'reboot',
 		   );
-#    %cmd_reboot = (
-#		   'kame-freebsd',	'reboot',
-#		   'freebsd43-i386',	'reboot',
-#		   'hitachi-nr60',	'reboot',
-#		   'hitachi-nr60-v2',	'reboot',
-#		   'hitachi-gr2k',	'boot -nf',
-#		   'hitachi-gr2k-beta',	'boot -nf',
-#		   'nec-libra',		'reboot',
-#		   'nec-libra-utcpip',	'reboot',
-#		   'nec-mip6',		'reboot',
-#		   'nec-ix1k',		'reload y',
-#		   'sfc-mip6',		'reboot',
-#		   'yamaha-ws-one',	'restart',
-#		   'linux-v6',		'reboot',
-#		   'sun-solaris',	'reboot',
-#		   # ms-win2k
-#		   'cisco-ios',		'reload',
-#		   'iij-seil',		'reboot',
-#		   'telebit-tbc2k',	'restart',
-#		   'mgcs-sj6',		'reboot',
-#		   'netbsd-i386',	'reboot',
-#		   'kame-netbsd-i386',	'reboot',
-#		   'freebsd-i386',	'reboot',
-#		   'openbsd-i386',	'reboot',
-#		   'aix',		'reboot',
-#		   'hpux',		'reboot',
-#		   'usagi-i386',	'reboot',
-#		   'usagi24-i386',	'reboot',
-#		   'mipl',		'reboot',
-#		   'lcna',		'reboot',
-#		   'ttb3010',		'reboot',
-#		   'unitedlinux',	'reboot',
-#		   );
 
     # final confirmation for reboot if any
     %prompt_reboot_confirm = (
@@ -439,37 +434,36 @@
 
     # command for reading command status
     %cmd_status = (
+		   'kame-freebsd',	'echo $status',
+		   'freebsd43-i386',	'echo $status',
+		   'hitachi-nr60',	'echo $status',
+		   'hitachi-nr60-v2',	'echo $status',
+		   'hitachi-gr2k',	'echo $status',
+		   'hitachi-gr2k-beta',	'echo $status',
+		   'nec-libra',		'echo $status',
+		   'nec-libra-utcpip',	'echo $status',
+		   'nec-mip6',		'echo $status',
+		   'sfc-mip6',		'echo $status',
+		   'linux-v6',		'echo $?',
+		   'sun-solaris',	'echo $?',
+		   # ms-win2k
+		   # cisco-ios
+		   # iij-seil
+		   # ttb3010
+		   'mgcs-sj6',		'echo $status',
+		   'netbsd-i386',	'echo $status',
+		   'kame-netbsd-i386',	'echo $status',
+		   'freebsd-i386',	'echo $status',
+		   'openbsd-i386',	'echo $status',
+		   'aix',		'echo $?',
+		   'hpux',		'echo $?',
+		   'usagi-i386',	'echo $?',
+		   'usagi24-i386',	'echo $?',
+		   'mipl',		'echo $?',
+		   'lcna',		'echo $status',
+		   'unitedlinux',	'echo $?',
+		   'suse',	'echo $?',
 		   );
-#    %cmd_status = (
-#		   'kame-freebsd',	'echo $status',
-#		   'freebsd43-i386',	'echo $status',
-#		   'hitachi-nr60',	'echo $status',
-#		   'hitachi-nr60-v2',	'echo $status',
-#		   'hitachi-gr2k',	'echo $status',
-#		   'hitachi-gr2k-beta',	'echo $status',
-#		   'nec-libra',		'echo $status',
-#		   'nec-libra-utcpip',	'echo $status',
-#		   'nec-mip6',		'echo $status',
-#		   'sfc-mip6',		'echo $status',
-#		   'linux-v6',		'echo $?',
-#		   'sun-solaris',	'echo $?',
-#		   # ms-win2k
-#		   # cisco-ios
-#		   # iij-seil
-#		   # ttb3010
-#		   'mgcs-sj6',		'echo $status',
-#		   'netbsd-i386',	'echo $status',
-#		   'kame-netbsd-i386',	'echo $status',
-#		   'freebsd-i386',	'echo $status',
-#		   'openbsd-i386',	'echo $status',
-#		   'aix',		'echo $?',
-#		   'hpux',		'echo $?',
-#		   'usagi-i386',	'echo $?',
-#		   'usagi24-i386',	'echo $?',
-#		   'mipl',		'echo $?',
-#		   'lcna',		'echo $status',
-#		   'unitedlinux',	'echo $?',
-#		   );
 }
 
 ########################################################################
Dateien tahi-linux-3.0.12/script/pmod/V6evalRemote/.V6evalRemote.pm.swp und tahi-linux-3.0.12-linux/script/pmod/V6evalRemote/.V6evalRemote.pm.swp sind verschieden.
diff -urN tahi-linux-3.0.12/script/pmod/V6evalTool/blib/lib/V6evalTool.pm tahi-linux-3.0.12-linux/script/pmod/V6evalTool/blib/lib/V6evalTool.pm
--- tahi-linux-3.0.12/script/pmod/V6evalTool/blib/lib/V6evalTool.pm	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalTool/blib/lib/V6evalTool.pm	2007-12-09 23:20:00.000000000 +0100
@@ -0,0 +1,3217 @@
+#
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+# Yokogawa Electric Corporation,
+# YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
+# All rights reserved.
+# 
+# Redistribution and use of this software in source and binary forms, with 
+# or without modification, are permitted provided that the following 
+# conditions and disclaimer are agreed and accepted by the user:
+# 
+# 1. Redistributions of source code must retain the above copyright 
+# notice, this list of conditions and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright 
+# notice, this list of conditions and the following disclaimer in the 
+# documentation and/or other materials provided with the distribution.
+# 
+# 3. Neither the names of the copyrighters, the name of the project which 
+# is related to this software (hereinafter referred to as "project") nor 
+# the names of the contributors may be used to endorse or promote products 
+# derived from this software without specific prior written permission.
+# 
+# 4. No merchantable use may be permitted without prior written 
+# notification to the copyrighters. However, using this software for the 
+# purpose of testing or evaluating any products including merchantable 
+# products may be permitted without any notification to the copyrighters.
+# 
+# 
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
+# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
+# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
+# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+# THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $TAHI: v6eval/script/pmod/V6evalTool/V6evalTool.pm,v 1.200 2006/03/09 09:10:57 akisada Exp $
+#
+########################################################################
+package V6evalTool;
+use Exporter;
+@ISA = qw(Exporter);
+use Fcntl;
+use POSIX qw(tmpnam);
+
+use File::Basename;
+
+@EXPORT = qw(
+	vSend
+	vSend2
+	vSend3
+	vRecv
+	vRecv2
+	vRecv3
+	vCapture
+	vStop
+	vClear
+	vLog
+	vLogHTML
+	vErrmsg
+	vRoundoff
+	vRemote
+	vRemoteAsync
+	vRemoteAsyncWait
+	vSleep
+	vSleep2
+	vCPP
+	vNewPacketFile
+	vOriginalPacketFile
+	vMAC2LLAddr
+	getChildStatus
+	getChildPid
+	checkChild
+	vDHGen
+	vDHGen2
+	vDHComp
+	vDHComp2
+	vPRFComp
+	vIVComp
+	vX509dec
+	vSigSign
+	vSigVrfy
+	vFile2Hex
+);
+
+my %storedSIG = ();
+
+########################################################################
+$exitPass=0;		# PASS
+$exitIgnore=1;		# Ignore (ex. initializeation script)
+$exitNS=2;		# Not yet supported
+$exitWarn=3;		# WARN
+$exitHostOnly=4;	# Host Only
+$exitRouterOnly=5;	# Router Only
+$exitSpecialOnly=6;	# Special Only
+$exitExceptHost=7;	# Except Host
+$exitExceptRouter=8;	# Except Router
+$exitExceptSpecial=9;	# Except Special
+$exitSkip=10;		# Skip
+$exitTypeMismatch=11;	# Type Mismatch
+
+$exitFail=32;		# FAIL
+$exitInitFail=33;	# Initialization Fail
+$exitCleanupFail=34;	# Cleanup Fail
+			# 35 - 63: reserved for future use
+
+$exitFatal=64;		# FATAL (terminate series of related tests)
+
+########################################################################
+sub checkArgs();
+sub checkFile($);
+sub initialize();
+sub getDateString();
+sub getVersion();
+sub printBanner();
+sub printUsage();
+sub execPktctl($$@;$);
+sub execCmd($;$);
+sub forkCmd($$);
+sub prLog($;$);
+sub prOut($);
+sub prTrace($);
+sub prErr($);
+sub prErrExit($);
+sub checkChild();
+sub searchPath($$);
+sub getField(@);
+sub getField2(@);
+sub getField3(@);
+sub HTML2TXT($);
+sub vCPP(;@);
+sub vNewPacketFile($;@);
+sub vOriginalPacketFile();
+sub baseArgs();
+sub vDHGen($$);
+sub vDHGen2($$);
+sub vDHComp($$$$$);
+sub vDHComp2($$$$$);
+sub vPRFComp($$$);
+sub vIVComp($$);
+sub vX509dec($);
+sub vSigSign($$);
+sub vSigVrfy($$$);
+sub vFile2Hex($);
+sub addMD5($$$);
+sub getMD5($);
+
+
+
+########################################################################
+sub
+vSend($@)
+{
+	my ($ifname,	# target interface name
+	@frames		# frame names to send
+    ) = @_;
+
+	my $timestr=getTimeStamp();
+	if($vLogStat==$vLogStatOpenRow){
+		prLog("</TD>\n</TR>");
+	}
+	prLog("<TR VALIGN=\"TOP\">\n<TD>$timestr</TD><TD>");
+	prLog("vSend($ifname,@frames)<BR>");
+
+	my $cmd= "$ToolDir/pktsend $BaseArgs -i $ifname @frames";
+	my @lines; my %ret; my $fCnt=0; my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	undef @pktrevers;
+	foreach( @lines ){
+		if( /^\s*(\d+\.\d+)$/ ) {
+               		$fCnt++;
+               		$ret{"sentTime${fCnt}"}	= $1;
+		} else {
+			$pktrevers[$fCnt+1] .= "$_\n";
+		}
+	}
+
+	for($i=1;$i<=$fCnt;$i++){
+		$_= $frames[$i-1];
+		if($main::pktdesc{$_}){
+			$msg="$main::pktdesc{$_}";
+		} else {
+			$msg="send $_";
+		}
+		prOut(HTML2TXT($msg));
+		prLog("<A NAME=\"vSend${vSendPKT}\"></A>");
+		prLog("<A HREF=\"#vSendPKT${vSendPKT}\">$msg</A><BR>");
+
+		$senttime=getTimeString($ret{"sentTime${i}"});
+		$pktrevlog .="<A NAME=\"vSendPKT${vSendPKT}\"></A>";
+		$pktrevlog .="<A HREF=\"#vSend${vSendPKT}\">$msg at $senttime</A>\n";
+		$pktrevlog .="<PRE STYLE=\"line-height:70%\">";
+
+		my $Xpktrevers = $pktrevers[$i];
+
+		$Xpktrevers =~ s/&/&amp;/g;
+		$Xpktrevers =~ s/"/&quot;/g;
+		$Xpktrevers =~ s/</&lt;/g;
+		$Xpktrevers =~ s/>/&gt;/g;
+
+		$pktrevlog .=$Xpktrevers;
+
+		$pktrevlog .="</PRE><HR>";
+
+		$vSendPKT++;
+	}
+	if($ret{status}){		
+		prErrExit("vSend() return status=$ret{status}\n");
+	}
+	prLog("\n</TD>\n</TR>");
+	$vLogStat=$vLogStatCloseRow;
+	%ret;
+}
+
+
+
+################################################################
+# vSend2($ifname, @frames)                                     #
+#                                                              #
+#     $ifname - target interface name                          #
+#     @frames - frame names to send                            #
+################################################################
+sub
+vSend2($@)
+{
+	my ($ifname, @frames) = @_;
+
+	my $timestr = getTimeStamp();
+
+	if($vLogStat == $vLogStatOpenRow){
+		prLog("</TD>\n");
+		prLog("</TR>");
+	}
+
+	prLog("<TR VALIGN=\"top\">\n");
+	prLog("<TD>$timestr</TD><TD>");
+	prLog("vSend($ifname,@frames)<BR>");
+
+	my $cmd = "$ToolDir/pktsend $BaseArgs -i $ifname @frames";
+
+	my $fCnt = 0;
+
+	my ($status, @lines) = execCmd($cmd);
+
+	my %ret = getField2(@lines);
+	$ret{'status'}=$status;
+
+	undef(@pktrevers);
+
+	foreach(@lines){
+		if($_ =~ /^\s*(\d+\.\d+)$/) {
+			$fCnt ++;
+			$ret{"sentTime${fCnt}"}	= $1;
+		} else {
+			$pktrevers[$fCnt + 1] .= "$_\n";
+		}
+	}
+
+	for(my $i = 1; $i <= $fCnt; $i ++) {
+		$_ = $frames[$i - 1];
+		if($main::pktdesc{$_}){
+			$msg = "$main::pktdesc{$_}";
+		} else {
+			$msg = "send $_";
+		}
+
+		prOut(HTML2TXT($msg));
+
+		prLog("<A NAME=\"vSend${vSendPKT}\"></A>");
+		prLog("<A HREF=\"#vSendPKT${vSendPKT}\">$msg</A><BR>");
+
+		$senttime = getTimeString($ret{"sentTime${i}"});
+
+		$pktrevlog .="<A NAME=\"vSendPKT${vSendPKT}\"></A>";
+		$pktrevlog .="<A HREF=\"#vSend${vSendPKT}\">$msg at $senttime</A>\n";
+		$pktrevlog .="<PRE STYLE=\"line-height:70%\">";
+
+		my $Xpktrevers = $pktrevers[$i];
+
+		$Xpktrevers =~ s/&/&amp;/g;
+		$Xpktrevers =~ s/"/&quot;/g;
+		$Xpktrevers =~ s/</&lt;/g;
+		$Xpktrevers =~ s/>/&gt;/g;
+
+		$pktrevlog .=$Xpktrevers;
+
+		$pktrevlog .="</PRE><HR>";
+
+		$vSendPKT ++;
+	}
+
+	if($ret{status}){		
+		prErrExit("vSend() return status=$ret{status}\n");
+	}
+
+	prLog("\n</TD>\n</TR>");
+	$vLogStat = $vLogStatCloseRow;
+
+	return(%ret);
+}
+
+
+
+sub
+vSend3($@)
+{
+	my ($ifname, @frames) = @_;
+
+	my $timestr = getTimeStamp();
+
+	if($vLogStat == $vLogStatOpenRow){
+		prLog("</TD>\n");
+		prLog("</TR>");
+	}
+
+	prLog("<TR VALIGN=\"top\">\n");
+	prLog("<TD>$timestr</TD><TD>");
+	prLog("vSend($ifname,@frames)<BR>");
+
+	my $cmd = "$ToolDir/pktsend $BaseArgs -i $ifname @frames";
+
+	my $fCnt = 0;
+
+	my ($status, @lines) = execCmd($cmd);
+
+	my %ret = getField3(@lines);
+	$ret{'status'}=$status;
+
+	undef(@pktrevers);
+
+	foreach(@lines){
+		if($_ =~ /^\s*(\d+\.\d+)$/) {
+			$fCnt ++;
+			$ret{"sentTime${fCnt}"}	= $1;
+		} else {
+			$pktrevers[$fCnt + 1] .= "$_\n";
+		}
+	}
+
+	for(my $i = 1; $i <= $fCnt; $i ++) {
+		$_ = $frames[$i - 1];
+		if($main::pktdesc{$_}){
+			$msg = "$main::pktdesc{$_}";
+		} else {
+			$msg = "send $_";
+		}
+
+		prOut(HTML2TXT($msg));
+
+		prLog("<A NAME=\"vSend${vSendPKT}\"></A>");
+		prLog("<A HREF=\"#vSendPKT${vSendPKT}\">$msg</A><BR>");
+
+		$senttime = getTimeString($ret{"sentTime${i}"});
+
+		$pktrevlog .="<A NAME=\"vSendPKT${vSendPKT}\"></A>";
+		$pktrevlog .="<A HREF=\"#vSend${vSendPKT}\">$msg at $senttime</A>\n";
+		$pktrevlog .="<PRE STYLE=\"line-height:70%\">";
+
+		my $Xpktrevers = $pktrevers[$i];
+
+		$Xpktrevers =~ s/&/&amp;/g;
+		$Xpktrevers =~ s/"/&quot;/g;
+		$Xpktrevers =~ s/</&lt;/g;
+		$Xpktrevers =~ s/>/&gt;/g;
+
+		$pktrevlog .=$Xpktrevers;
+
+		$pktrevlog .="</PRE><HR>";
+
+		$vSendPKT ++;
+	}
+
+	if($ret{status}){		
+		prErrExit("vSend() return status=$ret{status}\n");
+	}
+
+	prLog("\n</TD>\n</TR>");
+	$vLogStat = $vLogStatCloseRow;
+
+	return(%ret);
+}
+
+
+
+########################################################################
+sub
+vRecv($$$$@)
+{
+	my ($ifname,	# target interface name
+	$timeout,	# expire time(second)
+			#	-1: No limitation
+	$seektime,	# seek to the packet at the time(%ld.%06d)
+			#	0: seek from the beginning 
+			#	   of the captured buffer
+			#	You may use $retval{'sentTime(n)'}
+			#	returned by vSend().
+	$count,		# How many frames to wait 
+			#	0: No limitation
+	@frames		# frame names to send
+    ) = @_;
+	my $cmd= "$ToolDir/pktrecv $BaseArgs";
+	$cmd.=" -i $ifname"   if $ifname;
+	$cmd.=" -e $timeout"  if $timeout >= 0;
+	$cmd.=" -s $seektime" if $seektime;
+	$cmd.=" -c $count"    if $count;
+	$cmd.=" @frames";
+
+	my $timestr=getTimeStamp();
+	if($vLogStat==$vLogStatOpenRow){
+		prLog("</TD>\n</TR>");
+	}
+	prLog("<TR VALIGN=\"TOP\"><TD>$timestr</TD>");
+	prLog("<TD>vRecv($ifname,@frames)". 
+	      " timeout:$timeout cntLimit:$count seektime:$seektime<BR>");
+	my @lines; my %ret; my $fCnt=0; my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	undef @pktrevers;
+	foreach( @lines ){
+		if( /^\s*(\d+\.\d+)\s+(\S*)$/ ) {
+               		$fCnt++;
+               		$ret{"recvTime${fCnt}"}	= $1;
+               		$ret{recvFrame}		= $2;
+		} else {
+			$pktrevers[$fCnt+1] .= "$_\n";
+		}
+	}
+	undef($ret{recvFrame}) if ($ret{recvFrame} eq '-');
+	$ret{recvCount}=$fCnt;
+
+	for($i=1;$i<=$fCnt;$i++){
+		my $recvtime=getTimeString($ret{"recvTime${i}"});
+
+		if($i!=$fCnt || $ret{status}!=0){
+			prLog("<A NAME=\"vRecv${vRecvPKT}\"></A>");
+			if(@frames){
+			    prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">recv unexpect packet at $recvtime</A>");
+			} else {
+			    prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">recv a packet at $recvtime</A>");
+			}
+			prLog("<BR>");
+		}
+		$pktrevlog .="<A NAME=\"vRecvPKT${vRecvPKT}\"></A>";
+		$pktrevlog .="<A HREF=\"#vRecv${vRecvPKT}\">Recv at $recvtime</A>\n";
+		$pktrevlog .="<PRE STYLE=\"line-height:70%\">";
+
+		my $Xpktrevers = $pktrevers[$i];
+
+		$Xpktrevers =~ s/&/&amp;/g;
+		$Xpktrevers =~ s/"/&quot;/g;
+		$Xpktrevers =~ s/</&lt;/g;
+		$Xpktrevers =~ s/>/&gt;/g;
+
+		$pktrevlog .="$Xpktrevers";
+
+		$pktrevlog .="</PRE><HR>";
+
+		$vRecvPKT++;
+	}
+
+	if($ret{status}>=3){
+		prErrExit("vRecv() return status=$ret{status}\n");
+	}
+	if($ret{status}==0){
+		$_= $ret{recvFrame};
+		$vRecvPKT--;
+		if($main::pktdesc{$_}){
+			$msg="$main::pktdesc{$_}";
+		} else {
+			$msg="recv $_";
+		}
+		prOut(HTML2TXT($msg));
+		prLog("<A NAME=\"vRecv${vRecvPKT}\"></A>");
+		prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">$msg</A><BR>");
+		$vRecvPKT++;
+	} else {
+		prLog("vRecv() return status=$ret{status}");
+	}
+	prLog("\n</TD>\n</TR>\n");
+	$vLogStat=$vLogStatCloseRow;
+	%ret;
+}
+
+
+
+################################################################
+# vRecv2($ifname, $timeout, $seektime, $count, @frames)        #
+#                                                              #
+#     $ifname   - target interface name                        #
+#     $timeout  - expire time(second)                          #
+#                     -1: No limitation                        #
+#     $seektime - seek to the packet at the time(%ld.%06d)     #
+#                     0: seek from the beginning of            #
+#                         the captured buffer                  #
+#                     You may use $retval{'sentTime(n)'}       #
+#                         returned by vSend().                 #
+#     $count    - How many frames to wait                      #
+#                     0: No limitation                         #
+#     @frames   - frame names to send                          #
+################################################################
+sub
+vRecv2($$$$@)
+{
+	my ($ifname, $timeout, $seektime, $count, @frames) = @_;
+
+	my $cmd  = "$ToolDir/pktrecv $BaseArgs";
+	   $cmd .= " -i $ifname"	if($ifname);
+	   $cmd .= " -e $timeout"	if($timeout >= 0);
+	   $cmd .= " -s $seektime"	if($seektime);
+	   $cmd .= " -c $count"		if($count);
+	   $cmd .= " @frames";
+
+	my $timestr = getTimeStamp();
+
+	if($vLogStat == $vLogStatOpenRow){
+		prLog("</TD>\n");
+		prLog("</TR>");
+	}
+
+	prLog("<TR VALIGN=\"top\"><TD>$timestr</TD>");
+	prLog("<TD>vRecv($ifname,@frames)". 
+	      " timeout:$timeout cntLimit:$count seektime:$seektime<BR>");
+
+	my $fCnt = 0;
+
+	my ($status, @lines) = execCmd($cmd);
+
+	my %ret = getField2(@lines);
+	$ret{'status'} = $status;
+
+	undef(@pktrevers);
+
+	foreach(@lines){
+		if($_ =~ /^\s*(\d+\.\d+)\s+(\S*)$/ ) {
+			$fCnt ++;
+			$ret{"recvTime${fCnt}"}	= $1;
+			$ret{'recvFrame'}	= $2;
+		} else {
+			$pktrevers[$fCnt + 1] .= "$_\n";
+		}
+	}
+
+	undef($ret{'recvFrame'}) if($ret{'recvFrame'} eq '-');
+
+	$ret{'recvCount'} = $fCnt;
+
+	for(my $i = 1; $i <= $fCnt; $i ++){
+		my $recvtime = getTimeString($ret{"recvTime${i}"});
+
+		if(($i != $fCnt) || ($ret{'status'})){
+			prLog("<A NAME=\"vRecv${vRecvPKT}\"></A>");
+
+			if(@frames){
+				prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">recv unexpect packet at $recvtime</A>");
+			} else {
+				prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">recv a packet at $recvtime</A>");
+			}
+
+			prLog("<BR>");
+		}
+
+		$pktrevlog .= "<A NAME=\"vRecvPKT${vRecvPKT}\"></A>";
+		$pktrevlog .= "<A HREF=\"#vRecv${vRecvPKT}\">Recv at $recvtime</A>\n";
+		$pktrevlog .= "<PRE STYLE=\"line-height:70%\">";
+
+		my $Xpktrevers = $pktrevers[$i];
+
+		$Xpktrevers =~ s/&/&amp;/g;
+		$Xpktrevers =~ s/"/&quot;/g;
+		$Xpktrevers =~ s/</&lt;/g;
+		$Xpktrevers =~ s/>/&gt;/g;
+
+		$pktrevlog .= $Xpktrevers;
+
+		$pktrevlog .= "</PRE><HR>";
+
+		$vRecvPKT ++;
+	}
+
+	if($ret{'status'} >= 3){
+		prErrExit("vRecv() return status=$ret{status}\n");
+	}
+
+	if($ret{'status'}){
+		prLog("vRecv() return status=$ret{status}");
+	} else {
+		$_ = $ret{'recvFrame'};
+
+		$vRecvPKT --;
+
+		if($main::pktdesc{$_}){
+			$msg = "$main::pktdesc{$_}";
+		} else {
+			$msg = "recv $_";
+		}
+
+		prOut(HTML2TXT($msg));
+		prLog("<A NAME=\"vRecv${vRecvPKT}\"></A>");
+		prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">$msg</A><BR>");
+
+		$vRecvPKT ++;
+	}
+
+	prLog("\n");
+	prLog("</TD>\n");
+	prLog("</TR>\n");
+	$vLogStat = $vLogStatCloseRow;
+
+	return(%ret);
+}
+
+
+
+########################################################################
+sub
+vRecv3($$$$@)
+{
+	my ($ifname, $timeout, $seektime, $count, @frames) = @_;
+
+	my $cmd  = "$ToolDir/pktrecv $BaseArgs";
+	   $cmd .= " -i $ifname"	if($ifname);
+	   $cmd .= " -e $timeout"	if($timeout >= 0);
+	   $cmd .= " -s $seektime"	if($seektime);
+	   $cmd .= " -c $count"		if($count);
+	   $cmd .= " @frames";
+
+	my $timestr = getTimeStamp();
+
+	if($vLogStat == $vLogStatOpenRow){
+		prLog("</TD>\n");
+		prLog("</TR>");
+	}
+
+	prLog("<TR VALIGN=\"top\"><TD>$timestr</TD>");
+	prLog("<TD>vRecv($ifname,@frames)". 
+	      " timeout:$timeout cntLimit:$count seektime:$seektime<BR>");
+
+	my $fCnt = 0;
+
+	my ($status, @lines) = execCmd($cmd);
+
+	my %ret = getField3(@lines);	### differ to vRecv2
+	$ret{'status'} = $status;
+
+	undef(@pktrevers);
+
+	foreach(@lines){
+		if($_ =~ /^\s*(\d+\.\d+)\s+(\S*)$/ ) {
+			$fCnt ++;
+			$ret{"recvTime${fCnt}"}	= $1;
+			$ret{'recvFrame'}	= $2;
+		} else {
+			$pktrevers[$fCnt + 1] .= "$_\n";
+		}
+	}
+
+	undef($ret{'recvFrame'}) if($ret{'recvFrame'} eq '-');
+
+	$ret{'recvCount'} = $fCnt;
+
+	for(my $i = 1; $i <= $fCnt; $i ++){
+		my $recvtime = getTimeString($ret{"recvTime${i}"});
+
+		if(($i != $fCnt) || ($ret{'status'})){
+			prLog("<A NAME=\"vRecv${vRecvPKT}\"></A>");
+
+			if(@frames){
+				prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">recv unexpect packet at $recvtime</A>");
+			} else {
+				prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">recv a packet at $recvtime</A>");
+			}
+
+			prLog("<BR>");
+		}
+
+		$pktrevlog .= "<A NAME=\"vRecvPKT${vRecvPKT}\"></A>";
+		$pktrevlog .= "<A HREF=\"#vRecv${vRecvPKT}\">Recv at $recvtime</A>\n";
+		$pktrevlog .= "<PRE STYLE=\"line-height:70%\">";
+
+		my $Xpktrevers = $pktrevers[$i];
+
+		$Xpktrevers =~ s/&/&amp;/g;
+		$Xpktrevers =~ s/"/&quot;/g;
+		$Xpktrevers =~ s/</&lt;/g;
+		$Xpktrevers =~ s/>/&gt;/g;
+
+		$pktrevlog .= $Xpktrevers;
+
+		$pktrevlog .= "</PRE><HR>";
+
+		$vRecvPKT ++;
+	}
+
+	if($ret{'status'} >= 3){
+		prErrExit("vRecv() return status=$ret{status}\n");
+	}
+
+	if($ret{'status'}){
+		prLog("vRecv() return status=$ret{status}");
+	} else {
+		$_ = $ret{'recvFrame'};
+
+		$vRecvPKT --;
+
+		if($main::pktdesc{$_}){
+			$msg = "$main::pktdesc{$_}";
+		} else {
+			$msg = "recv $_";
+		}
+
+		prOut(HTML2TXT($msg));
+		prLog("<A NAME=\"vRecv${vRecvPKT}\"></A>");
+		prLog("<A HREF=\"#vRecvPKT${vRecvPKT}\">$msg</A><BR>");
+
+		$vRecvPKT ++;
+	}
+
+	prLog("\n");
+	prLog("</TD>\n");
+	prLog("</TR>\n");
+	$vLogStat = $vLogStatCloseRow;
+
+	return(%ret);
+}
+
+
+
+########################################################################
+sub
+vStop($)
+{
+	my ($ifname,	# target interface name
+    ) = @_;
+	execPktctl('Stop Capturing Packets', $ifname, 'stop');
+	return 0;
+}
+
+
+
+########################################################################
+sub
+vClear($)
+{
+	my ($ifname,	# target interface name
+    ) = @_;
+	execPktctl('Clear Captured Packets', $ifname, 'clear');
+	return 0;
+}
+
+
+
+########################################################################
+sub
+vCapture($)
+{
+	my ($ifname,	# target interface name
+    ) = @_;
+	execPktctl('Start Capturing Packets', $ifname, 'capture');
+	return 0;
+}
+
+
+
+########################################################################
+sub
+vWrap($)
+{
+	my ($ifname,	# target interface name
+    ) = @_;
+	execPktctl('vWrap', $ifname, 'wrap');
+	return 0;
+}
+
+
+
+########################################################################
+sub
+vNowrap($)
+{
+	my ($ifname,	# target interface name
+    ) = @_;
+	execPktctl('vNowrap', $ifname, 'nowrap');
+	return 0;
+}
+
+
+
+########################################################################
+sub
+vLog($)
+{
+	my ($message,	# message to be logged
+    ) = @_;
+	if($vLogStat==$vLogStatCloseRow){
+		prLog("<TR><TD><BR></TD><TD>");
+		$vLogStat=$vLogStatOpenRow;
+	};
+	prLog("<PRE>$message</PRE>");
+	prOut "$message" if $VLog == 0;
+}
+
+
+
+########################################################################
+sub
+vLogHTML($)
+{
+	my ($message,	# message to be logged
+    ) = @_;
+	if($vLogStat==$vLogStatCloseRow){
+		prLog("<TR><TD><BR></TD><TD>");
+		$vLogStat=$vLogStatOpenRow;
+	};
+	prLogHTML($message);
+	prOut "$message" if $VLog == 0;
+}
+
+
+
+########################################################################
+sub
+vErrmsg(%)
+{
+	my (%stat		# return status
+    ) = @_;
+	my($s1, $s2);
+
+	return if $stat{status} == 0;
+
+	if($stat{status} > 3) {
+		return "ERROR: Internal error";
+	} elsif($stat{status} == 1) {
+		$s1="Time-out";
+	} elsif($stat{status} == 2) {
+		$s1="Count-out";
+	}
+	if($stat{recvCount} == 0) {
+		$s2 = "Could not get any packet";
+	} else {
+		$s2 = "Got unexpected packet(s)";
+	}
+	return "ERROR: $s1: $s2";
+}
+
+
+
+########################################################################
+sub
+vRoundoff($)
+{
+	my ($timeval		# sec.usec
+    ) = @_;
+	my($sec, $usec, $val);
+
+	($sec, $usec)=split(/\./, $timeval);
+	if(length($usec) >=6) {
+		$val=$timeval;
+	} else {
+		$val=sprintf("%d.%06d", $sec, $usec);
+	}
+	$val+=0.05;
+	($sec, $usec)=split(/\./, $val);
+	substr($usec, 1) = "";
+	sprintf("%d.%01d", $sec, $usec);
+}
+
+
+
+########################################################################
+sub
+vStatus($)
+{
+	my (
+	$ifname,	# target interface name
+    ) = @_;
+	my @lines; my %ret;
+	($ret{status}, @lines) = execPktctl('vStatus', $ifname, 'status');
+	foreach( @lines ){
+		if( /^(\S+)\s+(\S+)$/ ) {
+               		$ret{$1}=$2;
+		}
+	}
+	%ret;
+}
+
+
+
+########################################################################
+sub
+vDump($$)
+{
+	my (
+	$ifname,	# target interface name
+	$count		# the number of frames to be dumped
+    ) = @_;
+	my ($status) = execPktctl('vDump', $ifname, 'dump', $count);
+	$status;
+}
+
+
+
+########################################################################
+sub
+vSleep($;$)
+{
+	my (
+	$seconds,	# sleep time
+	$msg		# comment
+    ) = @_;
+
+	my $timestr=getTimeStamp();
+	if(!$msg){ $msg = "Wait $seconds second"; }
+
+	prLog("</TD></TR>\n") if($vLogStat==$vLogStatOpenRow);
+	prLog("<TR VALIGN=\"TOP\">\n<TD>$timestr</TD>\n<TD>$msg\n</TD></TR>");
+	$vLogStat=$vLogStatCloseRow;
+	prOut("$msg\n");
+	sleep $seconds;
+
+}
+
+
+
+########################################################################
+sub
+vSleep2($;$)
+{
+	my (
+	$seconds,	# sleep time
+	$msg		# comment
+    ) = @_;
+
+	my $timestr=getTimeStamp();
+	if(!$msg){ $msg = "Wait $seconds second"; }
+
+	prLog("</TD></TR>\n") if($vLogStat==$vLogStatOpenRow);
+	prLog("<TR VALIGN=\"TOP\">\n<TD>$timestr</TD>\n<TD>$msg\n</TD></TR>");
+	$vLogStat=$vLogStatCloseRow;
+	prOut("$msg\n");
+	select(undef, undef, undef, $seconds);
+}
+
+
+
+########################################################################
+sub
+vRemote($;$@)
+{
+	my (
+	$fname,		# remote file name
+	$opts,		# options
+	@args,		# variable args
+    ) = @_;
+
+	my $rpath = "./";
+	$rpath .= ":./$NutDef{System}/" if $NutDef{System};
+	$rpath .= ":${V6Root}/bin/$NutDef{System}/" if $NutDef{System};
+	$rpath .= ":${V6Root}/bin/unknown/";
+
+	my $cmd  = searchPath($rpath, $fname); 
+	$cmd .= " -t $NutDef{System}"		if $NutDef{System};
+	$cmd .= " -u $NutDef{User}"		if $NutDef{User};
+	$cmd .= " -p $NutDef{Password}"		if $NutDef{Password};
+	$cmd .= " -T $TnDef{RemoteCuPath}"	if $TnDef{RemoteCuPath};
+	$cmd .= " -d $TnDef{RemoteDevice}"	if $TnDef{RemoteDevice};
+	$cmd .= " -v $TnDef{RemoteDebug}"	if $TnDef{RemoteDebug};
+	$cmd .= " -i $TnDef{RemoteIntDebug}"	if $TnDef{RemoteIntDebug};
+	$cmd .= " -o $TnDef{RemoteLog}"		if $TnDef{RemoteLog};
+	$cmd .= " -s $TnDef{RemoteSpeed}"	if $TnDef{RemoteSpeed};
+	$cmd .= " -l $TnDef{RemoteLogout}"	if $TnDef{RemoteLogout};
+	$cmd .= " $RemoteOption $opts @args";
+
+	prLog("</TD>\n</TR>") if($vLogStat==$vLogStatOpenRow);
+	my $timestr=getTimeStamp();
+	prLogHTML("<TR VALIGN=\"TOP\"><TD>$timestr</TD>\n");
+	prLogHTML("<TD>\nvRemote($fname) ``$cmd''\n");
+
+        if($vrasync_state eq RUNNING){
+		prErrExit("vRemoteAsync process already exists: pid=$pid_vrasync"); 
+	}
+
+	if($TnDef{RemoteMethod} eq 'none') {
+		$_ = "Remote command is disabled by ``RemoteMethod: none''";
+		prOut($_) if $VLog == 0;
+		prLogHTML("<BR>$_\n</TD></TR>");
+		$vLogStat=$vLogStatCloseRow;
+		exit $exitNS;
+	}
+
+	prLogHTML("<PRE>");
+	pipe PIN,COUT;
+	$ChildPid = 0;
+	my $localExecutingPid;
+	unless(defined($ExecutingPid = $localExecutingPid = fork)){
+		$localExecutingPid=0;
+		prErrExit("Fork failed for <$cmd>"); 
+	}
+	unless( $localExecutingPid ) { # Children
+		open(STDOUT, ">&COUT");
+		open(STDERR, ">&COUT");
+		close(PIN);
+		# close(STDIN);
+		# should close if any explicit open files exit
+		exec "$cmd";
+#		prErrExit("Exec failed for <$cmd>"); 
+	}
+
+	my $pid=$localExecutingPid;
+	close(COUT);
+	prTrace("vRemote()... $cmd");
+
+	$stdout = '';
+	while( <PIN> ) {
+		$stdout .= $_;
+		chomp;
+		s/\r//g;
+		s/&/&amp;/g;
+		s/"/&quot;/g;
+		s/</&lt;/g;
+		s/>/&gt;/g;
+		prLog("$_");
+		prOut("$_") if $VLog == 0;
+	}
+	close(PIN);
+	while($ChildPid == 0){};
+	my $status = getChildStatus();
+	prErrExit("Unknown child died $pid $ChildPid (status=$status)!!") if($ChildPid != $pid);
+	if($status & 0xff) { # died by signal
+		prErrExit("Catch signal <$cmd>");
+	}
+	my $rc=($status >> 8);
+	if($rc == $exitNS) {
+		$_ = "NUT($NutDef{System}) does not support the functionality";
+		prLog($_);
+		prOut($_) if $VLog == 0;
+		exit $exitNS;
+	}
+	prLog("</PRE>\n</TD></TR>");
+	$vLogStat=$vLogStatCloseRow;
+	$rc;
+}
+
+
+
+########################################################################
+sub
+vRemoteAsync($;$@)
+{
+	my (
+	$fname,		# remote file name
+	$opts,		# options
+	@args,		# variable args
+    ) = @_;
+
+	my $rpath = "./";
+	$rpath .= ":./$NutDef{System}/" if $NutDef{System};
+	$rpath .= ":${V6Root}/bin/$NutDef{System}/" if $NutDef{System};
+	$rpath .= ":${V6Root}/bin/unknown/";
+
+	my $cmd  = searchPath($rpath, $fname); 
+	$cmd .= " -t $NutDef{System}"		if $NutDef{System};
+	$cmd .= " -u $NutDef{User}"		if $NutDef{User};
+	$cmd .= " -p $NutDef{Password}"		if $NutDef{Password};
+	$cmd .= " -T $TnDef{RemoteCuPath}"	if $TnDef{RemoteCuPath};
+	$cmd .= " -d $TnDef{RemoteDevice}"	if $TnDef{RemoteDevice};
+	$cmd .= " -v $TnDef{RemoteDebug}"	if $TnDef{RemoteDebug};
+	$cmd .= " -i $TnDef{RemoteIntDebug}"	if $TnDef{RemoteIntDebug};
+	$cmd .= " -o $TnDef{RemoteLog}"		if $TnDef{RemoteLog};
+	$cmd .= " -s $TnDef{RemoteSpeed}"	if $TnDef{RemoteSpeed};
+	$cmd .= " -l $TnDef{RemoteLogout}"	if $TnDef{RemoteLogout};
+	$cmd .= " $RemoteOption $opts @args";
+
+	prLog("</TD>\n</TR>") if($vLogStat==$vLogStatOpenRow);
+	my $timestr=getTimeStamp();
+	prLogHTML("<TR VALIGN=\"TOP\"><TD>$timestr</TD>\n");
+	prLogHTML("<TD>\nvRemoteAsync($fname) ``$cmd''\n");
+
+        if($vrasync_state eq RUNNING){
+		prErrExit("vRemoteAsync process already exists: pid=$pid_vrasync"); 
+	}
+        $vrasync_state = RUNNING;
+
+	if($TnDef{RemoteMethod} eq 'none') {
+		$_ = "Remote command is disabled by ``RemoteMethod: none''";
+		prOut($_) if $VLog == 0;
+		prLogHTML("<BR>$_\n</TD></TR>");
+		$vLogStat=$vLogStatCloseRow;
+		exit $exitNS;
+	}
+
+	prLogHTML("<PRE>");
+	pipe PIN_VRASYNC,COUT_VRASYNC;
+	my $localExecutingPid_vrasync;
+	unless(defined($ExecutingPid_vrasync = $localExecutingPid_vrasync = fork)){
+		$localExecutingPid_vrasync=0;
+		prErrExit("Fork failed for <$cmd>"); 
+	}
+	unless( $localExecutingPid_vrasync ) { # Children
+		open(STDOUT, ">&COUT_VRASYNC");
+		open(STDERR, ">&COUT_VRASYNC");
+		close(PIN_VRASYNC);
+		# close(STDIN);
+		# should close if any explicit open files exit
+		print("sleep 3 [sec] for escaping critical point of asynchronous remoteconf.\n\n");
+		sleep 3;
+		exec "$cmd";
+#		prErrExit("Exec failed for <$cmd>"); 
+	}
+
+	$pid_vrasync=$localExecutingPid_vrasync;
+	close(COUT_VRASYNC);
+	prTrace("vRemoteAsync()... $cmd");
+
+        prLog("<A NAME=\"vRemoteAsync$pid_vrasync\"></A>");
+        prLog("<A HREF=\"#vRemoteAsyncWait$pid_vrasync\">Link to remote control log</A>");
+
+	prLog("</PRE>\n</TD></TR>");
+	$vLogStat=$vLogStatCloseRow;
+        return 0;
+}
+
+
+
+########################################################################
+sub
+vRemoteAsyncWait()
+{
+	prLog("</TD>\n</TR>") if($vLogStat==$vLogStatOpenRow);
+	my $timestr=getTimeStamp();
+	prLogHTML("<TR VALIGN=\"TOP\"><TD>$timestr</TD>\n");
+	prLogHTML("<TD>\nvRemoteAsyncWait()\n");
+
+        if($vrasync_state ne RUNNING){
+		prErrExit("vRemoteAsyncWait() called without vRemoteAsync()"); 
+	}
+        undef $vrasync_state;
+
+	prLogHTML("<PRE>");
+        prLog("<A NAME=\"vRemoteAsyncWait$pid_vrasync\"></A>");
+        prLog("<A HREF=\"#vRemoteAsync$pid_vrasync\">Link to remote control start point</A>");
+
+	$stdout = '';
+	while( <PIN_VRASYNC> ) {
+		$stdout .= $_;
+		chomp;
+		s/\r//g;
+		s/&/&amp;/g;
+		s/"/&quot;/g;
+		s/</&lt;/g;
+		s/>/&gt;/g;
+		prLog("$_");
+		prOut("$_") if $VLog == 0;
+	}
+	close(PIN_VRASYNC);
+        
+	while($ExecutingPid_vrasync){};
+	my $status = $ChildStatus_vrasync;
+        if($ChildPid_vrasync != $pid_vrasync) {
+	    prErrExit("Unknown child died $pid_vrasync $ChildPid_vrasync (status=$status)!!");
+        }
+
+	if($status & 0xff) { # died by signal
+		prErrExit("Catch signal <$cmd>");
+	}
+	my $rc=($status >> 8);
+	if($rc == $exitNS) {
+		$_ = "NUT($NutDef{System}) does not support the functionality";
+		prLog($_);
+		prOut($_) if $VLog == 0;
+		exit $exitNS;
+	}
+	prLog("</PRE>\n</TD></TR>");
+	$vLogStat=$vLogStatCloseRow;
+	$rc;
+}
+
+
+
+########################################################################
+# Create Intermediate File for Packet Definition 
+########################################################################
+sub
+vCPP(;@)
+{
+	my (
+	@opts		# pre-proceser options
+    ) = @_;
+	my $PktCompiler="cc -E -x c-header";
+	my $baseopt="-I./ -I./ -I$V6Root/include/";
+	my $deffile=$PktDef;
+
+	prTrace("vCPP($deffile)");
+	prTrace("\$NoStd is $NoStd");
+	if (!$NoStd) {
+		my $includepath = searchPath("./:$V6Root/include/",'std.def');
+		$baseopt .= " -include $includepath"
+	}
+
+	if(!$PktImd){
+		if($KeepImd){
+			$PktImd = '/tmp/' . basename($deffile) . '.i';
+		} else {
+			do { $PktImd = tmpnam() }
+				until sysopen(FH, $PktImd, O_RDWR|O_CREAT|O_EXCL);
+			close FH;
+		}
+	}
+
+	my $cmd = "$PktCompiler $baseopt @opts $deffile > $PktImd";
+	prTrace("Creating Intermediate file: $cmd");
+	my ($sts) = execCmd($cmd);
+	if( $sts!=0 ){
+		prErrExit("$cmd failed status:$sts\n");
+	}
+}
+
+
+
+########################################################################
+# Replace the command line specified Packet Definition File
+########################################################################
+sub
+vNewPacketFile($;@)
+{
+	my (
+	$pktfile,	# Packet definition file
+	@opts		# Pre-processor options
+	) = @_;
+
+	vOriginalPacketFile();
+	$OriginalPktDef=$PktDef;
+	$OriginalPktImd=$PktImd;
+
+	$PktDef=$pktfile;
+	$PktImd='';
+	vCPP(@opts, $CppOption);
+
+	# Rebuild the base arguments (which specifies the file)
+	baseArgs();
+}
+
+
+
+########################################################################
+# Restore the command line specified Packet Definition File
+########################################################################
+sub
+vOriginalPacketFile()
+{
+	if (defined $OriginalPktDef) {
+		if( $KeepImd ) {
+			prOut("Keep packet ImdFile <$PktImd>");
+		}
+		else {
+			unlink("$PktImd");
+		}
+		$PktDef=$OriginalPktDef;
+		$PktImd=$OriginalPktImd;
+		undef $OriginalPktDef;
+		undef $OriginalPktImd;
+
+		# Rebuild the base arguments (which specifies the file)
+		baseArgs();
+	}
+}
+
+
+
+sub
+vDHGen($$)
+{
+	my (
+	$prime,
+	$gen
+	) = @_;
+
+	my $cmd= "$ToolDir/dhgen -p $prime -g $gen";
+	my @lines; my %ret; my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vDHGen() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vDHGen2($$)
+{
+	my (
+	$prime,
+	$gen
+	) = @_;
+
+	my $cmd= "$ToolDir/dhgen -@ -p $prime -g $gen";
+	my @lines; my %ret; my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vDHGen2() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vDHComp($$$$$)
+{
+	my (
+	$prime,
+	$gen,
+	$pubkey,
+	$privkey,
+	$recvpubkey
+	) = @_;
+
+	my $cmd= "$ToolDir/dhcomp -p $prime -g $gen -x $pubkey -y $privkey -z $recvpubkey";
+	my @lines; my %ret; my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vDHComp() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vDHComp2($$$$$)
+{
+	my (
+	$prime,
+	$gen,
+	$pubkey,
+	$privkey,
+	$recvpubkey
+	) = @_;
+
+	my $cmd= "$ToolDir/dhcomp -p $prime -@ -g $gen -x $pubkey -y $privkey -z $recvpubkey";
+	my @lines;my %ret; my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vDHComp2() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vPRFComp($$$)
+{
+	my ($algorithm, $key, $msg) = @_;
+
+	my $cmd= "$ToolDir/prfcomp -a $algorithm -k $key -m $msg";
+	my @lines;my %ret;my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vPRFComp() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vIVComp($$)
+{
+	my ($algorithm, $msg) = @_;
+
+	my $cmd= "$ToolDir/ivcomp -a $algorithm -m $msg";
+	my @lines;my %ret;my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vIVComp() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vX509dec($)
+{
+	my ($certification) = @_;
+
+	my $cmd= "$ToolDir/x509dec -d $certification";
+	my @lines;my %ret;my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vX509dec() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vSigSign($$)
+{
+	my ($key, $msg) = @_;
+
+	my $cmd= "$ToolDir/sigcomp -k $key -m $msg";
+	my @lines;my %ret;my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vSigSign() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vSigVrfy($$$)
+{
+	my ($key, $msg, $signature) = @_;
+
+	my $cmd= "$ToolDir/sigcomp -k $key -m $msg -s $signature";
+	my @lines;my %ret;my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vSigVrfy() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+sub
+vFile2Hex($)
+{
+	my ($file) = @_;
+
+	my $cmd= "$ToolDir/file2hex $file";
+	my @lines;my %ret;my $status;
+	($status, @lines) = execCmd($cmd);
+	%ret = getField(@lines);
+	$ret{status}=$status;
+	if($ret{status}){
+		prErrExit("vFile2Hex() return status=$ret{status}\n");
+	}
+	%ret;
+}
+
+
+
+#--------------------------------------------------------------#
+# void addMD5(char *, char *, char *);                         #
+#--------------------------------------------------------------#
+sub
+addMD5($$$)
+{
+	my($seq, $def, $log) = @_;
+
+	my @md5 = ();
+
+	local(*LOG);
+
+	push(@md5, getMD5($seq));
+	push(@md5, getMD5($def));
+	push(@md5, getMD5($log));
+
+	unless(open(LOG, ">> $log")) {
+		return;
+	}
+
+	for(my $d = 0; $d <= $#md5; $d ++) {
+		print LOG "<!-- $md5[$d] -->\n";
+	}
+
+	close(LOG);
+
+	return;
+}
+
+
+
+#--------------------------------------------------------------#
+# char *getMD5(char *);                                        #
+#--------------------------------------------------------------#
+sub
+getMD5($)
+{
+	my($file) = @_;
+
+	use Digest::MD5;
+
+	local(*FILE);
+
+	unless(open(FILE, $file)) {
+		return('');
+	}
+
+	my $ctx = Digest::MD5->new;
+	$ctx->addfile(*FILE);
+	my $digest = $ctx->hexdigest;
+
+	close(FILE);
+
+	return($digest);
+}
+
+
+
+########################################################################
+#	parse Args
+#
+#	Getopt::Long module is used for argument parse
+#-----------------------------------------------------------------------
+sub
+parseArgs()
+{
+	use Getopt::Long;
+	$Getopt::Long::ignorecase=0;
+	my $optStat = GetOptions(
+		"tn|TnDef=s",
+		"nut|NutDef=s",
+		"pkt|PktDef=s",
+		"l|LogLevel=i",
+		"ti|TestTitle=s",
+		"log|LogFile=s",
+		"h|Help",
+		"trace",	# for debug of this, output trace 
+		"keepImd",	# for debug of this, keep intermidiate file 
+		"v|VLog",       # print STDOUT log file
+		"nostd|NoStd",
+		"vroot|V6Root=s",
+		"remote=s",
+		"cpp=s",
+	);
+	printUsage() if( $opt_h || !$optStat );
+
+	$V6Root = $opt_vroot || $ENV{'V6EVALROOT'} || "/usr/local/v6eval/" ;
+	$NoStd	= $opt_nostd	? $opt_nostd	: 0;
+	$VLog   = $opt_v     ? $opt_v   : 0;
+#	$Trace	    = ($opt_trace==1);
+#	$KeepImd    = ($opt_keepImd==1);
+	$Trace	    = $opt_trace ? $opt_trace : 0;
+	$KeepImd    = $opt_keepImd ? $opt_keepImd : 0;
+	$TnDef  = $opt_tn    ? $opt_tn  : "tn.def";
+	$TnDef  = searchPath("${SeqDir}:./:${V6Root}/etc/", $TnDef); 
+	$NutDef = $opt_nut   ? $opt_nut : "nut.def";
+	$NutDef  = searchPath("${SeqDir}:./:${V6Root}/etc/", $NutDef); 
+	$PktDef = $opt_pkt   ? $opt_pkt : "${SeqDir}packet.def";
+	$TestTitle= $opt_ti   ? $opt_ti : "${SeqName}";
+	$LogFile= $opt_log   ? $opt_log : "${SeqDir}${SeqName}.log";
+	$LogLevel   = $opt_l     ? $opt_l   : 1;
+	$DbgLevel   = $opt_d     ? $opt_d   : 0;
+	$RemoteOption = $opt_remote || "";
+	$CppOption = $opt_cpp || "";
+
+	checkFile( $PktDef );
+}
+
+
+
+########################################################################
+#	Set base args for commands
+#-----------------------------------------------------------------------
+sub
+baseArgs()
+{
+	$BaseArgs = "-t $TnDef -n $NutDef -p $PktImd -l$LogLevel";
+	$BaseArgs.= " $ENV{'V6EVALOPT'}" if(defined($ENV{'V6EVALOPT'}));
+}
+
+
+
+########################################################################
+#       Search Path
+#-----------------------------------------------------------------------
+sub
+searchPath($$)
+{
+	my(
+        $path,           # path  
+        $filename        # filename for search
+    ) = @_; 
+        my $fullname="";
+        if($filename =~ m!.*/.+!) {
+                $fullname=$filename;
+        }       
+	my @paths=split(/:/,($path));
+        foreach(@paths) {
+                my $tmpname=$_ . "/" . $filename;
+                #my $tmpname=$_ .  $filename;
+                if($fullname eq "") {
+                        $fullname=$tmpname if(-r $tmpname);
+                }       
+        }
+	prErrExit("$filename don't exist in the path or cannot read in ``$path''\n") if($fullname eq "");       
+        $fullname;
+}    
+
+
+
+########################################################################
+#	Check file if it is readble...
+#-----------------------------------------------------------------------
+sub
+checkFile($)
+{
+	my(
+	$file		# command string
+    ) = @_;
+	unless( -r "$file" ){
+		prErrExit("$file not exist or cannot read\n");
+	}
+}
+
+
+
+########################################################################
+#	Get Each Field Value
+#-----------------------------------------------------------------------
+sub
+getField(@)
+{
+	my (
+	@lines
+    ) = @_;
+
+	my %rc;
+
+	foreach( @lines ){
+		if(/^\s*((\|\s)*)(\S*)\s*\(\S*\)/) {
+			my $block=$3;
+			if($block eq 'Frame_Ether'){undef %rc;};
+			if($block eq 'DHGen_Results'){undef %rc;};
+			if($block eq 'DHComp_Results'){undef %rc;};
+			if($block eq 'PRFComp_Results'){undef %rc;};
+			if($block eq 'IVComp_Results'){undef %rc;};
+#			undef %rc if($block eq 'Frame_Ether');
+	    		$curDepth=length($1)/2;
+	    		while(@Struct>$curDepth) {
+				pop @Struct;
+			}
+			push (@Struct,$block);
+			my $xstruct=join(".",@Struct);
+			my $num=++$rc{"$xstruct#"};
+			if($num>1) {
+				pop @Struct;
+				$block.="$num"; # xxx
+				push (@Struct,$block);
+	    		}
+			pop @Struct;
+			if (@Struct!=0) {
+				my $name=join(".",@Struct);
+				$rc{"$name"}.= " " if ($rc{"$name"});
+				$rc{"$name"}.= "$block";
+#				print "Struct: ($name) = ($rc{$name})\n";
+			}
+	    		push (@Struct,$block);
+		}
+		elsif( /^\s*((\|\s)+)(\S*)\s+=\s+(\S*)/ ) {
+			my $name=$3;
+			my $member=join(".",@Struct);
+			$member.=".$name";
+			$rc{"$member#"}++;
+			$name.="_$rc{\"$member#\"}" if($rc{"$member#"}>1); # xxx
+			$member = join(".",@Struct);
+			$member.=".$name";
+			$xstruct=join(".",@Struct);
+			$rc{"$xstruct"}.=" " if($rc{"$xstruct"});
+			$rc{"$xstruct"}.="$name";
+			$rc{"$member"}=$4;
+#			print "Struct: ($xstruct) = $rc{$xstruct}\n";
+#			print "Value : ($member) = $rc{$member}\n";
+		}
+		else {
+#			print "not reverse output\n";
+		}
+	}
+	%rc;
+}
+
+
+
+########################################################################
+#	Get Each Field Value
+#-----------------------------------------------------------------------
+sub
+getField2(@)
+{
+	my (@lines) = @_;
+
+	my %rc = ();
+	my @Struct = ();
+	my $Xmember = '';
+
+	foreach(@lines){
+		if($_ =~ /^\s*((\|\s)*)(\S*)\s*\(\S*\)/) {
+			my $Xmember = '';
+
+			my $block = $3;
+			if($block eq 'Frame_Ether') {
+				%rc = ();
+				@Struct = ();
+			}
+
+			if($block eq 'DHGen_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			if($block eq 'DHComp_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			if($block eq 'PRFComp_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			if($block eq 'IVComp_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			my $curDepth = length($1)/2;
+	    		while($#Struct >= $curDepth) {
+				pop(@Struct);
+			}
+
+			push(@Struct, $block);
+
+			my $xstruct = join('.', @Struct);
+
+			unless(defined($rc{"$xstruct#"})) {
+				$rc{"$xstruct#"} = 0;
+			}
+
+			my $num = ++ $rc{"$xstruct#"};
+
+			if($num > 1) {
+				pop(@Struct);
+				$block .= "$num"; # xxx
+				push(@Struct, $block);
+			}
+
+			pop(@Struct);
+
+			if($#Struct >= 0) {
+				my $name = join('.', @Struct);
+				$rc{"$name"} .= " " if(defined($rc{"$name"}));
+				$rc{"$name"} .= "$block";
+			}
+
+			push(@Struct, $block);
+		} elsif($_ =~ /^\s*((\|\s)+)(\S*)\s+=\s+(.*)$/) {
+			my $name = $3;
+			my $member = join('.', @Struct);
+			$member .= ".$name";
+
+			unless(defined($rc{"$member#"})) {
+				$rc{"$member#"} = 0;
+			}
+
+			$rc{"$member#"}++;
+
+			$name .= "_$rc{\"$member#\"}"
+				if($rc{"$member#"} > 1); # xxx
+
+			$member  = join('.', @Struct);
+			$member .= ".$name";
+
+			$xstruct = join('.', @Struct);
+			$rc{"$xstruct"} .= ' ' if(defined($rc{"$xstruct"}));
+			$rc{"$xstruct"} .= "$name";
+
+			my $Xdata = $4;
+
+			if($Xdata =~ /^[0-9a-f]{8}\s([0-9a-f]{8}\s{1,2})*[0-9a-f]{1,8}$/) {
+				$Xdata =~ s/\s//g;
+			}
+
+			$rc{"$member"} = $Xdata;
+
+			$Xmember = $member;
+		} elsif($_ =~ /^\s{2}(.*)$/) {
+			my $Xdata = $1;
+
+			if($Xdata =~ /^[0-9a-f]{8}\s([0-9a-f]{8}\s{1,2})*[0-9a-f]{1,8}$/) {
+				$Xdata =~ s/\s//g;
+			} else {
+				$Xdata .= "\n";
+			}
+
+			if(($Xmember ne '') && (defined($rc{$Xmember}))) {
+				$rc{$Xmember} .= $Xdata;
+			}
+		} else {
+		}
+	}
+
+	return(%rc);
+}
+
+
+
+########################################################################
+#	Get Each Field Value
+#-----------------------------------------------------------------------
+sub
+getField3(@)
+{
+	my (@lines) = @_;
+
+	my %rc = ();
+	my @Struct = ();
+	my $Xmember = '';
+
+	foreach(@lines){
+		if($_ =~ /^\s*((\|\s)*)(\S*)\s*\(\S*\)/) {
+			my $Xmember = '';
+
+			my $block = $3;
+			if($block eq 'Frame_Ether') {
+				%rc = ();
+				@Struct = ();
+			}
+
+			if($block eq 'DHGen_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			if($block eq 'DHComp_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			if($block eq 'PRFComp_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			if($block eq 'IVComp_Results'){
+				%rc = ();
+				@Struct = ();
+			};
+
+			my $curDepth = length($1)/2;
+	    		while($#Struct >= $curDepth) {
+				pop(@Struct);
+			}
+
+			push(@Struct, $block);
+
+			my $xstruct = join('.', @Struct);
+
+			unless(defined($rc{"$xstruct#"})) {
+				$rc{"$xstruct#"} = 0;
+			}
+
+			my $num = ++ $rc{"$xstruct#"};
+
+			if($num > 1) {
+				pop(@Struct);
+				$block .= "$num"; # xxx
+				push(@Struct, $block);
+			}
+
+			pop(@Struct);
+
+			if($#Struct >= 0) {
+				my $name = join('.', @Struct);
+				$rc{"$name"} .= " " if(defined($rc{"$name"}));
+				$rc{"$name"} .= "$block";
+			}
+
+			push(@Struct, $block);
+		} elsif($_ =~ /^\s*((\|\s)+)(\S*)\s+=\s+(.*)$/) {
+			my $name = $3;
+			my $member = join('.', @Struct);
+			$member .= ".$name";
+
+			unless(defined($rc{"$member#"})) {
+				$rc{"$member#"} = 0;
+			}
+
+			$rc{"$member#"}++;
+
+			$name .= "_$rc{\"$member#\"}"
+				if($rc{"$member#"} > 1); # xxx
+
+			$member  = join('.', @Struct);
+			$member .= ".$name";
+
+			$xstruct = join('.', @Struct);
+			$rc{"$xstruct"} .= ' ' if(defined($rc{"$xstruct"}));
+			$rc{"$xstruct"} .= "$name";
+
+			my $Xdata = $4;
+
+			if($Xdata =~ /^[0-9a-f]{8}\s([0-9a-f]{8}\s{1,2})*[0-9a-f]{1,8}$/) {
+				$Xdata =~ s/\s//g;
+			}
+
+			$rc{"$member"} = $Xdata;
+
+			$Xmember = $member;
+		} elsif($_ =~ /^\s*((\|\s)+)\s{2}(.*)$/) {
+		### add to getField2
+			my $Xdata = $3;
+
+			if($Xdata =~ /^[0-9a-f]{8}\s([0-9a-f]{8}\s{1,2})*[0-9a-f]{1,8}$/) {
+				$Xdata =~ s/\s//g;
+			} else {
+				$Xdata .= "\n";
+			}
+
+			if(($Xmember ne '') && (defined($rc{$Xmember}))) {
+				$rc{$Xmember} .= $Xdata;
+			}
+		} elsif($_ =~ /^\s{2}(.*)$/) {
+			my $Xdata = $1;
+
+			if($Xdata =~ /^[0-9a-f]{8}\s([0-9a-f]{8}\s{1,2})*[0-9a-f]{1,8}$/) {
+				$Xdata =~ s/\s//g;
+			} else {
+				$Xdata .= "\n";
+			}
+
+			if(($Xmember ne '') && (defined($rc{$Xmember}))) {
+				$rc{$Xmember} .= $Xdata;
+			}
+		} else {
+		}
+	}
+
+	return(%rc);
+}
+
+
+
+########################################################################
+#	module initialization
+#	
+#	This is calld at the start time of the script.
+#	Actually called from BEGIN{} of this module.
+#	do some preparation procedure for using this module.
+#-----------------------------------------------------------------------
+sub
+initialize()
+{ 
+	#---------------------------------------------------------------
+	# Get script path
+	#---------------------------------------------------------------
+	($SeqName,$SeqDir,$SeqSuffix) = fileparse($0,'.seq');
+
+	#---------------------------------------------------------------
+	# Parse args 
+	#---------------------------------------------------------------
+        $CommandLine = "$0 @ARGV";  # keep commandline for logging
+	my @ARGVtmp = @ARGV;
+	parseArgs();
+	if(defined($ENV{'V6EVAL_WITH_KOI'})) {
+		@ARGV = @ARGVtmp;
+	}
+
+	#---------------------------------------------------------------
+	# Setup initial value
+	#---------------------------------------------------------------
+	$ToolDir=	"$V6Root/bin";
+	$SocketPath=	"/tmp";
+
+	#---------------------------------------------------------------
+	# Set Version value
+	#---------------------------------------------------------------
+	getVersion();
+
+	#---------------------------------------------------------------
+	# Open log file
+	#---------------------------------------------------------------
+	unless(defined($ENV{'V6EVAL_WITH_KOI'})) {
+	open(LOG, ">$LogFile") || 
+		prErrExit("Can not create $LogFile for logging ($!)");
+	}
+	prTrace("Log will be outputed to  $LogFile");
+
+	#---------------------------------------------------------------
+	# print Banner 
+	#---------------------------------------------------------------
+	prLog("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\"".
+	      "\"http://www.w3c.org/TR/REC-html40/strict.dtd\">");
+	prLog("<HTML>\n<HEAD>");
+	prLog("<TITLE>IPv6 Conformance Test Report</TITLE>");
+	prLog("<META NAME=\"GENERATOR\" CONTENT=\"TAHI IPv6 Conformance Test Kit\">");
+	prLog("</HEAD>\n");
+	prLog("<BODY BGCOLOR=\"#F0F0F0\">");
+
+	prLog("<H1>Test Information</H1>");
+	prLog("<TABLE BORDER=1>");
+	printBanner();
+
+	#---------------------------------------------------------------
+	# Check TN definition and setup environment
+	#---------------------------------------------------------------
+	# double entry not check yet. (OVERWRITE)
+	prTrace("Looking up $TnDef");
+	open( FILE, "$TnDef") || prErrExit("Can not open $TnDef");
+	while( <FILE> ){
+		next if(/^\s*$/ || /^#/);	# remove comment
+		chomp;
+		if( /^(\S+)\s+(.*)/ )		{
+		    $TnDef{$1} = $2;
+		}
+		   if( /^(socketpath)\s+(\S+)/  ) { $SocketPath=$2; }
+		elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-f]{1,2}:){5}[0-9a-f]{1,2})/){
+			push(@TnIfs,$1);
+			push(@TnSos,$2);
+			$TnDef{$1."_device"}=$2;
+			$TnDef{$1."_addr"}=$3;
+		}
+		elsif( /^(RemoteDevice)\s+(\S+)/   ||
+		       /^(RemoteDebug)\s+(\S+)/    ||
+		       /^(RemoteIntDebug)\s+(\S+)/ ||
+		       /^(RemoteLog)\s+(\S+)/      ||
+		       /^(RemoteSpeed)\s+(\S+)/    ||
+		       /^(RemoteLogout)\s+(\S+)/   ||
+		       /^(RemoteMethod)\s+(\S+)/   ||
+		       /^(RemoteCuPath)\s+(\S+)/   ||
+		       /^(filter)\s+(\S+)/){
+
+		}
+		else{ prOut("Unknown line in $TnDef: $_\n");}
+		prTrace("TN : $_");
+	}
+	close FILE;
+	#---------------------------------------------------------------
+	# remove unix domain sockets
+	#---------------------------------------------------------------
+	my $soname;
+	foreach $soname (@TnSos) {
+		prTrace("TN : unlink $SocketPath/$soname");
+		unlink("$SocketPath/$soname");
+	}
+
+	#---------------------------------------------------------------
+	# Check NUT definition and setup environment
+	#---------------------------------------------------------------
+	prTrace("Looking up $NutDef");
+	open( FILE, "$NutDef") || prErrExit("Can not open $NutDef");
+	while( <FILE> ){
+		next if(/^\s*$/ || /^#/);	# remove comment
+		chomp;
+		if( /^(\S+)\s+(.*)/ )		{
+		    $NutDef{$1} = $2;
+		}
+		if( /^(System)\s+(.*)/              ||
+		    /^(TargetName)\s+(.*)/	    ||
+		    /^(HostName)\s+(.*)/            ||
+		    /^(Type)\s+(.*)/         ){
+		    prLog("<TR><TD>$1</TD><TD>$2</TD></TR>");
+		} elsif(
+		    /^(User)\s+(\S+)/               ||
+		    /^(Password)\s+(\S+)/    ){
+		}
+		elsif( /^(Link[0-9]+)\s+(\S+)\s+(([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2})/){
+			push(@NutIfs,$1);
+			$NutDef{$1."_device"}=$2;
+			$NutDef{$1."_addr"}=$3;
+		}
+		else{ prOut("Unknown line in $NutDef: $_");}
+		prTrace("NUT: $_");
+	}
+	close FILE;
+	prLog("</TABLE>");
+	#---------------------------------------------------------------
+	# Fork pktbuf for necessary interface
+	#---------------------------------------------------------------
+	my $cmdBase = "$ToolDir/pktbuf -t $TnDef -i ";
+	my $dumpCmd = "tcpdump -n -s 2000 -x -e";
+	my $ifname; my $log;
+	foreach $ifname (@TnIfs) {
+		if( grep {$ifname eq $_} @NutIfs ){
+			$cmd="$cmdBase $ifname";
+			$log="/tmp/pktbuf_$ifname.log";
+			push(@PktbufPids, forkCmd($cmd,$log) );
+			# run tcpdump
+			my($if)=$TnDef{$ifname."_device"};
+			$cmd="$dumpCmd ".
+			    "-i $if ".
+			    "-w $LogFile.$ifname.dump ";
+			unless(defined($ENV{'V6EVAL_WITH_KOI'})) {
+			push(@TcpdumpPids, forkCmdWoCheck($cmd,'/dev/null') );
+			}
+		}
+	}
+	if(@PktbufPids==0) {
+		prErrExit("No interface to use commonly\n".
+				"TN : @TnIfs\nNUT: @NutIfs");
+	}
+
+	vCPP($CppOption);
+	undef $OriginalPktDef;
+	undef $OriginalPktImd;
+
+	#---------------------------------------------------------------
+	# Setup global value for convinience
+	#---------------------------------------------------------------
+	baseArgs();
+
+	prLog("<HR>");
+	prLog("<H1>Test Sequence Execution Log</H1>");
+	prLog("<TABLE BORDER=1>");
+	my $timestamp=getTimeStamp();
+	prLog("<TR><TD>$timestamp</TD><TD>Start</TD></TR>");
+	$vLogStat=$vLogStatCloseRow;
+}
+
+
+
+########################################################################
+#	Get time string
+#
+#	If more detailed format is required, you may switch to use
+#	prepared perl modlue.
+#-----------------------------------------------------------------------
+sub
+getTimeStamp()
+{
+	my ($sec,$min,$hour) = localtime;
+	my $timestr = sprintf('%02d:%02d:%02d', $hour, $min, $sec);
+	$timestr;
+}
+
+
+
+sub
+getDateString()
+{
+	my ($sec,$min,$hour,$day,$mon,$year) = localtime;
+	my $datestr = sprintf '%02d/%02d/%02d %02d:%02d:%02d',
+			$year+1900, $mon+1, $day, $hour, $min, $sec;
+	$datestr;
+}
+
+
+
+sub
+getTimeString($)
+{
+	my (
+	$epoch
+    ) = @_;
+	my ($sec,$min,$hour) = localtime($epoch);
+	my $timestr = sprintf('%02d:%02d:%02d', $hour, $min, $sec);
+	$timestr;
+}
+
+
+
+########################################################################
+#	Get Version
+#
+#          set following variables
+#          $ToolVersion: version number of v6eval tool
+#          $TestVersion: version number of test
+#-----------------------------------------------------------------------
+sub
+getVersion()
+{
+	my $dummy;
+
+	($dummy, $ToolVersion) = ('$Name: REL_3_0_12 $' =~ /\$(Name): (.*) \$/ );
+	if(!$ToolVersion){
+		$ToolVersion=   'undefined';
+	}
+	if (defined($TestVersion)) { # it should be defined in *.seq file.
+        	($dummy, $TestVersion) = ($TestVersion =~ /\$(Name): (.*) \$/  );
+	}else{
+		$TestVersion=   'undefined';
+	}
+}
+
+
+
+########################################################################
+#	Print log banner
+#-----------------------------------------------------------------------
+sub
+printBanner()
+{
+	my $datestr = getDateString();
+	prLog("<TR><TD>Title</TD><TD>$TestTitle</TD></TR>");
+	prLog("<TR><TD>CommandLine</TD><TD>$CommandLine</TD></TR>");
+	prLog("<TR><TD>TestVersion</TD><TD>$TestVersion</TD></TR>");
+	prLog("<TR><TD>ToolVersion</TD><TD>$ToolVersion</TD></TR>");
+	prLog("<TR><TD>Start</TD><TD>$datestr</TD></TR>");
+	prLog("<TR><TD>Tn</TD><TD>$TnDef</TD></TR>");
+	prLog("<TR><TD>Nu</TD><TD>$NutDef</TD></TR>");
+	prLog("<TR><TD>Pkt</TD><TD>$PktDef</TD></TR>");
+}
+
+
+
+########################################################################
+#	Print usage and exit
+#-----------------------------------------------------------------------
+sub
+printUsage()
+{
+	prOut("Usage: $PROGRAM_NAME [-h]"    );
+	prOut("       [-tn  tn_def_file]"   );
+	prOut("       [-nut nut_def_file]"   );
+	prOut("       [-pkt pkt_def_file]");
+	prOut("       [-log log_file] [-l log_level]");
+	prOut("       [-v]"	);
+	prOut("       [-nostd]"	);
+	prOut("       [-vroot default_directory]");
+	exit;
+}
+
+
+
+########################################################################
+#	Subroutine used commonly who wants to invoke pktctl
+#
+#	This calls the execCmd() internally.
+#	If the $funcname is 'vDump', then indicate execCmd() to
+#	output stdout information to the STDOUT as soon as possible
+#	without buffering to array value which returnd by execCmd().
+#	This is for not cosuming amount of memmorry for the array
+#	in case of many information is outputed by pktctl command.
+#-----------------------------------------------------------------------
+sub
+execPktctl($$@;$)
+{
+	my (
+	$funcname,	# the name of the fuction who call me 
+	$ifname,	# target interface name
+	@arg		# arguments
+    ) = @_;
+	my $cmd= "$ToolDir/pktctl -t $TnDef";
+	$cmd.=" -i $ifname" if $ifname;
+	$cmd.=" @arg";
+
+	my $timestr=getTimeStamp();
+	if($vLogStat==$vLogStatOpenRow){
+		prLog("</TD>\n</TR>");
+	}
+	prLog("<TR VALIGN=\"TOP\"><TD>$timestr</TD><TD>$funcname ($ifname)<BR>");
+	prOut("$funcname ($ifname)");
+	my @ret = execCmd($cmd, ($funcname eq 'vDump') );
+
+	if($ret[0]){		
+		prErrExit("$funcname($ifname) return status=$ret[0]\n");
+	}
+	prLog("</TD></TR>\n");
+	$vLogStat=$vLogStatCloseRow;
+	@ret;
+}
+
+
+
+########################################################################
+#	Subroutine used commonly who wants to invoke pktxxx command 
+#
+#	Execute command and get its sdtout and stderr information
+#	concurrently. This assumes the format of the output is 
+#	prefixed with the following keywords.
+#	log:	treat it as log information
+#	err:	treat it as error information
+#	std:	treat it as the information outputed from stdout
+#
+#	This returns array, the first element indicates the exit code
+#	of the command. And the next to end of the array indicates
+#	standard output devided into pieaces by '\n'.
+#
+#	In case of command execution failure, call exit.
+#-----------------------------------------------------------------------
+sub
+execCmd($;$)
+{
+	my (
+	$cmd,		# command string
+	$std_redirect	# if set, 'std:' message will be output here.
+    ) = @_;
+	my $type; my $line; my $pid; my $localExecutingPid;
+	my @ret;
+
+	pipe PIN,COUT;
+	$ChildPid = 0;
+	unless(defined($ExecutingPid = $localExecutingPid = fork)){
+		$localExecutingPid=0;
+		prErrExit("Fork failed for <$cmd>"); 
+        }
+	unless( $localExecutingPid ) { # Children
+		open(STDOUT, ">&COUT");
+		open(STDERR, ">&COUT");
+		close(PIN);
+		close(STDIN);
+		# should close if any explicit open files exit
+#		exec "$cmd; exit $?;";
+		exec "$cmd;";
+#		prErrExit("Exec failed for <$cmd>"); 
+	}
+
+	$pid=$localExecutingPid;
+	close(COUT);
+	prTrace("execCmd()... $cmd");
+
+	while( <PIN> ) {
+		chomp;
+		$allmsg=$_;
+		($type, $line) = /^(\w\w\w):(.*)$/;
+		   if($type eq 'log') {
+#			prLog("  $line");
+			push(@ret, $line);
+			prTrace("execCmd()ret... log:$line");
+		}
+        	elsif($type eq 'err') { prErr("$line");}
+		elsif($type eq 'std') { 
+			$std_redirect ? prOut($line) : push(@ret, $line);
+			prTrace("execCmd()ret... std:$line");
+		}else {
+			prLog("  dbg: $allmsg",100);
+		}
+    	}
+	close(PIN);
+	while($ChildPid == 0){};
+	my $status = getChildStatus();
+	prErrExit("Unknown child died $pid $ChildPid (status=$status)!!") if($ChildPid != $pid);
+	if( $status & 0xff ) {	# died by signal
+		prErrExit("Catch signal <$cmd>");
+	}
+	unshift(@ret, ($status>>8)); # command exit code
+	@ret;
+}
+
+
+
+########################################################################
+#	Subroutine used to detach pktbuf process 
+#
+#	Do fork and exec $command,  and returns $pid
+#-----------------------------------------------------------------------
+sub
+forkCmd($$)
+{
+	my (
+	$cmd,	# command string
+	$log	# log file
+    ) = @_;
+	my $pid;
+	($arg0) = split ' ' ,$cmd;
+
+	pipe PIN,COUT;
+	unless(defined($pid = fork)){
+		prErrExit("Fork failed for <$cmd>"); 
+        }
+	unless( $pid ) { # Children
+		# should close if any explicit open files exit
+		close(PIN);
+		open(STDOUT, ">&COUT");
+		open(STDERR, ">$log");
+		exec "$cmd";
+#		print COUT "err:Exec fail for $arg0 ($!)\n";
+#		prErrExit("Exec failed for <$opt>"); 
+#		prErrExit("Exec failed for <$cmd>"); 
+	}
+	close(COUT);
+	prTrace("forkCmd()... $cmd");
+	my $ready=0;
+	while( <PIN> ) {	# wait until socket ready
+		chomp;
+		($type, $line) = /^(\w\w\w):(.*)$/;
+		if($_ eq 'std: ready'){
+			$ready=1;
+			last;
+		} elsif ($type eq 'err') { prErr("$line");}
+    	}
+	close(PIN);
+	unless($ready){
+		prErrExit("Could not get ready response from <$arg0>");
+	}
+	$pid;
+}
+
+
+
+sub
+forkCmdWoCheck($$)
+{
+	my (
+	$cmd,	# command string
+	$log	# log file
+    ) = @_;
+	my $pid;
+	($arg0) = split ' ' ,$cmd;
+
+	pipe PIN,COUT;
+	unless(defined($pid = fork)){
+		prErrExit("Fork failed for <$cmd>"); 
+        }
+	unless( $pid ) { # Children
+		# should close if any explicit open files exit
+		close(PIN);
+		open(STDOUT, ">&COUT");
+		open(STDERR, ">$log");
+		exec "$cmd";
+#		print COUT "err:Exec fail for $arg0 ($!)\n";
+#		prErrExit("Exec failed for <$opt>"); 
+#		prErrExit("Exec failed for <$cmd>"); 
+	}
+	close(COUT);
+	close(PIN);
+	prTrace("forkCmdWoCheck()... $cmd");
+	$pid;
+}
+
+
+
+########################################################################
+#	To handle log request.
+#
+#	If $level is specified, this will be compare with $LogLevel,
+#	the outer level specified by '-l' arguments at the script invocaiton.
+#	If it is less or equal,	than the message will be output.
+#	So, value 0 is the most strong request, In case of this, 
+#	the message will be logged even if any value is specified 
+#	for $LogLevel.
+#	In case of omittion, it is treated as 0. (always logged)
+#
+#	If you have some message wants to output in case LogLevel is 2
+#	but not for 1, you shoud specify $level here as 1.
+#
+#------------------------------------------------------------------------
+sub
+prLog($;$)
+{
+	my (
+	$message,	# message for logging
+	$level		# log level, this will be compared with the 
+			# outer level specifid by '-l' arguments
+    ) = @_;
+	$level=0 unless defined($level);  # default 0;
+	#prTrace("LOG $level $LogLevel");
+	unless(defined($ENV{'V6EVAL_WITH_KOI'})) {
+	print LOG "$message\n" if($level<=$LogLevel);
+	}
+	prOut "$message\n" if($VLog && $level<=$LogLevel);
+}
+
+
+
+#------------------------------------------------------------------------
+sub
+prLogHTML($;$)
+{
+	my (
+	$message,	# message for logging
+	$level		# log level, this will be compared with the 
+			# outer level specifid by '-l' arguments
+    ) = @_;
+	$level=0 unless defined($level);  # default 0;
+	#prTrace("LOG $level $LogLevel");
+	unless(defined($ENV{'V6EVAL_WITH_KOI'})) {
+		if(defined(LOG)){
+			print LOG "$message" if($level<=$LogLevel);
+		}
+	}
+	prOut "$message" if($VLog && $level<=$LogLevel);
+}
+
+
+
+########################################################################
+#	Convert HTML text to Plain Text
+#-----------------------------------------------------------------------
+sub
+HTML2TXT($)
+{
+	my (
+	$message	# HTML message
+    ) = @_;
+	$message =~ s/<BR>/\n/g;
+	$message =~ s/<\/TR>/\n/g;
+	$message =~ s/<\/TD>/  /g;
+	$message =~ s/<[^>]*>//g;
+	$message =~ s/&lt\;/</g;
+	$message =~ s/&gt\;/>/g;
+	$message =~ s/\n+$//g;
+	$message .= "\n";
+	return $message;
+}
+
+
+
+########################################################################
+#	Print message to stderr
+#-----------------------------------------------------------------------
+sub
+prOut($)
+{
+	my (
+	$message	# message for output
+    ) = @_;
+	$message=HTML2TXT($message);
+	print STDOUT "$message";
+}
+
+
+
+########################################################################
+#	Handle trace messge just for debug for this perl module
+#-----------------------------------------------------------------------
+sub
+prTrace($)
+{
+	my (
+	$message	# message for output
+    ) = @_;
+	prOut("##### $message") if $Trace;
+}
+
+
+
+########################################################################
+#	Handle error but keep continue
+#-----------------------------------------------------------------------
+sub
+prErr($)
+{
+	my (
+	$message	# message for error
+    ) = @_;
+	prLogHTML("<FONT COLOR=\"#FF0000\">!!! $message</FONT><BR>");
+	$message=HTML2TXT($message);
+	print STDERR "$message";
+}
+
+
+
+########################################################################
+#	Handle error and exit
+#-----------------------------------------------------------------------
+sub
+prErrExit($)
+{
+	my (
+	$message	# message for error
+    ) = @_;
+	prErr("V6evalTool.pm $message"); # assume it is error detected
+					 # in this module leval.
+	$!=$InternalErr,die "";
+}
+
+
+
+########################################################################
+#	Handler to chatch SIGCHLD
+#
+#	In case that the died child is pktbuf process,
+#	output the message and exit this script.
+#	And, we assume that execCmd() will be invoked one by one.
+#-----------------------------------------------------------------------
+sub
+checkChild()
+{
+	$ChildPid    = wait;
+	$ChildStatus = $?; 	# save child status
+	my ($HexStatus) = sprintf("0x%08x",$ChildStatus);
+	prTrace("Catch child die pid=$ChildPid status=$HexStatus");
+
+	if($ChildPid==$ExecutingPid_vrasync) {   # vRemoteAsync() finished
+	    $ExecutingPid_vrasync=0;
+	    $ChildPid_vrasync = $ChildPid;       # save child pid    for vRemoteAsync()
+	    $ChildStatus_vrasync = $ChildStatus; # save child status for vRemoteAsync()
+	    $ChildPid=0;
+	    return;
+	}
+
+	$ExecutingPid=0 if($ChildPid==$ExecutingPid); # execCmd() finished
+	if( grep {$ChildPid==$_} @PktbufPids, @TcpdumpPids) {
+		my $pid;
+		for(1..scalar(@PktbufPids)){
+			$pid=shift(@PktbufPids);
+			if($pid==$ChildPid){
+				prErrExit("pktbuf died pid=$ChildPid status=$HexStatus");
+			}
+			push(@PktbufPids,$pid);
+		}
+		for(1..scalar(@TcpdumpPids)){
+			$pid=shift(@TcpdumpPids);
+			if($pid==$ChildPid){
+				prErrExit("tcpdump died pid=$ChildPid status=$HexStatus");
+			}
+			push(@TcpdumpPids,$pid);
+		}
+	}
+}
+
+
+
+########################################################################
+#	Interface subroutine who needs child's exit status
+#-----------------------------------------------------------------------
+sub
+getChildPid()
+{
+	$ChildPid;
+}
+
+
+
+sub
+getChildStatus()
+{
+	$ChildStatus;	# This should be comment out in case you 
+			# decide not to chatch SIGCHLD in this module
+	# $?;		# Then, you should return $? here, for the 
+			# subroutines inside of this module.
+}
+
+
+
+########################################################################
+#	Subroutine which makes link local address from EUI-64
+#-----------------------------------------------------------------------
+sub
+vMAC2LLAddr($)
+{
+	my (
+	$addr		# MAC Address
+    ) = @_;
+	my (@str, @hex);
+
+	@str=split(/:/,$addr);
+	foreach(@str) {
+		push @hex,hex($_);
+	};
+	
+	#
+	# invert universal/local bit
+	$hex[0] ^= 0x02;
+
+	sprintf "fe80::%02x%02x:%02xff:fe%02x:%02x%02x",@hex;
+}
+
+
+
+########################################################################
+#	End procedure
+#
+#	This will be called when exit is calld .
+#	just output time stamp, and do some post processs.
+#	To kill pktbuf process, send SIGTERM
+#-----------------------------------------------------------------------
+END
+{ 
+	vOriginalPacketFile();
+
+	if($vLogStat==$vLogStatOpenRow){
+		prLog("</TD>\n</TR>");
+	}
+
+	my $timestr=getTimeStamp();
+	prLog("<TR><TD>$timestr</TD><TD>End</TD></TR>");
+	prLog("</TABLE>");
+
+	prLog("<HR><H1>Packet Reverse Log</H1>");
+	prLog("<UL>\n$pktrevlog</UL>\n");
+
+	prLog("</BODY>\n</HTML>");
+	unless(defined($ENV{'V6EVAL_WITH_KOI'})) {
+	close(LOG);
+	addMD5($0, $PktDef, $LogFile);
+	}
+	if( $KeepImd ) {	# just for degug
+		prOut("Keep packet ImdFile <$PktImd>");
+	}
+	else { unlink("$PktImd"); }	# normally unlink
+
+	#---------------------------------------------------------------
+	# remove unix domain sockets
+	#---------------------------------------------------------------
+	my $soname;
+	foreach $soname (@TnSos) {
+		prTrace("unlink $SocketPath/$soname");
+		unlink("$SocketPath/$soname");
+	}
+
+	# Send SIGTERM to myself for killing all my children (pktbuf & tcpdump)
+	$SIG{CHLD} = IGNORE;
+	#
+	# stop running pktbuf processes and the some comannd if still running 
+	#
+	push(@PktbufPids,$ExecutingPid) if($ExecutingPid!=0);
+	foreach(@PktbufPids){
+		prTrace("Exiting... sending SIGTERM to $_");
+        	kill('TERM',$_) || prOut("Error in killing pktbuf pid=$_");
+	}
+	sleep 1;
+	foreach(@TcpdumpPids){
+		prTrace("Exiting... sending SIGTERM to $_");
+        	kill('INT',$_) || prOut("Error in killing tcpdump pid=$_");
+	}
+
+	foreach my $key (keys(%SIG)) {
+		$SIG{$key} = 'DEFAULT';
+	}
+
+	%SIG = %storedSIG;
+}
+
+
+
+########################################################################
+#	Begin procedure
+#
+#	Since the subroutine define bellow will not be resolved when
+#	BEGIN{} is processed. 
+#	This module had better locate bottom.
+#	
+#-----------------------------------------------------------------------
+BEGIN
+{
+	%storedSIG = %SIG;
+
+	foreach my $key (keys(%SIG)) {
+		$SIG{$key} = 'DEFAULT';
+	}
+
+	$|=1;			# set command buffering mode
+	$ExecutingPid=0;	# pid of command executing 
+				# such as cpp/pkt{send,recv,ctl}
+	$InternalErr=64;        # exit code
+	# Set SIGCHLD handler to check pktbuf died while testing
+	$SIG{CHLD} = \&checkChild;
+	$SIG{TERM} = sub {exit;};	# This is the time to die !!
+					# explicit exit here to avoid 
+					# printing 'Terminated' message 
+					# to console
+
+	$vSendPKT=0;			# send packets counter
+	$vRecvPKT=0;			# receive packets counter
+	$vLogStatCloseRow=0;		# const 
+	$vLogStatOpenRow=1;		# const
+	$vLogStat=$vLogStatCloseRow;
+
+	initialize();
+}
+1;
+########################################################################
+__END__
+
+=head1 NAME
+
+V6evalTool - Perl interface to write sequence script for IPv6 evaluation.
+
+=head1 SYNOPSIS
+
+  use V6evalTool;
+
+  vStop(Link0);
+  vClear(Link0);
+  vCapture(Link0);
+  %ret= vSend(Link0, frameA, frameB, frameC );
+  %ret= vRecv(Link0, 0, 0, 0, (frameX, frameY) );
+  if( $ret{status}!=0 ){
+	vLog(NG);
+	exit 1;
+  }
+  %ret=vRemote(remote_file, options, args_list);
+  vLog(OK);
+  $error_message= vErrmsg(%ret);
+  $val= vRoundoff(timeval);
+
+
+=head1 ENVIRONMENT
+
+Directory of IPv6 evaluation environment is set -vroot option.
+In -vroot option, first is option setting direcory, second environment
+variable C<V6EVALROOT>, third "/usr/local/v6eval".
+All commands are assumed to be located at
+<-vroot option directory>/bin directory.
+Otherwise, this routines will not work.
+
+=head1 DESCRIPTION
+
+These routines allow you to write sequence script for IPv6 
+evaluation. Only one sequence script can run at the same time.
+There is no assurance for the case that multiple script run 
+at the same time.
+
+This module tries to catch SIGCHLD to detect termination of 
+pktbuf process.
+Since this handler calls wait() to get the process id of the
+terminated child here, $? value will be invalid in case 
+the user use wait() outside.
+In this case, the user should get the staus by using
+getChildStatus() function instead of looking up $? value.
+Because of the same reason, if the user wants to get the 
+process id of child calling wait(), the retruned value will
+be also invalid. For this case, user can use getChildPid()
+function after calling wait().
+
+The name of the sequence script is assumed 'xxxx.seq', where xxxx 
+represents the type of the evaluation test. 
+'xxxx.seq' may have the following keyword parameters, 
+and these are checked by this module at the package initialization.
+
+                                                    < default value >
+                                                    ------------------
+  -tn 	    TN(Testing Node) configuration file     <dir>/tn.def
+  -nut	    NUT(Node Under Test) configuration file <dir>/nut.def
+  -pkt	    Packet definition file                  <dir>/packet.def
+  -ti	    Test Title (text)                       <script>
+  -log	    Log file                                <dir>/<script>.log
+  -l  	    Log Level (0,1,2...)                    1
+  -h  	    Help                                    N/A
+  -v	    log file print to STDOUT                0
+  -nostd    not include std.def			    0
+  -vroot    v6eval directory			    /usr/local/v6eval
+  -remote   options passed to a remote ctrl. file   N/A
+
+  <dir>:       directory of the sequence script located
+  <script>:    sequence script name without extntion
+
+=head1 FILES
+
+ TN(Testing Node) configuration file;
+ NUT(Node Under Test) configuration file:
+    These files read from
+   	First   fullname -tn option sets
+		option setting file
+   	Second  only file name -tn option sets
+		search paths order
+		1 <dir>/xxxx
+		2 current directory/xxxx
+		3 <V6Root>/etc/xxxx
+   	Third   -tn option does not set
+		search paths order
+		1 <dir>/tn.def
+		2 current direcrory/tn.def
+		3 <V6Root>/etc/tn.def
+
+ Packet definition file:
+    If -pkt option does not set
+	<dir>/packet.def                                   
+    is default file
+
+ Standard Difinition file:
+    If -nostd option does not set
+	search paths order
+	1 current directory/std.def
+	2 <V6Root>/include/std.def
+
+ Other include file:
+    include order
+	1 current directory
+	2 <V6Root>/include/ directory
+
+  <V6Root>: directory set by -vroot option
+  <dir>:    directory of the sequence script located
+
+=head1 SUPPORTED FUNCTIONS
+
+=over 4
+
+=head1 vSend
+
+Send frame to the interface.
+
+ sub vSend($@) { my (
+
+	$ifname,	# target interface name
+	@frames		# frame names to send
+ ) = @_;
+
+Returns hash value, and its information can be accessed
+by the following keys;
+
+=item status
+
+ =0:	normal
+ >0:	error 
+
+=item sentTimeN
+
+Time of the specified N'th frame pushed to the 
+specified interface for sending. 
+For example, the time for the 1st frame will be referenced 
+by $retval{'sentTime1'}.
+The value format is as follows;
+ %ld[=epochtime].%06d[=microsecond]
+
+=head1 vRecv
+
+Receive frame from the interface.
+
+ sub vRecv($$$$@) { my (
+	$ifname,        # target interface name
+	$timeout,       # expire time(second)
+                	#       -1: No limitation
+	$seektime,      # seek to the packet at the time(%ld.%06d)
+                	#       0: seek from the beginning
+                	#          of the captured buffer
+                	#       You may use $retval{'sentTime(n)'}
+                	#       returned by vSend().
+	$count,         # How many frames to wait
+                	#       0: No limitation
+	@frames         # frame names to send
+ ) = @_;
+
+Returns hash value, and its information can be accessed
+by the following keys;
+
+=item status:
+
+ =0:     normal
+  1:     receive time  exceeded
+  2:     receive count exceeded
+ >3:     error
+
+=item recvCount;
+
+The number of frame received while calling this subroutine.
+
+=item recvTime(N):
+
+Time of the specified N'th frame received from the
+specified interface.
+For example, the time for the 1st frame will be referenced
+by $retval{"recvTime1"}.
+The value format is as follows;
+ %ld[=epochtime].%06d[=microsecond]
+
+=item recvFrame:
+
+The name of the frame
+This will be normally one of the name in the frames
+specified in the argument. Otherwise, undef value
+in case of receive time or count exceeded.
+
+=head1 vCapture
+
+Start frame capture for the interface.
+
+ sub vCapture($) { my (
+	$ifname,        # target interface name
+ ) = @_;
+
+vCapture returns scaler value which represents the status
+ =0:     normal (even if already capturing)
+ >0:     error
+
+=head1 vStop
+
+Stop frame capture for the interface.
+
+ sub vStop($) { my (
+	$ifname,        # target interface name
+ ) = @_;
+
+Returns returns scaler value which represents the status
+ =0:     normal ( even if already stopped )
+ >0:     error
+
+
+=head1 vClear
+
+Clear captured buffer for the interface.
+
+ sub vClear($) { my (
+	$ifname,        # target interface name
+ ) = @_;
+
+Returns scaler value which represents the status
+ =0:     normal ( even if already cleared)
+ >0:     error
+
+
+=head1 vSleep
+
+suspend process execution for interval of seconds
+
+ sub vSleep($;$) { my (
+	$sec,
+	$mesg
+ ) = @_;
+
+
+=head1 vRemote
+
+Execute a remote control program.
+
+ sub vRemote($;$@) { my (
+	$remtoe_file	# A file name of remote control program.
+	$options	# Options that pass to the program directly.
+			# See i/f of the remote control program.
+        @argv		# Args that pass to the program directly
+			# that depends on the remote control program.
+ ) = @_;
+
+Returns exit value that the remote control program shows.
+ =0:	noral
+ >0:	error (that depend on the remote control program)
+
+=item FILE SEARCH PATH
+
+ A remote control program is searched as the following directories:
+   1. The current directory.
+   2. $V6EVALROOT/bin if defined.
+      Or /usr/local/v6eval/bin if $V6EVALROOT is not defined.
+
+=item EVALUATING THE OPTIONS
+
+ The options are evaluated the following order:
+   1. The definitions in TN.def or NUT.def
+   2. -remote="..." options.
+   3. vRemote(, "...", ) options.
+
+=item THE RELATION TO TN/NUT DIFINITION FILES
+
+ A TN.def VS. a remote control program options:
+ ---------------+-----------------------
+ TN.def
+ Entries         Mapped options
+ ---------------+-----------------------
+ RemoteDevice	 -d
+ RemoteDebug	 -v
+ RemoteIntDebug	 -i
+ RemoteLog	 -o
+ RemoteSpeed     -s
+ ---------------+-----------------------
+
+ A NUT.def VS. a remote control program optons:
+ ---------------+-----------------------
+ NUT.def
+ Entries         Mapped optons
+ ---------------+-----------------------
+ System		 -t
+ User		 -u
+ Password	 -p
+ ---------------+-----------------------
+
+=item SEE ALSO
+
+ V6evalRemote.pm (perldoc V6evalRemote)
+
+
+=head1 vRemoteAsync
+
+Asynchronous execution of a remote control program.
+
+ sub vRemoteAsync($;$@) { my (
+	$remtoe_file	# A file name of remote control program.
+	$options	# Options that pass to the program directly.
+			# See i/f of the remote control program.
+        @argv		# Args that pass to the program directly
+			# that depends on the remote control program.
+ ) = @_;
+
+Returns scaler value which represents the status
+ =0:	normal
+ >0:	error
+
+This function forks and executes remote control program.
+Main sequence program can wait and synchronize the executing remote
+control program by vRemoteAsyncWait() function.
+Multiple vRemoteAsync() execution is unavailable.
+Executing vRemote() between vRemoteAsync() and vRemoteAsyncWait()
+is also unavailable.
+Details of other specification are same as vRemote().
+
+
+=head1 vRemoteAsyncWait
+
+Wait for an asynchronous remote control program executed by vRemoteAsync().
+
+ sub vRemoteAsyncWait()
+
+Returns exit value that the remote control program shows.
+ =0:	normal
+ >0:	error (that depend on the remote control program)
+
+
+
+
+=head1 vLog
+
+Output message to the log file
+
+ sub vLog($) { my (
+	$message,       # message to be logged
+ ) = @_;
+
+Returns nothing.
+
+=head1 vErrmsg
+
+Return error messages.
+
+sub vErrmsg(%) { my (
+	%stat		# return status
+    ) = @_;
+
+=head1 vRoundoff
+
+Return time value that is rounded off to one decimal place
+
+sub vRoundoff($) { my (
+	$timeval		# sec.usec
+    ) = @_;
+
+=head1 vStatus
+
+Get the status of packet buffering process.
+
+ sub vStatus() { my (
+
+	$ifname,	# target interface name
+	@frames		# frame names to send
+ ) = @_;
+
+Returns hash value, and its information can be accessed
+by the following keys;
+
+=item status
+
+ =0:	normal
+ >0:	error 
+
+=item  XXXX
+
+not yet fiexed.
+
+=back
+
+=head1 vMAC2LLAddr
+
+create link local address from MAC address
+
+sub vMAC2LLAddr(%) { my (
+
+	$MACaddr	# MAC address 
+    ) = @_;
+
+=head1 SEQUENCE SCRIPT EXAMPLE
+
+  #!/usr/bin/perl
+
+  use V6evalTool;
+
+  #--------------------------------------------
+  # Setup test environment
+  #--------------------------------------------
+  vStop(Link0);
+  vClear(Link0);	
+  vCapture(Link0);
+
+  #--------------------------------------------
+  # Send frame
+  #--------------------------------------------
+  %sret= vSend(Link0, frame1, frame2 );
+  if( $sret{status}!=0 ){
+  	vLog(NG);
+  	exit 1;
+  }
+  print "sentTime1:\t$sret{sentTime1}\n";
+  print "sentTime2:\t$sret{sentTime2}\n";
+
+  #--------------------------------------------
+  # log some site specific messages
+  #--------------------------------------------
+  vLog("Something you need" );
+
+  #--------------------------------------------
+  # Receive frame
+  #--------------------------------------------
+  %rret= vRecv(Link0, 10, $sret{sentTime1}, 5,(frame1,frame2) );
+  if( $rret{status}!=0 ){
+	vLog(NG);
+	exit 1;
+  }
+  print "recvFrame:\t$rret{recvFrame}\n";
+
+  #--------------------------------------------
+  # Post process
+  #--------------------------------------------
+  vLog(OK);
+
+=cut
diff -urN tahi-linux-3.0.12/script/pmod/V6evalTool/blib/man3/V6evalTool.3pm tahi-linux-3.0.12-linux/script/pmod/V6evalTool/blib/man3/V6evalTool.3pm
--- tahi-linux-3.0.12/script/pmod/V6evalTool/blib/man3/V6evalTool.3pm	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalTool/blib/man3/V6evalTool.3pm	2007-12-10 20:27:32.000000000 +0100
@@ -0,0 +1,601 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  | will give a
+.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.\"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "V6evalTool 3"
+.TH V6evalTool 3 "2007-12-09" "perl v5.8.8" "User Contributed Perl Documentation"
+.SH "NAME"
+V6evalTool \- Perl interface to write sequence script for IPv6 evaluation.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\&  use V6evalTool;
+.Ve
+.PP
+.Vb 13
+\&  vStop(Link0);
+\&  vClear(Link0);
+\&  vCapture(Link0);
+\&  %ret= vSend(Link0, frameA, frameB, frameC );
+\&  %ret= vRecv(Link0, 0, 0, 0, (frameX, frameY) );
+\&  if( $ret{status}!=0 ){
+\&        vLog(NG);
+\&        exit 1;
+\&  }
+\&  %ret=vRemote(remote_file, options, args_list);
+\&  vLog(OK);
+\&  $error_message= vErrmsg(%ret);
+\&  $val= vRoundoff(timeval);
+.Ve
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+Directory of IPv6 evaluation environment is set \-vroot option.
+In \-vroot option, first is option setting direcory, second environment
+variable \f(CW\*(C`V6EVALROOT\*(C'\fR, third \*(L"/usr/local/v6eval\*(R".
+All commands are assumed to be located at
+<\-vroot option directory>/bin directory.
+Otherwise, this routines will not work.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+These routines allow you to write sequence script for IPv6 
+evaluation. Only one sequence script can run at the same time.
+There is no assurance for the case that multiple script run 
+at the same time.
+.PP
+This module tries to catch \s-1SIGCHLD\s0 to detect termination of 
+pktbuf process.
+Since this handler calls \fIwait()\fR to get the process id of the
+terminated child here, $? value will be invalid in case 
+the user use \fIwait()\fR outside.
+In this case, the user should get the staus by using
+\&\fIgetChildStatus()\fR function instead of looking up $? value.
+Because of the same reason, if the user wants to get the 
+process id of child calling \fIwait()\fR, the retruned value will
+be also invalid. For this case, user can use \fIgetChildPid()\fR
+function after calling \fIwait()\fR.
+.PP
+The name of the sequence script is assumed 'xxxx.seq', where xxxx 
+represents the type of the evaluation test. 
+\&'xxxx.seq' may have the following keyword parameters, 
+and these are checked by this module at the package initialization.
+.PP
+.Vb 13
+\&                                                    < default value >
+\&                                                    ------------------
+\&  -tn       TN(Testing Node) configuration file     <dir>/tn.def
+\&  -nut      NUT(Node Under Test) configuration file <dir>/nut.def
+\&  -pkt      Packet definition file                  <dir>/packet.def
+\&  -ti       Test Title (text)                       <script>
+\&  -log      Log file                                <dir>/<script>.log
+\&  -l        Log Level (0,1,2...)                    1
+\&  -h        Help                                    N/A
+\&  -v        log file print to STDOUT                0
+\&  -nostd    not include std.def                     0
+\&  -vroot    v6eval directory                        /usr/local/v6eval
+\&  -remote   options passed to a remote ctrl. file   N/A
+.Ve
+.PP
+.Vb 2
+\&  <dir>:       directory of the sequence script located
+\&  <script>:    sequence script name without extntion
+.Ve
+.SH "FILES"
+.IX Header "FILES"
+.Vb 15
+\& TN(Testing Node) configuration file;
+\& NUT(Node Under Test) configuration file:
+\&    These files read from
+\&        First   fullname -tn option sets
+\&                option setting file
+\&        Second  only file name -tn option sets
+\&                search paths order
+\&                1 <dir>/xxxx
+\&                2 current directory/xxxx
+\&                3 <V6Root>/etc/xxxx
+\&        Third   -tn option does not set
+\&                search paths order
+\&                1 <dir>/tn.def
+\&                2 current direcrory/tn.def
+\&                3 <V6Root>/etc/tn.def
+.Ve
+.PP
+.Vb 4
+\& Packet definition file:
+\&    If -pkt option does not set
+\&        <dir>/packet.def                                   
+\&    is default file
+.Ve
+.PP
+.Vb 5
+\& Standard Difinition file:
+\&    If -nostd option does not set
+\&        search paths order
+\&        1 current directory/std.def
+\&        2 <V6Root>/include/std.def
+.Ve
+.PP
+.Vb 4
+\& Other include file:
+\&    include order
+\&        1 current directory
+\&        2 <V6Root>/include/ directory
+.Ve
+.PP
+.Vb 2
+\&  <V6Root>: directory set by -vroot option
+\&  <dir>:    directory of the sequence script located
+.Ve
+.SH "SUPPORTED FUNCTIONS"
+.IX Header "SUPPORTED FUNCTIONS"
+.SH "vSend"
+.IX Header "vSend"
+.RS 4
+Send frame to the interface.
+.Sp
+.Vb 1
+\& sub vSend($@) { my (
+.Ve
+.Sp
+.Vb 3
+\&        $ifname,        # target interface name
+\&        @frames         # frame names to send
+\& ) = @_;
+.Ve
+.Sp
+Returns hash value, and its information can be accessed
+by the following keys;
+.RE
+.IP "status" 4
+.IX Item "status"
+.Vb 2
+\& =0:    normal
+\& >0:    error
+.Ve
+.IP "sentTimeN" 4
+.IX Item "sentTimeN"
+Time of the specified N'th frame pushed to the 
+specified interface for sending. 
+For example, the time for the 1st frame will be referenced 
+by \f(CW$retval\fR{'sentTime1'}.
+The value format is as follows;
+ \f(CW%ld\fR[=epochtime].%06d[=microsecond]
+.SH "vRecv"
+.IX Header "vRecv"
+Receive frame from the interface.
+.Sp
+.Vb 13
+\& sub vRecv($$$$@) { my (
+\&        $ifname,        # target interface name
+\&        $timeout,       # expire time(second)
+\&                        #       -1: No limitation
+\&        $seektime,      # seek to the packet at the time(%ld.%06d)
+\&                        #       0: seek from the beginning
+\&                        #          of the captured buffer
+\&                        #       You may use $retval{'sentTime(n)'}
+\&                        #       returned by vSend().
+\&        $count,         # How many frames to wait
+\&                        #       0: No limitation
+\&        @frames         # frame names to send
+\& ) = @_;
+.Ve
+.Sp
+Returns hash value, and its information can be accessed
+by the following keys;
+.IP "status:" 4
+.IX Item "status:"
+.Vb 4
+\& =0:     normal
+\&  1:     receive time  exceeded
+\&  2:     receive count exceeded
+\& >3:     error
+.Ve
+.IP "recvCount;" 4
+.IX Item "recvCount;"
+The number of frame received while calling this subroutine.
+.IP "recvTime(N):" 4
+.IX Item "recvTime(N):"
+Time of the specified N'th frame received from the
+specified interface.
+For example, the time for the 1st frame will be referenced
+by \f(CW$retval\fR{\*(L"recvTime1\*(R"}.
+The value format is as follows;
+ \f(CW%ld\fR[=epochtime].%06d[=microsecond]
+.IP "recvFrame:" 4
+.IX Item "recvFrame:"
+The name of the frame
+This will be normally one of the name in the frames
+specified in the argument. Otherwise, undef value
+in case of receive time or count exceeded.
+.SH "vCapture"
+.IX Header "vCapture"
+Start frame capture for the interface.
+.Sp
+.Vb 3
+\& sub vCapture($) { my (
+\&        $ifname,        # target interface name
+\& ) = @_;
+.Ve
+.Sp
+vCapture returns scaler value which represents the status
+ =0:     normal (even if already capturing)
+ >0:     error
+.SH "vStop"
+.IX Header "vStop"
+Stop frame capture for the interface.
+.Sp
+.Vb 3
+\& sub vStop($) { my (
+\&        $ifname,        # target interface name
+\& ) = @_;
+.Ve
+.Sp
+Returns returns scaler value which represents the status
+ =0:     normal ( even if already stopped )
+ >0:     error
+.SH "vClear"
+.IX Header "vClear"
+Clear captured buffer for the interface.
+.Sp
+.Vb 3
+\& sub vClear($) { my (
+\&        $ifname,        # target interface name
+\& ) = @_;
+.Ve
+.Sp
+Returns scaler value which represents the status
+ =0:     normal ( even if already cleared)
+ >0:     error
+.SH "vSleep"
+.IX Header "vSleep"
+suspend process execution for interval of seconds
+.Sp
+.Vb 4
+\& sub vSleep($;$) { my (
+\&        $sec,
+\&        $mesg
+\& ) = @_;
+.Ve
+.SH "vRemote"
+.IX Header "vRemote"
+Execute a remote control program.
+.Sp
+.Vb 7
+\& sub vRemote($;$@) { my (
+\&        $remtoe_file    # A file name of remote control program.
+\&        $options        # Options that pass to the program directly.
+\&                        # See i/f of the remote control program.
+\&        @argv           # Args that pass to the program directly
+\&                        # that depends on the remote control program.
+\& ) = @_;
+.Ve
+.Sp
+Returns exit value that the remote control program shows.
+ =0:	noral
+ >0:	error (that depend on the remote control program)
+.IP "\s-1FILE\s0 \s-1SEARCH\s0 \s-1PATH\s0" 4
+.IX Item "FILE SEARCH PATH"
+.Vb 4
+\& A remote control program is searched as the following directories:
+\&   1. The current directory.
+\&   2. $V6EVALROOT/bin if defined.
+\&      Or /usr/local/v6eval/bin if $V6EVALROOT is not defined.
+.Ve
+.IP "\s-1EVALUATING\s0 \s-1THE\s0 \s-1OPTIONS\s0" 4
+.IX Item "EVALUATING THE OPTIONS"
+.Vb 4
+\& The options are evaluated the following order:
+\&   1. The definitions in TN.def or NUT.def
+\&   2. -remote="..." options.
+\&   3. vRemote(, "...", ) options.
+.Ve
+.IP "\s-1THE\s0 \s-1RELATION\s0 \s-1TO\s0 \s-1TN/NUT\s0 \s-1DIFINITION\s0 \s-1FILES\s0" 4
+.IX Item "THE RELATION TO TN/NUT DIFINITION FILES"
+.Vb 11
+\& A TN.def VS. a remote control program options:
+\& ---------------+-----------------------
+\& TN.def
+\& Entries         Mapped options
+\& ---------------+-----------------------
+\& RemoteDevice    -d
+\& RemoteDebug     -v
+\& RemoteIntDebug  -i
+\& RemoteLog       -o
+\& RemoteSpeed     -s
+\& ---------------+-----------------------
+.Ve
+.Sp
+.Vb 9
+\& A NUT.def VS. a remote control program optons:
+\& ---------------+-----------------------
+\& NUT.def
+\& Entries         Mapped optons
+\& ---------------+-----------------------
+\& System          -t
+\& User            -u
+\& Password        -p
+\& ---------------+-----------------------
+.Ve
+.IP "\s-1SEE\s0 \s-1ALSO\s0" 4
+.IX Item "SEE ALSO"
+.Vb 1
+\& V6evalRemote.pm (perldoc V6evalRemote)
+.Ve
+.SH "vRemoteAsync"
+.IX Header "vRemoteAsync"
+Asynchronous execution of a remote control program.
+.Sp
+.Vb 7
+\& sub vRemoteAsync($;$@) { my (
+\&        $remtoe_file    # A file name of remote control program.
+\&        $options        # Options that pass to the program directly.
+\&                        # See i/f of the remote control program.
+\&        @argv           # Args that pass to the program directly
+\&                        # that depends on the remote control program.
+\& ) = @_;
+.Ve
+.Sp
+Returns scaler value which represents the status
+ =0:	normal
+ >0:	error
+.Sp
+This function forks and executes remote control program.
+Main sequence program can wait and synchronize the executing remote
+control program by \fIvRemoteAsyncWait()\fR function.
+Multiple \fIvRemoteAsync()\fR execution is unavailable.
+Executing \fIvRemote()\fR between \fIvRemoteAsync()\fR and \fIvRemoteAsyncWait()\fR
+is also unavailable.
+Details of other specification are same as \fIvRemote()\fR.
+.SH "vRemoteAsyncWait"
+.IX Header "vRemoteAsyncWait"
+Wait for an asynchronous remote control program executed by \fIvRemoteAsync()\fR.
+.Sp
+.Vb 1
+\& sub vRemoteAsyncWait()
+.Ve
+.Sp
+Returns exit value that the remote control program shows.
+ =0:	normal
+ >0:	error (that depend on the remote control program)
+.SH "vLog"
+.IX Header "vLog"
+Output message to the log file
+.Sp
+.Vb 3
+\& sub vLog($) { my (
+\&        $message,       # message to be logged
+\& ) = @_;
+.Ve
+.Sp
+Returns nothing.
+.SH "vErrmsg"
+.IX Header "vErrmsg"
+Return error messages.
+.Sp
+sub vErrmsg(%) { my (
+	\f(CW%stat\fR		# return status
+    ) = \f(CW@_\fR;
+.SH "vRoundoff"
+.IX Header "vRoundoff"
+Return time value that is rounded off to one decimal place
+.Sp
+sub vRoundoff($) { my (
+	\f(CW$timeval\fR		# sec.usec
+    ) = \f(CW@_\fR;
+.SH "vStatus"
+.IX Header "vStatus"
+Get the status of packet buffering process.
+.Sp
+.Vb 1
+\& sub vStatus() { my (
+.Ve
+.Sp
+.Vb 3
+\&        $ifname,        # target interface name
+\&        @frames         # frame names to send
+\& ) = @_;
+.Ve
+.Sp
+Returns hash value, and its information can be accessed
+by the following keys;
+.IP "status" 4
+.IX Item "status"
+.Vb 2
+\& =0:    normal
+\& >0:    error
+.Ve
+.IP "\s-1XXXX\s0" 4
+.IX Item "XXXX"
+not yet fiexed.
+.SH "vMAC2LLAddr"
+.IX Header "vMAC2LLAddr"
+create link local address from \s-1MAC\s0 address
+.PP
+sub vMAC2LLAddr(%) { my (
+.PP
+.Vb 2
+\&        $MACaddr        # MAC address 
+\&    ) = @_;
+.Ve
+.SH "SEQUENCE SCRIPT EXAMPLE"
+.IX Header "SEQUENCE SCRIPT EXAMPLE"
+.Vb 1
+\&  #!/usr/bin/perl
+.Ve
+.PP
+.Vb 1
+\&  use V6evalTool;
+.Ve
+.PP
+.Vb 6
+\&  #--------------------------------------------
+\&  # Setup test environment
+\&  #--------------------------------------------
+\&  vStop(Link0);
+\&  vClear(Link0);        
+\&  vCapture(Link0);
+.Ve
+.PP
+.Vb 10
+\&  #--------------------------------------------
+\&  # Send frame
+\&  #--------------------------------------------
+\&  %sret= vSend(Link0, frame1, frame2 );
+\&  if( $sret{status}!=0 ){
+\&        vLog(NG);
+\&        exit 1;
+\&  }
+\&  print "sentTime1:\et$sret{sentTime1}\en";
+\&  print "sentTime2:\et$sret{sentTime2}\en";
+.Ve
+.PP
+.Vb 4
+\&  #--------------------------------------------
+\&  # log some site specific messages
+\&  #--------------------------------------------
+\&  vLog("Something you need" );
+.Ve
+.PP
+.Vb 9
+\&  #--------------------------------------------
+\&  # Receive frame
+\&  #--------------------------------------------
+\&  %rret= vRecv(Link0, 10, $sret{sentTime1}, 5,(frame1,frame2) );
+\&  if( $rret{status}!=0 ){
+\&        vLog(NG);
+\&        exit 1;
+\&  }
+\&  print "recvFrame:\et$rret{recvFrame}\en";
+.Ve
+.PP
+.Vb 4
+\&  #--------------------------------------------
+\&  # Post process
+\&  #--------------------------------------------
+\&  vLog(OK);
+.Ve
diff -urN tahi-linux-3.0.12/script/pmod/V6evalTool/Makefile.tmp tahi-linux-3.0.12-linux/script/pmod/V6evalTool/Makefile.tmp
--- tahi-linux-3.0.12/script/pmod/V6evalTool/Makefile.tmp	1970-01-01 01:00:00.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalTool/Makefile.tmp	2007-12-10 20:27:30.000000000 +0100
@@ -0,0 +1,789 @@
+# This Makefile is for the V6evalTool extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 6.30 (Revision: Revision: 4535 ) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+#       ANY CHANGES MADE HERE WILL BE LOST!
+#
+#   MakeMaker ARGV: ()
+#
+#   MakeMaker Parameters:
+
+#     MAKEFILE => q[Makefile.tmp]
+#     NAME => q[V6evalTool]
+#     VERSION => q[1.00]
+#     dist => { COMPRESS=>q[gzip], SUFFIX=>q[gz] }
+#     linkext => { LINKTYPE=>q[] }
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib/perl5/5.8.8/i586-linux-thread-multi/Config.pm)
+
+# They may have been overridden via Makefile.PL or on the command line
+AR = ar
+CC = cc
+CCCDLFLAGS = -fPIC
+CCDLFLAGS = -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.8/i586-linux-thread-multi/CORE
+DLEXT = so
+DLSRC = dl_dlopen.xs
+LD = cc
+LDDLFLAGS = -shared
+LDFLAGS = 
+LIBC = /lib/libc-2.6.1.so
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 2.6.22
+RANLIB = :
+SITELIBEXP = /usr/lib/perl5/site_perl/5.8.8
+SITEARCHEXP = /usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
+SO = so
+EXE_EXT = 
+FULL_AR = /usr/bin/ar
+VENDORARCHEXP = /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
+VENDORLIBEXP = /usr/lib/perl5/vendor_perl/5.8.8
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+DFSEP = $(DIRFILESEP)
+NAME = V6evalTool
+NAME_SYM = V6evalTool
+VERSION = 1.00
+VERSION_MACRO = VERSION
+VERSION_SYM = 1_00
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 1.00
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1
+MAN3EXT = 3pm
+INSTALLDIRS = site
+DESTDIR = 
+PREFIX = $(SITEPREFIX)
+PERLPREFIX = /usr
+SITEPREFIX = /usr
+VENDORPREFIX = /usr
+INSTALLPRIVLIB = /usr/lib/perl5/5.8.8
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /usr/lib/perl5/site_perl/5.8.8
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = /usr/lib/perl5/vendor_perl/5.8.8
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = /usr/lib/perl5/5.8.8/i586-linux-thread-multi
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = /usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = /usr/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = /usr/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = /usr/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = /usr/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLMAN1DIR = /usr/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = /usr/share/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = /usr/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = /usr/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = /usr/share/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = /usr/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/lib/perl5/5.8.8
+PERL_ARCHLIB = /usr/lib/perl5/5.8.8/i586-linux-thread-multi
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile.tmp
+MAKEFILE_OLD = Makefile.tmp.old
+MAKE_APERL_FILE = Makefile.tmp.aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib/perl5/5.8.8/i586-linux-thread-multi/CORE
+PERL = /usr/bin/perl
+FULLPERL = /usr/bin/perl
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER   = /usr/lib/perl5/5.8.8/ExtUtils/MakeMaker.pm
+MM_VERSION  = 6.30
+MM_REVISION = Revision: 4535 
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE  = Basename part of dynamic library. May be just equal BASEEXT.
+FULLEXT = V6evalTool
+BASEEXT = V6evalTool
+PARENT_NAME = 
+DLBASE = $(BASEEXT)
+VERSION_FROM = 
+OBJECT = 
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+BOOTDEP = 
+
+# Handy lists of source code files:
+XS_FILES = 
+C_FILES  = 
+O_FILES  = 
+H_FILES  = 
+MAN1PODS = 
+MAN3PODS = V6evalTool.pm
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h
+
+# Where to build things
+INST_LIBDIR      = $(INST_LIB)
+INST_ARCHLIBDIR  = $(INST_ARCHLIB)
+
+INST_AUTODIR     = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC      = 
+INST_DYNAMIC     = 
+INST_BOOT        = 
+
+# Extra linker info
+EXPORT_LIST        = 
+PERL_ARCHIVE       = 
+PERL_ARCHIVE_AFTER = 
+
+
+TO_INST_PM = V6evalTool.pm
+
+PM_TO_BLIB = V6evalTool.pm \
+	$(INST_LIB)/V6evalTool.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 1.50
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(ABSPERLRUN)  -e 'use AutoSplit;  autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)'
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(SHELL) -c true
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(ABSPERLRUN) "-MExtUtils::Command" -e mkpath
+EQUALIZE_TIMESTAMP = $(ABSPERLRUN) "-MExtUtils::Command" -e eqtime
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');'
+DOC_INSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e perllocal_install
+UNINSTALL = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e uninstall
+WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist
+MACROSTART = 
+MACROEND = 
+USEMAKEFILE = -f
+FIXIN = $(PERLRUN) "-MExtUtils::MY" -e "MY->fixin(shift)"
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt: all
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip
+SUFFIX = gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = V6evalTool
+DISTVNAME = V6evalTool-1.00
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+
+# --- MakeMaker const_loadlibs section:
+
+
+# --- MakeMaker const_cccmd section:
+
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIBPERL_A="$(LIBPERL_A)"\
+	LINKTYPE="$(LINKTYPE)"\
+	PREFIX="$(PREFIX)"
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir
+
+
+
+# --- MakeMaker c_o section:
+
+
+# --- MakeMaker xs_c section:
+
+
+# --- MakeMaker xs_o section:
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+	$(NOECHO) $(NOOP)
+
+
+pure_all :: config pm_to_blib subdirs linkext
+	$(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+	$(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) blibdirs
+	$(NOECHO) $(NOOP)
+
+help :
+	perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker blibdirs section:
+blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists
+	$(NOECHO) $(NOOP)
+
+# Backwards compat with 6.18 through 6.25
+blibdirs.ts : blibdirs
+	$(NOECHO) $(NOOP)
+
+$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_LIBDIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_LIBDIR)
+	$(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
+
+$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_ARCHLIB)
+	$(NOECHO) $(CHMOD) 755 $(INST_ARCHLIB)
+	$(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
+
+$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_AUTODIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_AUTODIR)
+	$(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
+
+$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_ARCHAUTODIR)
+	$(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
+
+$(INST_BIN)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_BIN)
+	$(NOECHO) $(CHMOD) 755 $(INST_BIN)
+	$(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
+
+$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_SCRIPT)
+	$(NOECHO) $(CHMOD) 755 $(INST_SCRIPT)
+	$(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
+
+$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_MAN1DIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_MAN1DIR)
+	$(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
+
+$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
+	$(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+	$(NOECHO) $(CHMOD) 755 $(INST_MAN3DIR)
+	$(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
+
+
+
+# --- MakeMaker linkext section:
+
+linkext :: 
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT)
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_bs section:
+
+BOOTSTRAP =
+
+
+# --- MakeMaker dynamic_lib section:
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+
+
+# --- MakeMaker manifypods section:
+
+POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
+POD2MAN = $(POD2MAN_EXE)
+
+
+manifypods : pure_all  \
+	V6evalTool.pm \
+	V6evalTool.pm
+	$(NOECHO) $(POD2MAN) --section=3 --perm_rw=$(PERM_RW) \
+	  V6evalTool.pm $(INST_MAN3DIR)/V6evalTool.$(MAN3EXT) 
+
+
+
+
+# --- MakeMaker processPL section:
+
+
+# --- MakeMaker installbin section:
+
+
+# --- MakeMaker subdirs section:
+
+# none
+
+# --- MakeMaker clean_subdirs section:
+clean_subdirs :
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker clean section:
+
+# Delete temporary files but do not touch installed files. We don't delete
+# the Makefile here so a later make realclean still has a makefile to use.
+
+clean :: clean_subdirs
+	- $(RM_F) \
+	  *$(LIB_EXT) core \
+	  core.[0-9] $(INST_ARCHAUTODIR)/extralibs.all \
+	  core.[0-9][0-9] $(BASEEXT).bso \
+	  pm_to_blib.ts core.[0-9][0-9][0-9][0-9] \
+	  $(BASEEXT).x $(BOOTSTRAP) \
+	  perl$(EXE_EXT) tmon.out \
+	  *$(OBJ_EXT) pm_to_blib \
+	  $(INST_ARCHAUTODIR)/extralibs.ld blibdirs.ts \
+	  core.[0-9][0-9][0-9][0-9][0-9] *perl.core \
+	  core.*perl.*.? $(MAKE_APERL_FILE) \
+	  perl $(BASEEXT).def \
+	  core.[0-9][0-9][0-9] mon.out \
+	  lib$(BASEEXT).def perlmain.c \
+	  perl.exe so_locations \
+	  $(BASEEXT).exp 
+	- $(RM_RF) \
+	  blib 
+	- $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
+
+
+# --- MakeMaker realclean_subdirs section:
+realclean_subdirs :
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker realclean section:
+# Delete temporary files (via clean) and also delete dist files
+realclean purge ::  clean realclean_subdirs
+	- $(RM_F) \
+	  $(MAKEFILE_OLD) $(FIRST_MAKEFILE) 
+	- $(RM_RF) \
+	  $(DISTVNAME) 
+
+
+# --- MakeMaker metafile section:
+metafile : create_distdir
+	$(NOECHO) $(ECHO) Generating META.yml
+	$(NOECHO) $(ECHO) '# http://module-build.sourceforge.net/META-spec.html' > META_new.yml
+	$(NOECHO) $(ECHO) '#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#' >> META_new.yml
+	$(NOECHO) $(ECHO) 'name:         V6evalTool' >> META_new.yml
+	$(NOECHO) $(ECHO) 'version:      1.00' >> META_new.yml
+	$(NOECHO) $(ECHO) 'version_from: ' >> META_new.yml
+	$(NOECHO) $(ECHO) 'installdirs:  site' >> META_new.yml
+	$(NOECHO) $(ECHO) 'requires:' >> META_new.yml
+	$(NOECHO) $(ECHO) '' >> META_new.yml
+	$(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml
+	$(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.30' >> META_new.yml
+	-$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
+
+
+# --- MakeMaker signature section:
+signature :
+	cpansign -s
+
+
+# --- MakeMaker dist_basics section:
+distclean :: realclean distcheck
+	$(NOECHO) $(NOOP)
+
+distcheck :
+	$(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
+
+skipcheck :
+	$(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
+
+manifest :
+	$(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
+
+veryclean : realclean
+	$(RM_F) *~ *.orig */*~ */*.orig
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+	$(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
+	  -e '    if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';'
+
+tardist : $(DISTVNAME).tar$(SUFFIX)
+	$(NOECHO) $(NOOP)
+
+uutardist : $(DISTVNAME).tar$(SUFFIX)
+	uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
+
+$(DISTVNAME).tar$(SUFFIX) : distdir
+	$(PREOP)
+	$(TO_UNIX)
+	$(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+	$(RM_RF) $(DISTVNAME)
+	$(COMPRESS) $(DISTVNAME).tar
+	$(POSTOP)
+
+zipdist : $(DISTVNAME).zip
+	$(NOECHO) $(NOOP)
+
+$(DISTVNAME).zip : distdir
+	$(PREOP)
+	$(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+	$(RM_RF) $(DISTVNAME)
+	$(POSTOP)
+
+shdist : distdir
+	$(PREOP)
+	$(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+	$(RM_RF) $(DISTVNAME)
+	$(POSTOP)
+
+
+# --- MakeMaker distdir section:
+create_distdir :
+	$(RM_RF) $(DISTVNAME)
+	$(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+		-e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+distdir : create_distdir distmeta 
+	$(NOECHO) $(NOOP)
+
+
+
+# --- MakeMaker dist_test section:
+disttest : distdir
+	cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL 
+	cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+	cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
+
+
+
+# --- MakeMaker dist_ci section:
+
+ci :
+	$(PERLRUN) "-MExtUtils::Manifest=maniread" \
+	  -e "@all = keys %{ maniread() };" \
+	  -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \
+	  -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
+
+
+# --- MakeMaker distmeta section:
+distmeta : create_distdir metafile
+	$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
+	  -e '    or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"'
+
+
+
+# --- MakeMaker distsignature section:
+distsignature : create_distdir
+	$(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
+	  -e '    or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"'
+	$(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
+	cd $(DISTVNAME) && cpansign -s
+
+
+
+# --- MakeMaker install section:
+
+install :: all pure_install doc_install
+	$(NOECHO) $(NOOP)
+
+install_perl :: all pure_perl_install doc_perl_install
+	$(NOECHO) $(NOOP)
+
+install_site :: all pure_site_install doc_site_install
+	$(NOECHO) $(NOOP)
+
+install_vendor :: all pure_vendor_install doc_vendor_install
+	$(NOECHO) $(NOOP)
+
+pure_install :: pure_$(INSTALLDIRS)_install
+	$(NOECHO) $(NOOP)
+
+doc_install :: doc_$(INSTALLDIRS)_install
+	$(NOECHO) $(NOOP)
+
+pure__install : pure_site_install
+	$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+doc__install : doc_site_install
+	$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+pure_perl_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLPRIVLIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+		$(INST_BIN) $(DESTINSTALLBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
+	$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+		$(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+pure_site_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLSITELIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+		$(INST_BIN) $(DESTINSTALLSITEBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
+	$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+		$(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+pure_vendor_install ::
+	$(NOECHO) $(MOD_INSTALL) \
+		read $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist \
+		write $(DESTINSTALLVENDORARCH)/auto/$(FULLEXT)/.packlist \
+		$(INST_LIB) $(DESTINSTALLVENDORLIB) \
+		$(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+		$(INST_BIN) $(DESTINSTALLVENDORBIN) \
+		$(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+		$(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+		$(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+doc_perl_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLPRIVLIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_site_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLSITELIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_vendor_install ::
+	$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+	-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+	-$(NOECHO) $(DOC_INSTALL) \
+		"Module" "$(NAME)" \
+		"installed into" "$(INSTALLVENDORLIB)" \
+		LINKTYPE "$(LINKTYPE)" \
+		VERSION "$(VERSION)" \
+		EXE_FILES "$(EXE_FILES)" \
+		>> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+	$(NOECHO) $(NOOP)
+
+uninstall_from_perldirs ::
+	$(NOECHO) $(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_sitedirs ::
+	$(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_vendordirs ::
+	$(NOECHO) $(UNINSTALL) $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+# --- MakeMaker force section:
+# Phony target to force checking subdirectories.
+FORCE:
+	$(NOECHO) $(NOOP)
+
+
+# --- MakeMaker perldepend section:
+
+
+# --- MakeMaker makefile section:
+# We take a very conservative approach here, but it's worth it.
+# We move Makefile to Makefile.old here to avoid gnu make looping.
+$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
+	$(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
+	$(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
+	-$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+	-$(NOECHO) $(MV)   $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
+	- $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
+	$(PERLRUN) Makefile.PL 
+	$(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
+	$(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command.  <=="
+	false
+
+
+
+# --- MakeMaker staticmake section:
+
+# --- MakeMaker makeaperl section ---
+MAP_TARGET    = perl
+FULLPERL      = /usr/bin/perl
+
+$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+	$(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib
+	$(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+	$(NOECHO) $(PERLRUNINST) \
+		Makefile.PL DIR= \
+		MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+		MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+# --- MakeMaker test section:
+
+TEST_VERBOSE=0
+TEST_TYPE=test_$(LINKTYPE)
+TEST_FILE = test.pl
+TEST_FILES = 
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+
+test :: $(TEST_TYPE)
+	$(NOECHO) $(ECHO) 'No tests defined for $(NAME) extension.'
+
+test_dynamic :: pure_all
+
+testdb_dynamic :: pure_all
+	PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+test_ : test_dynamic
+
+test_static :: test_dynamic
+testdb_static :: testdb_dynamic
+
+
+# --- MakeMaker ppd section:
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd:
+	$(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="1,00,0,0">' > $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <AUTHOR></AUTHOR>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    <IMPLEMENTATION>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <ARCHITECTURE NAME="i586-linux-thread-multi" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '        <CODEBASE HREF="" />' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '    </IMPLEMENTATION>' >> $(DISTNAME).ppd
+	$(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
+
+
+# --- MakeMaker pm_to_blib section:
+
+pm_to_blib : $(TO_INST_PM)
+	$(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')' \
+	  V6evalTool.pm $(INST_LIB)/V6evalTool.pm 
+	$(NOECHO) $(TOUCH) pm_to_blib
+
+
+# --- MakeMaker selfdocument section:
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
diff -urN tahi-linux-3.0.12/script/pmod/V6evalTool/V6evalTool.pm tahi-linux-3.0.12-linux/script/pmod/V6evalTool/V6evalTool.pm
--- tahi-linux-3.0.12/script/pmod/V6evalTool/V6evalTool.pm	2006-03-09 10:10:57.000000000 +0100
+++ tahi-linux-3.0.12-linux/script/pmod/V6evalTool/V6evalTool.pm	2007-12-13 13:52:27.000000000 +0100
@@ -2721,12 +2721,12 @@
 	push(@PktbufPids,$ExecutingPid) if($ExecutingPid!=0);
 	foreach(@PktbufPids){
 		prTrace("Exiting... sending SIGTERM to $_");
-        	kill('TERM',$_) || prOut("Error in killing pktbuf pid=$_");
+        	kill('TERM',$_) || system("kill -n 15 $_") || prOut("Error in killing pktbuf pid=$_");
 	}
 	sleep 1;
 	foreach(@TcpdumpPids){
 		prTrace("Exiting... sending SIGTERM to $_");
-        	kill('INT',$_) || prOut("Error in killing tcpdump pid=$_");
+        	kill('INT',$_) || system("kill -n 15 $_") || prOut("Error in killing tcpdump pid=$_");
 	}
 
 	foreach my $key (keys(%SIG)) {
openSUSE Build Service is sponsored by