0% found this document useful (0 votes)
158 views

Idsreg

This Perl script defines constants for register addresses and provides subroutines for reading from and writing to those registers to configure and query an intrusion detection system. It can reset the matches counter, set a pattern by converting an ASCII string into register values, and display the current matches count. It parses command line arguments to determine which action to perform.

Uploaded by

KISHORHASYAGAR
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
158 views

Idsreg

This Perl script defines constants for register addresses and provides subroutines for reading from and writing to those registers to configure and query an intrusion detection system. It can reset the matches counter, set a pattern by converting an ASCII string into register values, and display the current matches count. It parses command line arguments to determine which action to perform.

Uploaded by

KISHORHASYAGAR
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

#!

/usr/bin/perl -w
use lib "/usr/local/netfpga/lib/Perl5";
use strict;
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my

$IDS_PATTERN_HI_REG1 = 0x2000300;
$IDS_PATTERN_LO_REG1 = 0x2000304;
$IDS_PATTERN_HI_REG2 = 0x2000308;
$IDS_PATTERN_LO_REG2 = 0x200030c;
$IDS_PATTERN_HI_REG3 = 0x2000310;
$IDS_PATTERN_LO_REG3 = 0x2000314;
$IDS_PATTERN_HI_REG4 = 0x2000318;
$IDS_PATTERN_LO_REG4 = 0x200031c;
$IDS_PATTERN_HI_REG5 = 0x2000320;
$IDS_PATTERN_LO_REG5 = 0x2000324;
$IDS_PATTERN_HI_REG6 = 0x2000328;
$IDS_PATTERN_LO_REG6 = 0x200032c;
$IDS_PATTERN_HI_REG7 = 0x2000330;
$IDS_PATTERN_LO_REG7 = 0x2000334;
$IDS_PATTERN_HI_REG8 = 0x2000338;
$IDS_PATTERN_LO_REG8 = 0x200033c;
$IDS_PATTERN_HI_REG9 = 0x2000340;
$IDS_PATTERN_LO_REG9 = 0x2000344;
$IDS_PATTERN_HI_REG10 = 0x2000348;
$IDS_PATTERN_LO_REG10 = 0x200034c;
$IDS_PATTERN_HI_REG11 = 0x2000350;
$IDS_PATTERN_LO_REG11 = 0x2000354;
$IDS_PATTERN_HI_REG12 = 0x2000358;
$IDS_PATTERN_LO_REG12 = 0x200035c;
$IDS_PATTERN_HI_REG13 = 0x2000360;
$IDS_PATTERN_LO_REG13 = 0x2000364;
$IDS_PATTERN_HI_REG14 = 0x2000368;
$IDS_PATTERN_LO_REG14 = 0x200036c;
$IDS_PATTERN_HI_REG15 = 0x2000370;
$IDS_PATTERN_LO_REG15 = 0x2000374;
$IDS_PATTERN_HI_REG16 = 0x2000378;
$IDS_PATTERN_LO_REG16 = 0x200037c;
$IDS_PATTERN_HI_REG17 = 0x2000380;
$IDS_PATTERN_LO_REG17 = 0x2000384;
$IDS_PATTERN_HI_REG18 = 0x2000388;
$IDS_PATTERN_LO_REG18 = 0x200038c;
$IDS_PATTERN_HI_REG19 = 0x2000390;
$IDS_PATTERN_LO_REG19 = 0x2000394;
$IDS_PATTERN_HI_REG20 = 0x2000398;
$IDS_PATTERN_LO_REG20 = 0x200039c;
$IDS_IDS_CMD_REG = 0x2000308;
$IDS_MATCHES_REG = 0x200030c;

sub regwrite {
my( $addr, $value ) = @_;
my $cmd = sprintf( "regwrite $addr 0x%08x", $value );
my $result = `$cmd`;
# print "Ran command '$cmd' and got result '$result'\n";
}
sub regread {
my( $addr ) = @_;
my $cmd = sprintf( "regread $addr" );
my @out = `$cmd`;
my $result = $out[0];
if ( $result =~ m/Reg (0x[0-9a-f]+) \((\d+)\):\s+(0x[0-9a-f]+) \((\d+)\)/ ) {

$result = $3;
}
return $result;
}
sub idsreset {
regwrite( $IDS_IDS_CMD_REG, 0x1 );
regwrite( $IDS_IDS_CMD_REG, 0x0 );
}
sub write_pattern {
my($hi, $lo) = @_;
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,

$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);

}
# Turns an ascii string into a (pattern_hi,pattern_lo) list
sub pattern_from_ascii {
my( $patstr ) = @_;
my @chars = split(//, $patstr);
my @ints = map { ord( $_ ) } @chars;
my $validBytes = $#ints + 1;
my $hi = 0;
my $lo = 0;
for (my $i = 0; $i <= 6; $i++) {

if ($i < $validBytes) {


my $bit = 1 << (6 - $i);
# print "Setting mask bit $bit for byte $i\n";
$hi |= ($bit << 24);
if ($i <= 2) {
$hi |= ($ints[$i] << (8 * (2 - $i)));
} else {
my $pos = $i - 3;
$lo |= ($ints[$i] << (8 * (3 - $pos)));
}
}
}
return ($hi, $lo);
}
sub usage {
print "Usage: idsreg <cmd> <cmd
print " Commands:\n";
print "
reset
print "
pattern <string>
print "
matches
}

options>\n";
resets the matches counter\n";
set a pattern from ASCII\n";
displays the matches register\n";

my $numargs = $#ARGV + 1;
if( $numargs < 1 ) {
usage();
exit(1);
}
my $cmd = $ARGV[0];
if ($cmd eq "reset") {
idsreset();
} elsif ($cmd eq "pattern") {
if ($numargs < 2) {
usage();
exit(1);
}
my $str = $ARGV[1];
my($hi, $lo) = pattern_from_ascii($str);
printf("Setting pattern hi=0x%08x, lo=0x%08x\n", $hi, $lo);
write_pattern($hi, $lo);
} elsif ($cmd eq "matches") {
my $matches = regread( $IDS_MATCHES_REG );
print $matches,"\n\n";
} elsif ($cmd eq "allregs") {
print "MATCHES:
", regread( $IDS_MATCHES_REG ), "\n";
print "PATTERN_HI: ", regread( $IDS_PATTERN_HI_REG ), "\n";
print "PATTERN_LO: ", regread( $IDS_PATTERN_LO_REG ), "\n";
print "COMMAND:
", regread( $IDS_IDS_CMD_REG ), "\n";
} else {
print "Unrecognized command $cmd\n";
usage();
exit(1)
}

You might also like