Reactive Forwarding: Inherit Treatment Builder from PacketContext
Signed-off-by: Souvik Das <souvikdas95@yahoo.co.in>
Change-Id: I31588f83036d854f272525b241fc67389c23dbea
diff --git a/apps/fwd/src/main/java/org/onosproject/fwd/OsgiPropertyConstants.java b/apps/fwd/src/main/java/org/onosproject/fwd/OsgiPropertyConstants.java
index e4c795a..e37ced0 100644
--- a/apps/fwd/src/main/java/org/onosproject/fwd/OsgiPropertyConstants.java
+++ b/apps/fwd/src/main/java/org/onosproject/fwd/OsgiPropertyConstants.java
@@ -64,4 +64,7 @@
static final String RECORD_METRICS = "recordMetrics";
static final boolean RECORD_METRICS_DEFAULT = false;
+
+ static final String INHERIT_FLOW_TREATMENT = "inheritFlowTreatment";
+ static final boolean INHERIT_FLOW_TREATMENT_DEFAULT = false;
}
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 5544a6c..61fdd3b 100644
--- a/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
+++ b/apps/fwd/src/main/java/org/onosproject/fwd/ReactiveForwarding.java
@@ -119,6 +119,8 @@
import static org.onosproject.fwd.OsgiPropertyConstants.PACKET_OUT_ONLY_DEFAULT;
import static org.onosproject.fwd.OsgiPropertyConstants.RECORD_METRICS;
import static org.onosproject.fwd.OsgiPropertyConstants.RECORD_METRICS_DEFAULT;
+import static org.onosproject.fwd.OsgiPropertyConstants.INHERIT_FLOW_TREATMENT;
+import static org.onosproject.fwd.OsgiPropertyConstants.INHERIT_FLOW_TREATMENT_DEFAULT;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -142,7 +144,8 @@
MATCH_TCP_UDP_PORTS + ":Boolean=" + MATCH_TCP_UDP_PORTS_DEFAULT,
MATCH_ICMP_FIELDS + ":Boolean=" + MATCH_ICMP_FIELDS_DEFAULT,
IGNORE_IPV4_MCAST_PACKETS + ":Boolean=" + IGNORE_IPV4_MCAST_PACKETS_DEFAULT,
- RECORD_METRICS + ":Boolean=" + RECORD_METRICS_DEFAULT
+ RECORD_METRICS + ":Boolean=" + RECORD_METRICS_DEFAULT,
+ INHERIT_FLOW_TREATMENT + ":Boolean=" + INHERIT_FLOW_TREATMENT_DEFAULT
}
)
public class ReactiveForwarding {
@@ -224,6 +227,9 @@
/** Enable record metrics for reactive forwarding. */
private boolean recordMetrics = RECORD_METRICS_DEFAULT;
+ /** Enable use of builder from packet context to define flow treatment; default is false. */
+ private boolean inheritFlowTreatment = INHERIT_FLOW_TREATMENT_DEFAULT;
+
private final TopologyListener topologyListener = new InternalTopologyListener();
private ExecutorService blackHoleExecutor;
@@ -458,6 +464,17 @@
flowPriority = Tools.getIntegerProperty(properties, FLOW_PRIORITY, FLOW_PRIORITY_DEFAULT);
log.info("Configured. Flow Priority is configured to {}", flowPriority);
+
+ Boolean inheritFlowTreatmentEnabled =
+ Tools.isPropertyEnabled(properties, INHERIT_FLOW_TREATMENT);
+ if (inheritFlowTreatmentEnabled == null) {
+ log.info("Inherit flow treatment is not configured, " +
+ "using current value of {}", inheritFlowTreatment);
+ } else {
+ inheritFlowTreatment = inheritFlowTreatmentEnabled;
+ log.info("Configured. Inherit flow treatment is {}",
+ inheritFlowTreatment ? "enabled" : "disabled");
+ }
}
/**
@@ -713,9 +730,16 @@
}
}
}
- TrafficTreatment treatment = DefaultTrafficTreatment.builder()
- .setOutput(portNumber)
- .build();
+ TrafficTreatment treatment;
+ if (inheritFlowTreatment) {
+ treatment = context.treatmentBuilder()
+ .setOutput(portNumber)
+ .build();
+ } else {
+ treatment = DefaultTrafficTreatment.builder()
+ .setOutput(portNumber)
+ .build();
+ }
ForwardingObjective forwardingObjective = DefaultForwardingObjective.builder()
.withSelector(selectorBuilder.build())