Firewall-Config-Dao
view release on metacpan or search on metacpan
lib/Firewall/Config/Dao/Parser/Role.pm view on Meta::CPAN
# config
push @addr, $addr->{config};
# address_set
push @addr, encode_json {mins => $addr->range->mins, maxs => $addr->range->maxs};
# address_range
my @address_range;
for ( my $i = 0; $i < $addr->range->mins->@*; $i++ ) {
push @address_range, "[" . $addr->range->mins->[$i] . "," . $addr->range->maxs->[$i] . "]";
}
push @addr, \@address_range;
# other
push @addr, encode_json {zone => $addr->{zone}};
# åå
¥æ°æ®å° $params
push $params->@*, \@addr;
}
# éåå°åç»å¯¹è±¡
for my $addrG ( values $self->{parser}{elements}{addressGroup}->%* ) {
# æé SQL VALUES
my @addr;
# fw_id
push @addr, $self->fwId;
# addr_name
push @addr, $addrG->{addrGroupName};
# ref_num
push @addr, $addrG->{refnum};
# config
push @addr, $addrG->{config};
# address_set
push @addr, encode_json {mins => $addrG->range->mins, maxs => $addrG->range->maxs};
# address_range
my @address_range;
for ( my $i = 0; $i < $addrG->range->mins->@*; $i++ ) {
push @address_range, "[" . $addrG->range->mins->[$i] . "," . $addrG->range->maxs->[$i] . "]";
}
push @addr, \@address_range;
# other
push @addr, encode_json {zone => $addrG->{zone}};
# å°æ°æ®åå
¥ $params
push $params->@*, \@addr;
}
$self->batchExecute( $params, $sql );
}
#------------------------------------------------------------------------------
# updateNetwork æ½è±¡æ¹éæ´æ°å¤§ç½ãç§ç½æ¥å£
#------------------------------------------------------------------------------
sub updateNetwork {
my ( $self, $zones, @tables ) = @_;
# å¦æä¼ å
¥çéåå¸å¼ç¨åèªå¨ä¿®æ£
confess "ç½ç»åºåå¿
é¡»æ¯åå¸å¼ç¨" if not ref $zones eq 'HASH' || not defined $zones;
confess "å¿
é¡»æä¾è³å°ä¸ä¸ªè¡¨åæ°æ®" if scalar @tables == 0;
# éåè¡¨åæ¹éæ´æ°æ°æ®
foreach my $table (@tables) {
# å¼å¸¸æ¦æª
confess "æ°æ®è¡¨ä¸å¹é
ï¼è¯·æ´ä½å¡«å" if $table !~ /fw_network_main|fw_network_private/i;
# å®ä¹ SQL è¯å¥
my $sql = "insert into $table (fw_id,zone,addr_range,addr_min,addr_max) values(?,?,?,?,?)";
# åå§ååé
my $params;
# æå
¥æ°æ®ä¹åå é¤å岿°æ®
$self->delete( where => {fw_id => $self->fwId}, table => $table );
# éåé²ç«å¢ç½ç»åºå
foreach my $zone ( keys $zones->%* ) {
# è¿éçåéåºäº Set 顺åºä¸è´
my $addrIprange = $zones->{$zone}->addrIpRange;
my $mins = $zones->{$zone}->mins;
my $maxs = $zones->{$zone}->maxs;
# COPY å¤å»å¯æ¬
my $copy_addrIprange = dclone $addrIprange;
my $copy_mins = dclone $mins;
my $copy_maxs = dclone $maxs;
# éå addrIprange æ°ç»
while ( $copy_addrIprange->@* ) {
# åå§ååé @zone
my @zone;
# fw_id
push @zone, $self->fwId;
# zone
push @zone, $zone;
# addr_range
push @zone, pop $copy_addrIprange->@*;
# addr_min
push @zone, pop $copy_mins->@*;
# addr_max
push @zone, pop $copy_maxs->@*;
# å°æ°æ®åå
¥ params
push $params->@*, \@zone;
}
}
# æå
¥å¿«ç
§æ°æ®
$self->batchExecute( $params, $sql );
}
}
#------------------------------------------------------------------------------
# updateStaticNatToNetwork æ½è±¡èªå¨ç»å® NAT ç½æ®µå°å¤§ç½æ°æ®è¡¨å
#------------------------------------------------------------------------------
sub updateStaticNatToNetwork {
my $self = shift;
# åå§ååé
my $params;
my $table = 'fw_network_main';
# å®ä¹ SQL è¯å¥
my $sql = "insert into $table (fw_id,zone,addr_range,addr_min,addr_max) values(?,?,?,?,?)";
# æ¥è¯¢é²ç«å¢å¿«ç
§ä¸çéæå°å转æ¢
for my $staticNat ( values $self->{parser}{elements}{staticNat}->%* ) {
# è¿éçåéåºäº Set 顺åºä¸è´
my $mins = $staticNat->natIpRange->mins;
my $maxs = $staticNat->natIpRange->maxs;
# COPY å¤å»å¯æ¬ | 深度å¤å»ãäºä¸å½±å
my $copy_mins = dclone $mins;
my $copy_maxs = dclone $maxs;
# éå $mins æ°ç»
while ( $copy_mins->@* ) {
# åå§ååé @network
my @network;
# 转æ¢ä¸º ipSet éå | æ°æ®åå¤
my $min = pop $copy_mins->@*;
my $max = pop $copy_maxs->@*;
my $ipMin = Firewall::Utils::Ip->new->changeIntToIp($min);
my $ipMax = Firewall::Utils::Ip->new->changeIntToIp($max);
my $addr_range = $ipMin . "-" . $ipMax;
# fw_id | æ°æ®å¡«å
é¶æ®µ
push @network, $self->fwId;
# zone
push @network, $staticNat->{realZone};
# å¡«å
addr_range
push @network, $addr_range;
# addr_min
push @network, $min;
# addr_max
push @network, $max;
# å°æ°æ®åå
¥ params
push $params->@*, \@network;
}
$self->batchExecute( $params, $sql );
}
}
#------------------------------------------------------------------------------
# saveFwNetworkPrivate ä¿å parser è§£æå°ç大ç½ãç§ç½å¯¹è±¡
#------------------------------------------------------------------------------
sub saveFwNetworkPrivate {
my $self = shift;
( run in 0.717 second using v1.01-cache-2.11-cpan-9581c071862 )