Fix to install flow rule for floating IP-assigned VM in VLAN case.

Change-Id: Idf8da413292663bc5587d5bfe7f283f58ae11958
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
index dc7c877..7ed3438 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
@@ -315,47 +315,51 @@
                                                Network osNet,
                                                Set<OpenstackNode> gateways,
                                                boolean install) {
-        TrafficTreatment treatment;
 
         TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder()
                 .matchEthType(Ethernet.TYPE_IPV4)
                 .matchIPSrc(instPort.ipAddress().toIpPrefix())
                 .matchEthDst(Constants.DEFAULT_GATEWAY_MAC);
 
-        switch (osNet.getNetworkType()) {
-            case VXLAN:
-                sBuilder.matchTunnelId(Long.parseLong(osNet.getProviderSegID()));
-                break;
-            case VLAN:
-                sBuilder.matchVlanId(VlanId.vlanId(osNet.getProviderSegID()));
-                break;
-            default:
-                final String error = String.format(
-                        ERR_UNSUPPORTED_NET_TYPE,
-                        osNet.getNetworkType().toString());
-                throw new IllegalStateException(error);
-        }
+        TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
 
         OpenstackNode selectedGatewayNode = getGwByComputeDevId(gateways, instPort.deviceId());
 
         if (selectedGatewayNode == null) {
-            final String errorFormat = ERR_FLOW + "no gateway node selected";
-            throw new IllegalStateException(errorFormat);
+            log.warn(ERR_FLOW + "no gateway node selected");
         }
-        treatment = DefaultTrafficTreatment.builder()
-                .extension(buildExtension(
+
+        switch (osNet.getNetworkType()) {
+            case VXLAN:
+                if (osNodeService.node(instPort.deviceId()).tunnelPortNum() == null) {
+                    log.warn(ERR_FLOW + "no tunnel port");
+                    return;
+                }
+                sBuilder.matchTunnelId(Long.parseLong(osNet.getProviderSegID()));
+                tBuilder.extension(buildExtension(
                         deviceService,
                         instPort.deviceId(),
                         selectedGatewayNode.dataIp().getIp4Address()),
                         instPort.deviceId())
-                .setOutput(osNodeService.node(instPort.deviceId()).tunnelPortNum())
-                .build();
+                        .setOutput(osNodeService.node(instPort.deviceId()).tunnelPortNum());
+                break;
+            case VLAN:
+                if (osNodeService.node(instPort.deviceId()).vlanPortNum() == null) {
+                    log.warn(ERR_FLOW + "no vlan port");
+                    return;
+                }
+                sBuilder.matchVlanId(VlanId.vlanId(osNet.getProviderSegID()));
+                tBuilder.setOutput(osNodeService.node(instPort.deviceId()).vlanPortNum());
+                break;
+            default:
+                log.warn(ERR_FLOW + "no supported network type");
+        }
 
         osFlowRuleService.setRule(
                 appId,
                 instPort.deviceId(),
                 sBuilder.build(),
-                treatment,
+                tBuilder.build(),
                 PRIORITY_EXTERNAL_FLOATING_ROUTING_RULE,
                 ROUTING_TABLE,
                 install);