34
34
import com .cloud .network .dao .PhysicalNetworkVO ;
35
35
import com .cloud .network .element .NetrisProviderVO ;
36
36
import com .cloud .network .netris .NetrisService ;
37
+ import com .cloud .network .rules .FirewallRule ;
37
38
import com .cloud .network .vpc .StaticRoute ;
38
39
import com .cloud .network .vpc .Vpc ;
39
40
import com .cloud .network .vpc .dao .VpcDao ;
74
75
import org .apache .logging .log4j .Logger ;
75
76
76
77
import javax .inject .Inject ;
78
+
79
+ import java .util .ArrayList ;
77
80
import java .util .List ;
78
81
import java .util .Locale ;
79
82
import java .util .Objects ;
@@ -399,37 +402,46 @@ public boolean addFirewallRules(Network network, List<NetrisNetworkRule> firewal
399
402
String networkName = network .getName ();
400
403
NetrisNetworkRule rule = firewallRules .get (0 );
401
404
SDNProviderNetworkRule baseNetworkRule = rule .getBaseRule ();
402
- String trafficType = baseNetworkRule .getTrafficType (). toUpperCase ( Locale . ROOT ) ;
405
+ String trafficType = baseNetworkRule .getTrafficType ();
403
406
String sourcePrefix ;
404
407
String destinationPrefix ;
405
- if ("INGRESS" .equals (trafficType )) {
406
- sourcePrefix = baseNetworkRule .getSourceCidrList ().get (0 );
407
- destinationPrefix = network .getCidr ();
408
- } else {
409
- sourcePrefix = network .getCidr ();
410
- destinationPrefix = baseNetworkRule .getSourceCidrList ().get (0 );
411
- }
412
- String srcPort ;
413
- String dstPort ;
414
- if (baseNetworkRule .getPrivatePort ().contains ("-" )) {
415
- srcPort = baseNetworkRule .getPrivatePort ().split ("-" )[0 ];
416
- dstPort = baseNetworkRule .getPrivatePort ().split ("-" )[1 ];
417
- } else {
418
- srcPort = dstPort = baseNetworkRule .getPrivatePort ();
419
- }
420
- CreateOrUpdateNetrisACLCommand cmd = new CreateOrUpdateNetrisACLCommand (zoneId , accountId , domainId , networkName , networkId ,
421
- vpcName , vpcId , Objects .nonNull (vpcId ), rule .getAclAction ().name ().toLowerCase (Locale .ROOT ), getPrefix (sourcePrefix ), getPrefix (destinationPrefix ),
422
- "null" .equals (srcPort ) ? 1 : Integer .parseInt (srcPort ),
423
- "null" .equals (dstPort ) ? 65535 : Integer .parseInt (dstPort ), baseNetworkRule .getProtocol ());
424
- String aclName = String .format ("V%s-N%s-ACL%s" , vpcId , networkId , rule .getBaseRule ().getRuleId ());
425
- String netrisAclName = NetrisResourceObjectUtils .retrieveNetrisResourceObjectName (cmd , NetrisResourceObjectUtils .NetrisObjectType .ACL , aclName );
426
- cmd .setNetrisAclName (netrisAclName );
427
- cmd .setReason (rule .getReason ());
428
- if ("ICMP" .equals (baseNetworkRule .getProtocol ())) {
429
- cmd .setIcmpType (baseNetworkRule .getIcmpType ());
408
+ boolean result = true ;
409
+ List <String > sourceCidrs = baseNetworkRule .getSourceCidrList ();
410
+ int index = 1 ;
411
+ for (String sourceCidr : sourceCidrs ) {
412
+ if (FirewallRule .TrafficType .Ingress .name ().equalsIgnoreCase (trafficType )) {
413
+ sourcePrefix = sourceCidr ;
414
+ destinationPrefix = NetUtils .isValidIp4Cidr (sourcePrefix ) ? network .getCidr () : network .getIp6Cidr ();
415
+ } else {
416
+ destinationPrefix = sourceCidr ;
417
+ sourcePrefix = NetUtils .isValidIp4Cidr (destinationPrefix ) ? network .getCidr () : network .getIp6Cidr ();
418
+ }
419
+ String srcPort ;
420
+ String dstPort ;
421
+ if (baseNetworkRule .getPrivatePort ().contains ("-" )) {
422
+ srcPort = baseNetworkRule .getPrivatePort ().split ("-" )[0 ];
423
+ dstPort = baseNetworkRule .getPrivatePort ().split ("-" )[1 ];
424
+ } else {
425
+ srcPort = dstPort = baseNetworkRule .getPrivatePort ();
426
+ }
427
+ CreateOrUpdateNetrisACLCommand cmd = new CreateOrUpdateNetrisACLCommand (zoneId , accountId , domainId , networkName , networkId ,
428
+ vpcName , vpcId , Objects .nonNull (vpcId ), rule .getAclAction ().name ().toLowerCase (Locale .ROOT ), getPrefix (sourcePrefix ), getPrefix (destinationPrefix ),
429
+ "null" .equals (srcPort ) ? 1 : Integer .parseInt (srcPort ),
430
+ "null" .equals (dstPort ) ? 65535 : Integer .parseInt (dstPort ), baseNetworkRule .getProtocol ());
431
+ String aclName = String .format ("V%s-N%s-ACL%s" , vpcId , networkId , rule .getBaseRule ().getRuleId ());
432
+ if (sourceCidrs .size () > 1 ) {
433
+ aclName = aclName + "-" + index ++;
434
+ }
435
+ String netrisAclName = NetrisResourceObjectUtils .retrieveNetrisResourceObjectName (cmd , NetrisResourceObjectUtils .NetrisObjectType .ACL , aclName );
436
+ cmd .setNetrisAclName (netrisAclName );
437
+ cmd .setReason (rule .getReason ());
438
+ if (NetUtils .ICMP_PROTO .equals (baseNetworkRule .getProtocol ().toLowerCase (Locale .ROOT ))) {
439
+ cmd .setIcmpType (baseNetworkRule .getIcmpType ());
440
+ }
441
+ NetrisAnswer answer = sendNetrisCommand (cmd , zoneId );
442
+ result = result && answer .getResult ();
430
443
}
431
- NetrisAnswer answer = sendNetrisCommand (cmd , zoneId );
432
- return answer .getResult ();
444
+ return result ;
433
445
}
434
446
435
447
public static String getPrefix (String prefix ) {
@@ -452,12 +464,20 @@ public boolean deleteFirewallRules(Network network, List<NetrisNetworkRule> fire
452
464
vpcName = vpcDao .findById (vpcId ).getName ();
453
465
}
454
466
DeleteNetrisACLCommand cmd = new DeleteNetrisACLCommand (zoneId , accountId , domainId , networkName , networkId , Objects .nonNull (network .getVpcId ()), vpcId , vpcName );
455
- List <String > aclRuleNames = firewallRules .stream ()
456
- .map (rule -> {
457
- String aclName = String .format ("V%s-N%s-ACL%s" , vpcId , networkId , rule .getBaseRule ().getRuleId ());
458
- return NetrisResourceObjectUtils .retrieveNetrisResourceObjectName (cmd , NetrisResourceObjectUtils .NetrisObjectType .ACL , aclName );
459
- })
460
- .collect (Collectors .toList ());
467
+ List <String > aclRuleNames = new ArrayList <>();
468
+ for (NetrisNetworkRule rule : firewallRules ) {
469
+ List <String > sourceCidrs = rule .getBaseRule ().getSourceCidrList ();
470
+ int cidrCount = sourceCidrs .size ();
471
+ if (cidrCount > 1 ) {
472
+ for (int i = 0 ; i < cidrCount ; i ++) {
473
+ String aclName = String .format ("V%s-N%s-ACL%s-%d" , vpcId , networkId , rule .getBaseRule ().getRuleId (), (i + 1 ));
474
+ aclRuleNames .add (NetrisResourceObjectUtils .retrieveNetrisResourceObjectName (cmd , NetrisResourceObjectUtils .NetrisObjectType .ACL , aclName ));
475
+ }
476
+ } else {
477
+ String aclName = String .format ("V%s-N%s-ACL%s" , vpcId , networkId , rule .getBaseRule ().getRuleId ());
478
+ aclRuleNames .add (NetrisResourceObjectUtils .retrieveNetrisResourceObjectName (cmd , NetrisResourceObjectUtils .NetrisObjectType .ACL , aclName ));
479
+ }
480
+ }
461
481
cmd .setAclRuleNames (aclRuleNames );
462
482
463
483
NetrisAnswer answer = sendNetrisCommand (cmd , zoneId );
0 commit comments