ReactiveForwarding shouldn't always match ethertype or ipproto

Change-Id: Ie8fad0186f5a41596877463c0293748e6cf2d74f
diff --git a/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java b/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
index d4a7c0e..4389ff5 100644
--- a/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
+++ b/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
@@ -15,12 +15,6 @@
  */
 package org.onosproject.fwd;
 
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Dictionary;
-import java.util.Set;
-import static com.google.common.base.Strings.isNullOrEmpty;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -29,14 +23,14 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onlab.packet.Ethernet;
-import org.onlab.packet.IPv4;
-import org.onlab.packet.IPv6;
-import org.onlab.packet.TCP;
-import org.onlab.packet.UDP;
 import org.onlab.packet.ICMP;
 import org.onlab.packet.ICMP6;
+import org.onlab.packet.IPv4;
+import org.onlab.packet.IPv6;
 import org.onlab.packet.Ip4Prefix;
 import org.onlab.packet.Ip6Prefix;
+import org.onlab.packet.TCP;
+import org.onlab.packet.UDP;
 import org.onlab.packet.VlanId;
 import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.core.ApplicationId;
@@ -62,6 +56,12 @@
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
+import java.util.Dictionary;
+import java.util.Set;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static org.slf4j.LoggerFactory.getLogger;
+
 /**
  * Sample reactive forwarding application.
  */
@@ -485,8 +485,7 @@
         } else {
             builder.matchInPort(context.inPacket().receivedFrom().port())
                     .matchEthSrc(inPkt.getSourceMAC())
-                    .matchEthDst(inPkt.getDestinationMAC())
-                    .matchEthType(inPkt.getEtherType());
+                    .matchEthDst(inPkt.getDestinationMAC());
 
             // If configured Match Vlan ID
             if (matchVlanId && inPkt.getVlanID() != Ethernet.VLAN_UNTAGGED) {
@@ -506,9 +505,9 @@
                 Ip4Prefix matchIp4DstPrefix =
                     Ip4Prefix.valueOf(ipv4Packet.getDestinationAddress(),
                                       Ip4Prefix.MAX_MASK_LENGTH);
-                builder.matchIPSrc(matchIp4SrcPrefix)
-                        .matchIPDst(matchIp4DstPrefix)
-                        .matchIPProtocol(ipv4Protocol);
+                builder.matchEthType(inPkt.getEtherType())
+                        .matchIPSrc(matchIp4SrcPrefix)
+                        .matchIPDst(matchIp4DstPrefix);
 
                 if (matchIpv4Dscp) {
                     byte dscp = ipv4Packet.getDscp();
@@ -518,17 +517,20 @@
 
                 if (matchTcpUdpPorts && ipv4Protocol == IPv4.PROTOCOL_TCP) {
                     TCP tcpPacket = (TCP) ipv4Packet.getPayload();
-                    builder.matchTcpSrc(tcpPacket.getSourcePort())
+                    builder.matchIPProtocol(ipv4Protocol)
+                            .matchTcpSrc(tcpPacket.getSourcePort())
                             .matchTcpDst(tcpPacket.getDestinationPort());
                 }
                 if (matchTcpUdpPorts && ipv4Protocol == IPv4.PROTOCOL_UDP) {
                     UDP udpPacket = (UDP) ipv4Packet.getPayload();
-                    builder.matchUdpSrc(udpPacket.getSourcePort())
+                    builder.matchIPProtocol(ipv4Protocol)
+                            .matchUdpSrc(udpPacket.getSourcePort())
                             .matchUdpDst(udpPacket.getDestinationPort());
                 }
                 if (matchIcmpFields && ipv4Protocol == IPv4.PROTOCOL_ICMP) {
                     ICMP icmpPacket = (ICMP) ipv4Packet.getPayload();
-                    builder.matchIcmpType(icmpPacket.getIcmpType())
+                    builder.matchIPProtocol(ipv4Protocol)
+                            .matchIcmpType(icmpPacket.getIcmpType())
                             .matchIcmpCode(icmpPacket.getIcmpCode());
                 }
             }
@@ -547,8 +549,7 @@
                     Ip6Prefix.valueOf(ipv6Packet.getDestinationAddress(),
                                       Ip6Prefix.MAX_MASK_LENGTH);
                 builder.matchIPv6Src(matchIp6SrcPrefix)
-                        .matchIPv6Dst(matchIp6DstPrefix)
-                        .matchIPProtocol(ipv6NextHeader);
+                        .matchIPv6Dst(matchIp6DstPrefix);
 
                 if (matchIpv6FlowLabel) {
                     builder.matchIPv6FlowLabel(ipv6Packet.getFlowLabel());
@@ -556,17 +557,20 @@
 
                 if (matchTcpUdpPorts && ipv6NextHeader == IPv6.PROTOCOL_TCP) {
                     TCP tcpPacket = (TCP) ipv6Packet.getPayload();
-                    builder.matchTcpSrc(tcpPacket.getSourcePort())
+                    builder.matchIPProtocol(ipv6NextHeader)
+                            .matchTcpSrc(tcpPacket.getSourcePort())
                             .matchTcpDst(tcpPacket.getDestinationPort());
                 }
                 if (matchTcpUdpPorts && ipv6NextHeader == IPv6.PROTOCOL_UDP) {
                     UDP udpPacket = (UDP) ipv6Packet.getPayload();
-                    builder.matchUdpSrc(udpPacket.getSourcePort())
+                    builder.matchIPProtocol(ipv6NextHeader)
+                            .matchUdpSrc(udpPacket.getSourcePort())
                             .matchUdpDst(udpPacket.getDestinationPort());
                 }
                 if (matchIcmpFields && ipv6NextHeader == IPv6.PROTOCOL_ICMP6) {
                     ICMP6 icmp6Packet = (ICMP6) ipv6Packet.getPayload();
-                    builder.matchIcmpv6Type(icmp6Packet.getIcmpType())
+                    builder.matchIPProtocol(ipv6NextHeader)
+                            .matchIcmpv6Type(icmp6Packet.getIcmpType())
                             .matchIcmpv6Code(icmp6Packet.getIcmpCode());
                 }
             }