BitOhenry
Committed by Gerrit Code Review

[ONOS-3485] Create arp_op selector and add operation to provifer of

openflow to onos

Change-Id: I4dd0a9d7eb66092d7633e288a1fc94ad66eb4810
...@@ -374,6 +374,11 @@ public final class DefaultTrafficSelector implements TrafficSelector { ...@@ -374,6 +374,11 @@ public final class DefaultTrafficSelector implements TrafficSelector {
374 } 374 }
375 375
376 @Override 376 @Override
377 + public Builder matchArpOp(int arpOp) {
378 + return add(Criteria.matchArpOp(arpOp));
379 + }
380 +
381 + @Override
377 public TrafficSelector build() { 382 public TrafficSelector build() {
378 return new DefaultTrafficSelector(ImmutableSet.copyOf(selector.values())); 383 return new DefaultTrafficSelector(ImmutableSet.copyOf(selector.values()));
379 } 384 }
......
...@@ -419,6 +419,14 @@ public interface TrafficSelector { ...@@ -419,6 +419,14 @@ public interface TrafficSelector {
419 Builder matchArpSha(MacAddress addr); 419 Builder matchArpSha(MacAddress addr);
420 420
421 /** 421 /**
422 + * Matches a arp operation type.
423 + *
424 + * @param arpOp a arp operation type
425 + * @return a selection builder
426 + */
427 + Builder matchArpOp(int arpOp);
428 +
429 + /**
422 * Builds an immutable traffic selector. 430 * Builds an immutable traffic selector.
423 * 431 *
424 * @return traffic selector 432 * @return traffic selector
......
...@@ -708,6 +708,10 @@ public class FlowEntryBuilder { ...@@ -708,6 +708,10 @@ public class FlowEntryBuilder {
708 long tunnelId = match.get(MatchField.TUNNEL_ID).getValue(); 708 long tunnelId = match.get(MatchField.TUNNEL_ID).getValue();
709 builder.matchTunnelId(tunnelId); 709 builder.matchTunnelId(tunnelId);
710 break; 710 break;
711 + case ARP_OP:
712 + int arpOp = match.get(MatchField.ARP_OP).getOpcode();
713 + builder.matchArpOp(arpOp);
714 + break;
711 case ARP_SHA: 715 case ARP_SHA:
712 mac = MacAddress.valueOf(match.get(MatchField.ARP_SHA).getLong()); 716 mac = MacAddress.valueOf(match.get(MatchField.ARP_SHA).getLong());
713 builder.matchArpSha(mac); 717 builder.matchArpSha(mac);
...@@ -724,7 +728,6 @@ public class FlowEntryBuilder { ...@@ -724,7 +728,6 @@ public class FlowEntryBuilder {
724 ip = Ip4Address.valueOf(match.get(MatchField.ARP_TPA).getInt()); 728 ip = Ip4Address.valueOf(match.get(MatchField.ARP_TPA).getInt());
725 builder.matchArpTpa(ip); 729 builder.matchArpTpa(ip);
726 break; 730 break;
727 - case ARP_OP:
728 case MPLS_TC: 731 case MPLS_TC:
729 default: 732 default:
730 log.warn("Match type {} not yet implemented.", field.id); 733 log.warn("Match type {} not yet implemented.", field.id);
......
...@@ -25,6 +25,7 @@ import org.onosproject.net.driver.DriverService; ...@@ -25,6 +25,7 @@ import org.onosproject.net.driver.DriverService;
25 import org.onosproject.net.flow.FlowRule; 25 import org.onosproject.net.flow.FlowRule;
26 import org.onosproject.net.flow.TrafficSelector; 26 import org.onosproject.net.flow.TrafficSelector;
27 import org.onosproject.net.flow.criteria.ArpHaCriterion; 27 import org.onosproject.net.flow.criteria.ArpHaCriterion;
28 +import org.onosproject.net.flow.criteria.ArpOpCriterion;
28 import org.onosproject.net.flow.criteria.ArpPaCriterion; 29 import org.onosproject.net.flow.criteria.ArpPaCriterion;
29 import org.onosproject.net.flow.criteria.Criterion; 30 import org.onosproject.net.flow.criteria.Criterion;
30 import org.onosproject.net.flow.criteria.EthCriterion; 31 import org.onosproject.net.flow.criteria.EthCriterion;
...@@ -59,6 +60,7 @@ import org.projectfloodlight.openflow.protocol.OFFlowDelete; ...@@ -59,6 +60,7 @@ import org.projectfloodlight.openflow.protocol.OFFlowDelete;
59 import org.projectfloodlight.openflow.protocol.OFFlowMod; 60 import org.projectfloodlight.openflow.protocol.OFFlowMod;
60 import org.projectfloodlight.openflow.protocol.match.Match; 61 import org.projectfloodlight.openflow.protocol.match.Match;
61 import org.projectfloodlight.openflow.protocol.match.MatchField; 62 import org.projectfloodlight.openflow.protocol.match.MatchField;
63 +import org.projectfloodlight.openflow.types.ArpOpcode;
62 import org.projectfloodlight.openflow.types.CircuitSignalID; 64 import org.projectfloodlight.openflow.types.CircuitSignalID;
63 import org.projectfloodlight.openflow.types.EthType; 65 import org.projectfloodlight.openflow.types.EthType;
64 import org.projectfloodlight.openflow.types.ICMPv4Code; 66 import org.projectfloodlight.openflow.types.ICMPv4Code;
...@@ -419,6 +421,11 @@ public abstract class FlowModBuilder { ...@@ -419,6 +421,11 @@ public abstract class FlowModBuilder {
419 mplsBos.mplsBos() ? OFBooleanValue.TRUE 421 mplsBos.mplsBos() ? OFBooleanValue.TRUE
420 : OFBooleanValue.FALSE); 422 : OFBooleanValue.FALSE);
421 break; 423 break;
424 + case ARP_OP:
425 + ArpOpCriterion arpOp = (ArpOpCriterion) c;
426 + mBuilder.setExact(MatchField.ARP_OP,
427 + ArpOpcode.of(arpOp.arpOp()));
428 + break;
422 case ARP_SHA: 429 case ARP_SHA:
423 arpHaCriterion = (ArpHaCriterion) c; 430 arpHaCriterion = (ArpHaCriterion) c;
424 mBuilder.setExact(MatchField.ARP_SHA, 431 mBuilder.setExact(MatchField.ARP_SHA,
...@@ -439,7 +446,6 @@ public abstract class FlowModBuilder { ...@@ -439,7 +446,6 @@ public abstract class FlowModBuilder {
439 mBuilder.setExact(MatchField.ARP_TPA, 446 mBuilder.setExact(MatchField.ARP_TPA,
440 IPv4Address.of(arpPaCriterion.ip().toInt())); 447 IPv4Address.of(arpPaCriterion.ip().toInt()));
441 break; 448 break;
442 - case ARP_OP:
443 case MPLS_TC: 449 case MPLS_TC:
444 case PBB_ISID: 450 case PBB_ISID:
445 default: 451 default:
......