Committed by
Gerrit Code Review
Only pop internally assigned VLANs before sending ARP to controller
Change-Id: I066e03ad9a491ad99816a976bc5561667878031a
Showing
1 changed file
with
20 additions
and
7 deletions
... | @@ -56,6 +56,7 @@ import org.onosproject.net.flowobjective.ObjectiveError; | ... | @@ -56,6 +56,7 @@ import org.onosproject.net.flowobjective.ObjectiveError; |
56 | import org.onosproject.net.group.Group; | 56 | import org.onosproject.net.group.Group; |
57 | import org.onosproject.net.group.GroupKey; | 57 | import org.onosproject.net.group.GroupKey; |
58 | import org.onosproject.net.group.GroupService; | 58 | import org.onosproject.net.group.GroupService; |
59 | +import org.onosproject.net.packet.PacketPriority; | ||
59 | import org.slf4j.Logger; | 60 | import org.slf4j.Logger; |
60 | 61 | ||
61 | import java.util.ArrayList; | 62 | import java.util.ArrayList; |
... | @@ -254,13 +255,9 @@ public class CpqdOfdpa2Pipeline extends Ofdpa2Pipeline { | ... | @@ -254,13 +255,9 @@ public class CpqdOfdpa2Pipeline extends Ofdpa2Pipeline { |
254 | selector.matchVlanId(vidCriterion.vlanId()); | 255 | selector.matchVlanId(vidCriterion.vlanId()); |
255 | treatment.transition(TMAC_TABLE); | 256 | treatment.transition(TMAC_TABLE); |
256 | 257 | ||
257 | - VlanId storeVlan = null; | ||
258 | if (vidCriterion.vlanId() == VlanId.NONE) { | 258 | if (vidCriterion.vlanId() == VlanId.NONE) { |
259 | // untagged packets are assigned vlans | 259 | // untagged packets are assigned vlans |
260 | treatment.pushVlan().setVlanId(assignedVlan); | 260 | treatment.pushVlan().setVlanId(assignedVlan); |
261 | - storeVlan = assignedVlan; | ||
262 | - } else { | ||
263 | - storeVlan = vidCriterion.vlanId(); | ||
264 | } | 261 | } |
265 | 262 | ||
266 | // ofdpa cannot match on ALL portnumber, so we need to use separate | 263 | // ofdpa cannot match on ALL portnumber, so we need to use separate |
... | @@ -289,6 +286,25 @@ public class CpqdOfdpa2Pipeline extends Ofdpa2Pipeline { | ... | @@ -289,6 +286,25 @@ public class CpqdOfdpa2Pipeline extends Ofdpa2Pipeline { |
289 | .forTable(VLAN_TABLE).build(); | 286 | .forTable(VLAN_TABLE).build(); |
290 | rules.add(rule); | 287 | rules.add(rule); |
291 | } | 288 | } |
289 | + | ||
290 | + // Emulating OFDPA behavior by popping off internal assigned VLAN | ||
291 | + // before sending to controller | ||
292 | + TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder() | ||
293 | + .matchEthType(Ethernet.TYPE_ARP) | ||
294 | + .matchVlanId(assignedVlan); | ||
295 | + TrafficTreatment.Builder tbuilder = DefaultTrafficTreatment.builder() | ||
296 | + .popVlan() | ||
297 | + .punt(); | ||
298 | + FlowRule internalVlan = DefaultFlowRule.builder() | ||
299 | + .forDevice(deviceId) | ||
300 | + .withSelector(sbuilder.build()) | ||
301 | + .withTreatment(tbuilder.build()) | ||
302 | + .withPriority(PacketPriority.CONTROL.priorityValue() + 1) | ||
303 | + .fromApp(applicationId) | ||
304 | + .makePermanent() | ||
305 | + .forTable(ACL_TABLE).build(); | ||
306 | + rules.add(internalVlan); | ||
307 | + | ||
292 | return rules; | 308 | return rules; |
293 | } | 309 | } |
294 | 310 | ||
... | @@ -659,9 +675,6 @@ public class CpqdOfdpa2Pipeline extends Ofdpa2Pipeline { | ... | @@ -659,9 +675,6 @@ public class CpqdOfdpa2Pipeline extends Ofdpa2Pipeline { |
659 | if (ins instanceof OutputInstruction) { | 675 | if (ins instanceof OutputInstruction) { |
660 | OutputInstruction o = (OutputInstruction) ins; | 676 | OutputInstruction o = (OutputInstruction) ins; |
661 | if (o.port() == PortNumber.CONTROLLER) { | 677 | if (o.port() == PortNumber.CONTROLLER) { |
662 | - // emulating real ofdpa behavior by popping off internal | ||
663 | - // vlan before sending to controller | ||
664 | - ttBuilder.popVlan(); | ||
665 | ttBuilder.add(o); | 678 | ttBuilder.add(o); |
666 | } else { | 679 | } else { |
667 | log.warn("Only allowed treatments in versatile forwarding " | 680 | log.warn("Only allowed treatments in versatile forwarding " | ... | ... |
-
Please register or login to post a comment