Firewall-Policy-Designer
view release on metacpan or search on metacpan
lib/Firewall/Policy/Designer/Huawei.pm view on Meta::CPAN
package Firewall::Policy::Designer::Huawei;
#------------------------------------------------------------------------------
# å¼ç¨åºç¡æ¨¡å
#------------------------------------------------------------------------------
use Moose;
use namespace::autoclean;
#------------------------------------------------------------------------------
# å¼ç¨é¡¹ç®æ¨¡å
#------------------------------------------------------------------------------
use Firewall::Utils::Ip;
use Firewall::Utils::Set;
use Firewall::Policy::Searcher::Report::FwInfo;
#------------------------------------------------------------------------------
# ç»§æ¿ Firewall::Policy::Designer::Role éç¨å±æ§
#------------------------------------------------------------------------------
# with 'Firewall::Policy::Designer::Role';
#------------------------------------------------------------------------------
# Firewall::Policy::Designer::Huawei éç¨å±æ§
#------------------------------------------------------------------------------
has dbi => ( is => 'ro', does => 'Firewall::DBI::Role', required => 1, );
has searcherReportFwInfo => ( is => 'ro', isa => 'Firewall::Policy::Searcher::Report::FwInfo', required => 1, );
has commandText => ( is => 'ro', isa => 'ArrayRef[Str]', default => sub { [] }, );
#------------------------------------------------------------------------------
# addToCommandText å commandText 屿§æ¨éå½ä»¤è¡
#------------------------------------------------------------------------------
sub addToCommandText {
my ( $self, @commands ) = @_;
push @{$self->{commandText}}, @commands;
}
#------------------------------------------------------------------------------
# design çç¥è®¾è®¡å½æ°å
¥å£ï¼å
¥å为é²ç«å¢çç¥æ¥å -> searcherReportFwInfo
#------------------------------------------------------------------------------
sub design {
my $self = shift;
# åå§åé²ç«å¢çç¥æ¥åä¸ type action 屿§
my $type = $self->{searcherReportFwInfo}{type} if exists $self->{searcherReportFwInfo}{type};
my $action = $self->{searcherReportFwInfo}{action} if exists $self->{searcherReportFwInfo}{action};
# æ
åµ1ï¼å½ç±»å为 newï¼åæ°å»ºçç¥
if ( $type eq "new" ) {
$self->createRule();
}
# æ
åµ2ï¼å½ç±»å为 modifyï¼åä¿®æ¹çç¥
elsif ( $type eq "modify" ) {
$self->createRule();
}
# æ
åµ3ï¼å½ç±»å为 ignoreï¼è¿éè¦æ£æ¥æ¯å¦åå¨ NAT çç¥
elsif ( $type eq "ignore" ) {
my $param = $action->{new} if defined $action;
for my $natDirection ( keys %{$param} ) {
if ( $natDirection eq "natSrc" || $natDirection eq "natDst" ) {
$self->checkAndCreateNat( $param->{$natDirection}, $type );
}
}
}
# å
¶ä»æ
åµï¼æåºå¼å¸¸ï¼å®ä½æé¤
else {
warn "ERROR: searcherReportFwInfo->type(" . $self->{"searcherReportFwInfo"}{"type"} . ") must be 'new' or 'modify'";
confess $@;
}
# æ¼æ¥æ°ç»ä¸ºå符串并è¿å
return join( "\n", @{$self->{"commandText"}} );
} ## end sub design
#------------------------------------------------------------------------------
# design çç¥è®¾è®¡å½æ°å
¥å£ï¼å
¥å为é²ç«å¢çç¥æ¥å -> searcherReportFwInfo
#------------------------------------------------------------------------------
sub createRule {
my $self = shift;
# åå§å commands
my @commands;
# 夿æ¯å¦éè¦ nat
my $action = $self->searcherReportFwInfo->action->{new};
( run in 0.651 second using v1.01-cache-2.11-cpan-39bf76dae61 )