Jonathan Hart
Committed by Gerrit Code Review

ReactiveForwarding shouldn't always match ethertype or ipproto

Change-Id: Ie8fad0186f5a41596877463c0293748e6cf2d74f
...@@ -15,12 +15,6 @@ ...@@ -15,12 +15,6 @@
15 */ 15 */
16 package org.onosproject.fwd; 16 package org.onosproject.fwd;
17 17
18 -import static org.slf4j.LoggerFactory.getLogger;
19 -
20 -import java.util.Dictionary;
21 -import java.util.Set;
22 -import static com.google.common.base.Strings.isNullOrEmpty;
23 -
24 import org.apache.felix.scr.annotations.Activate; 18 import org.apache.felix.scr.annotations.Activate;
25 import org.apache.felix.scr.annotations.Component; 19 import org.apache.felix.scr.annotations.Component;
26 import org.apache.felix.scr.annotations.Deactivate; 20 import org.apache.felix.scr.annotations.Deactivate;
...@@ -29,14 +23,14 @@ import org.apache.felix.scr.annotations.Property; ...@@ -29,14 +23,14 @@ import org.apache.felix.scr.annotations.Property;
29 import org.apache.felix.scr.annotations.Reference; 23 import org.apache.felix.scr.annotations.Reference;
30 import org.apache.felix.scr.annotations.ReferenceCardinality; 24 import org.apache.felix.scr.annotations.ReferenceCardinality;
31 import org.onlab.packet.Ethernet; 25 import org.onlab.packet.Ethernet;
32 -import org.onlab.packet.IPv4;
33 -import org.onlab.packet.IPv6;
34 -import org.onlab.packet.TCP;
35 -import org.onlab.packet.UDP;
36 import org.onlab.packet.ICMP; 26 import org.onlab.packet.ICMP;
37 import org.onlab.packet.ICMP6; 27 import org.onlab.packet.ICMP6;
28 +import org.onlab.packet.IPv4;
29 +import org.onlab.packet.IPv6;
38 import org.onlab.packet.Ip4Prefix; 30 import org.onlab.packet.Ip4Prefix;
39 import org.onlab.packet.Ip6Prefix; 31 import org.onlab.packet.Ip6Prefix;
32 +import org.onlab.packet.TCP;
33 +import org.onlab.packet.UDP;
40 import org.onlab.packet.VlanId; 34 import org.onlab.packet.VlanId;
41 import org.onosproject.cfg.ComponentConfigService; 35 import org.onosproject.cfg.ComponentConfigService;
42 import org.onosproject.core.ApplicationId; 36 import org.onosproject.core.ApplicationId;
...@@ -62,6 +56,12 @@ import org.onosproject.net.topology.TopologyService; ...@@ -62,6 +56,12 @@ import org.onosproject.net.topology.TopologyService;
62 import org.osgi.service.component.ComponentContext; 56 import org.osgi.service.component.ComponentContext;
63 import org.slf4j.Logger; 57 import org.slf4j.Logger;
64 58
59 +import java.util.Dictionary;
60 +import java.util.Set;
61 +
62 +import static com.google.common.base.Strings.isNullOrEmpty;
63 +import static org.slf4j.LoggerFactory.getLogger;
64 +
65 /** 65 /**
66 * Sample reactive forwarding application. 66 * Sample reactive forwarding application.
67 */ 67 */
...@@ -485,8 +485,7 @@ public class ReactiveForwarding { ...@@ -485,8 +485,7 @@ public class ReactiveForwarding {
485 } else { 485 } else {
486 builder.matchInPort(context.inPacket().receivedFrom().port()) 486 builder.matchInPort(context.inPacket().receivedFrom().port())
487 .matchEthSrc(inPkt.getSourceMAC()) 487 .matchEthSrc(inPkt.getSourceMAC())
488 - .matchEthDst(inPkt.getDestinationMAC()) 488 + .matchEthDst(inPkt.getDestinationMAC());
489 - .matchEthType(inPkt.getEtherType());
490 489
491 // If configured Match Vlan ID 490 // If configured Match Vlan ID
492 if (matchVlanId && inPkt.getVlanID() != Ethernet.VLAN_UNTAGGED) { 491 if (matchVlanId && inPkt.getVlanID() != Ethernet.VLAN_UNTAGGED) {
...@@ -506,9 +505,9 @@ public class ReactiveForwarding { ...@@ -506,9 +505,9 @@ public class ReactiveForwarding {
506 Ip4Prefix matchIp4DstPrefix = 505 Ip4Prefix matchIp4DstPrefix =
507 Ip4Prefix.valueOf(ipv4Packet.getDestinationAddress(), 506 Ip4Prefix.valueOf(ipv4Packet.getDestinationAddress(),
508 Ip4Prefix.MAX_MASK_LENGTH); 507 Ip4Prefix.MAX_MASK_LENGTH);
509 - builder.matchIPSrc(matchIp4SrcPrefix) 508 + builder.matchEthType(inPkt.getEtherType())
510 - .matchIPDst(matchIp4DstPrefix) 509 + .matchIPSrc(matchIp4SrcPrefix)
511 - .matchIPProtocol(ipv4Protocol); 510 + .matchIPDst(matchIp4DstPrefix);
512 511
513 if (matchIpv4Dscp) { 512 if (matchIpv4Dscp) {
514 byte dscp = ipv4Packet.getDscp(); 513 byte dscp = ipv4Packet.getDscp();
...@@ -518,17 +517,20 @@ public class ReactiveForwarding { ...@@ -518,17 +517,20 @@ public class ReactiveForwarding {
518 517
519 if (matchTcpUdpPorts && ipv4Protocol == IPv4.PROTOCOL_TCP) { 518 if (matchTcpUdpPorts && ipv4Protocol == IPv4.PROTOCOL_TCP) {
520 TCP tcpPacket = (TCP) ipv4Packet.getPayload(); 519 TCP tcpPacket = (TCP) ipv4Packet.getPayload();
521 - builder.matchTcpSrc(tcpPacket.getSourcePort()) 520 + builder.matchIPProtocol(ipv4Protocol)
521 + .matchTcpSrc(tcpPacket.getSourcePort())
522 .matchTcpDst(tcpPacket.getDestinationPort()); 522 .matchTcpDst(tcpPacket.getDestinationPort());
523 } 523 }
524 if (matchTcpUdpPorts && ipv4Protocol == IPv4.PROTOCOL_UDP) { 524 if (matchTcpUdpPorts && ipv4Protocol == IPv4.PROTOCOL_UDP) {
525 UDP udpPacket = (UDP) ipv4Packet.getPayload(); 525 UDP udpPacket = (UDP) ipv4Packet.getPayload();
526 - builder.matchUdpSrc(udpPacket.getSourcePort()) 526 + builder.matchIPProtocol(ipv4Protocol)
527 + .matchUdpSrc(udpPacket.getSourcePort())
527 .matchUdpDst(udpPacket.getDestinationPort()); 528 .matchUdpDst(udpPacket.getDestinationPort());
528 } 529 }
529 if (matchIcmpFields && ipv4Protocol == IPv4.PROTOCOL_ICMP) { 530 if (matchIcmpFields && ipv4Protocol == IPv4.PROTOCOL_ICMP) {
530 ICMP icmpPacket = (ICMP) ipv4Packet.getPayload(); 531 ICMP icmpPacket = (ICMP) ipv4Packet.getPayload();
531 - builder.matchIcmpType(icmpPacket.getIcmpType()) 532 + builder.matchIPProtocol(ipv4Protocol)
533 + .matchIcmpType(icmpPacket.getIcmpType())
532 .matchIcmpCode(icmpPacket.getIcmpCode()); 534 .matchIcmpCode(icmpPacket.getIcmpCode());
533 } 535 }
534 } 536 }
...@@ -547,8 +549,7 @@ public class ReactiveForwarding { ...@@ -547,8 +549,7 @@ public class ReactiveForwarding {
547 Ip6Prefix.valueOf(ipv6Packet.getDestinationAddress(), 549 Ip6Prefix.valueOf(ipv6Packet.getDestinationAddress(),
548 Ip6Prefix.MAX_MASK_LENGTH); 550 Ip6Prefix.MAX_MASK_LENGTH);
549 builder.matchIPv6Src(matchIp6SrcPrefix) 551 builder.matchIPv6Src(matchIp6SrcPrefix)
550 - .matchIPv6Dst(matchIp6DstPrefix) 552 + .matchIPv6Dst(matchIp6DstPrefix);
551 - .matchIPProtocol(ipv6NextHeader);
552 553
553 if (matchIpv6FlowLabel) { 554 if (matchIpv6FlowLabel) {
554 builder.matchIPv6FlowLabel(ipv6Packet.getFlowLabel()); 555 builder.matchIPv6FlowLabel(ipv6Packet.getFlowLabel());
...@@ -556,17 +557,20 @@ public class ReactiveForwarding { ...@@ -556,17 +557,20 @@ public class ReactiveForwarding {
556 557
557 if (matchTcpUdpPorts && ipv6NextHeader == IPv6.PROTOCOL_TCP) { 558 if (matchTcpUdpPorts && ipv6NextHeader == IPv6.PROTOCOL_TCP) {
558 TCP tcpPacket = (TCP) ipv6Packet.getPayload(); 559 TCP tcpPacket = (TCP) ipv6Packet.getPayload();
559 - builder.matchTcpSrc(tcpPacket.getSourcePort()) 560 + builder.matchIPProtocol(ipv6NextHeader)
561 + .matchTcpSrc(tcpPacket.getSourcePort())
560 .matchTcpDst(tcpPacket.getDestinationPort()); 562 .matchTcpDst(tcpPacket.getDestinationPort());
561 } 563 }
562 if (matchTcpUdpPorts && ipv6NextHeader == IPv6.PROTOCOL_UDP) { 564 if (matchTcpUdpPorts && ipv6NextHeader == IPv6.PROTOCOL_UDP) {
563 UDP udpPacket = (UDP) ipv6Packet.getPayload(); 565 UDP udpPacket = (UDP) ipv6Packet.getPayload();
564 - builder.matchUdpSrc(udpPacket.getSourcePort()) 566 + builder.matchIPProtocol(ipv6NextHeader)
567 + .matchUdpSrc(udpPacket.getSourcePort())
565 .matchUdpDst(udpPacket.getDestinationPort()); 568 .matchUdpDst(udpPacket.getDestinationPort());
566 } 569 }
567 if (matchIcmpFields && ipv6NextHeader == IPv6.PROTOCOL_ICMP6) { 570 if (matchIcmpFields && ipv6NextHeader == IPv6.PROTOCOL_ICMP6) {
568 ICMP6 icmp6Packet = (ICMP6) ipv6Packet.getPayload(); 571 ICMP6 icmp6Packet = (ICMP6) ipv6Packet.getPayload();
569 - builder.matchIcmpv6Type(icmp6Packet.getIcmpType()) 572 + builder.matchIPProtocol(ipv6NextHeader)
573 + .matchIcmpv6Type(icmp6Packet.getIcmpType())
570 .matchIcmpv6Code(icmp6Packet.getIcmpCode()); 574 .matchIcmpv6Code(icmp6Packet.getIcmpCode());
571 } 575 }
572 } 576 }
......