Fix: resolve a NPE occurs when getArpMode() returns null value
1. Add missing SG flow rules at receiving of node COMPLETE event
2. Fix typos in routing handler
Change-Id: Id1e7d6217f55f2ef134873c98d4bc763a21fcfb5
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
index c711ded..304258f 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
@@ -871,6 +871,11 @@
}
private void setDefaultArpRule(OpenstackNode osNode, boolean install) {
+
+ if (getArpMode() == null) {
+ return;
+ }
+
switch (getArpMode()) {
case ARP_PROXY_MODE:
setDefaultArpRuleForProxyMode(osNode, install);
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
index 16a3e28..a831216 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
@@ -478,15 +478,15 @@
private void setInternalRoutes(Router osRouter, Subnet updatedSubnet, boolean install) {
Network updatedNetwork = osNetworkAdminService.network(updatedSubnet.getNetworkId());
Set<Subnet> routableSubnets = routableSubnets(osRouter, updatedSubnet.getId());
- String updatedSegmendId = getSegmentId(updatedSubnet);
+ String updatedSegmentId = getSegmentId(updatedSubnet);
// installs rule from/to my subnet intentionally to fix ICMP failure
// to my subnet gateway if no external gateway added to the router
osNodeService.completeNodes(COMPUTE).forEach(cNode -> {
setInternalRouterRules(
cNode.intgBridge(),
- updatedSegmendId,
- updatedSegmendId,
+ updatedSegmentId,
+ updatedSegmentId,
IpPrefix.valueOf(updatedSubnet.getCidr()),
IpPrefix.valueOf(updatedSubnet.getCidr()),
updatedNetwork.getNetworkType(),
@@ -496,7 +496,7 @@
routableSubnets.forEach(subnet -> {
setInternalRouterRules(
cNode.intgBridge(),
- updatedSegmendId,
+ updatedSegmentId,
getSegmentId(subnet),
IpPrefix.valueOf(updatedSubnet.getCidr()),
IpPrefix.valueOf(subnet.getCidr()),
@@ -506,7 +506,7 @@
setInternalRouterRules(
cNode.intgBridge(),
getSegmentId(subnet),
- updatedSegmendId,
+ updatedSegmentId,
IpPrefix.valueOf(subnet.getCidr()),
IpPrefix.valueOf(updatedSubnet.getCidr()),
updatedNetwork.getNetworkType(),
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
index 11b22fd..672ce8b 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
@@ -61,7 +61,6 @@
import org.onosproject.openstacknetworking.api.OpenstackSecurityGroupListener;
import org.onosproject.openstacknetworking.api.OpenstackSecurityGroupService;
import org.onosproject.openstacknetworking.util.RulePopulatorUtil;
-import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeEvent;
import org.onosproject.openstacknode.api.OpenstackNodeListener;
import org.onosproject.openstacknode.api.OpenstackNodeService;
@@ -611,23 +610,21 @@
private void resetSecurityGroupRules() {
if (useSecurityGroup) {
- osNodeService.completeNodes(OpenstackNode.NodeType.COMPUTE)
- .forEach(node -> osFlowRuleService
- .setUpTableMissEntry(node.intgBridge(), ACL_TABLE));
+ osNodeService.completeNodes(COMPUTE).forEach(node -> {
+ osFlowRuleService.setUpTableMissEntry(node.intgBridge(), ACL_TABLE);
+ initializeConnTrackTable(node.intgBridge(), true);
+ });
+
securityGroupService.securityGroups().forEach(securityGroup ->
securityGroup.getRules().forEach(this::securityGroupRuleAdded));
- osNodeService.nodes().stream()
- .filter(node -> node.type().equals(OpenstackNode.NodeType.COMPUTE))
- .forEach(node -> initializeConnTrackTable(node .intgBridge(), true));
} else {
- osNodeService.completeNodes(OpenstackNode.NodeType.COMPUTE)
- .forEach(node -> osFlowRuleService
- .connectTables(node.intgBridge(), ACL_TABLE, JUMP_TABLE));
+ osNodeService.completeNodes(COMPUTE).forEach(node -> {
+ osFlowRuleService.connectTables(node.intgBridge(), ACL_TABLE, JUMP_TABLE);
+ initializeConnTrackTable(node.intgBridge(), false);
+ });
+
securityGroupService.securityGroups().forEach(securityGroup ->
securityGroup.getRules().forEach(this::securityGroupRuleRemoved));
- osNodeService.nodes().stream()
- .filter(node -> node.type().equals(OpenstackNode.NodeType.COMPUTE))
- .forEach(node -> initializeConnTrackTable(node.intgBridge(), false));
}
log.info("Reset security group info " +
@@ -933,22 +930,9 @@
@Override
public void event(OpenstackNodeEvent event) {
- OpenstackNode osNode = event.subject();
-
switch (event.type()) {
case OPENSTACK_NODE_COMPLETE:
- eventExecutor.execute(() -> {
- try {
- if (useSecurityGroup) {
- initializeConnTrackTable(osNode.intgBridge(), true);
- log.info("SG table initialization : {} is done",
- osNode.intgBridge());
- }
- } catch (IllegalArgumentException e) {
- log.error("ACL table initialization error : {}",
- e.getMessage());
- }
- });
+ resetSecurityGroupRules();
break;
case OPENSTACK_NODE_CREATED:
case OPENSTACK_NODE_REMOVED: