adding igmp rule
Change-Id: I0eaeb55861eb3f9f273a3b67fa7b0eaa98b0210e
Showing
1 changed file
with
36 additions
and
0 deletions
| ... | @@ -16,12 +16,15 @@ | ... | @@ -16,12 +16,15 @@ |
| 16 | package org.onosproject.driver.pipeline; | 16 | package org.onosproject.driver.pipeline; |
| 17 | 17 | ||
| 18 | import org.onlab.osgi.ServiceDirectory; | 18 | import org.onlab.osgi.ServiceDirectory; |
| 19 | +import org.onlab.packet.Ethernet; | ||
| 20 | +import org.onosproject.core.ApplicationId; | ||
| 19 | import org.onosproject.net.DeviceId; | 21 | import org.onosproject.net.DeviceId; |
| 20 | import org.onosproject.net.PortNumber; | 22 | import org.onosproject.net.PortNumber; |
| 21 | import org.onosproject.net.behaviour.Pipeliner; | 23 | import org.onosproject.net.behaviour.Pipeliner; |
| 22 | import org.onosproject.net.behaviour.PipelinerContext; | 24 | import org.onosproject.net.behaviour.PipelinerContext; |
| 23 | import org.onosproject.net.driver.AbstractHandlerBehaviour; | 25 | import org.onosproject.net.driver.AbstractHandlerBehaviour; |
| 24 | import org.onosproject.net.flow.DefaultFlowRule; | 26 | import org.onosproject.net.flow.DefaultFlowRule; |
| 27 | +import org.onosproject.net.flow.DefaultTrafficSelector; | ||
| 25 | import org.onosproject.net.flow.DefaultTrafficTreatment; | 28 | import org.onosproject.net.flow.DefaultTrafficTreatment; |
| 26 | import org.onosproject.net.flow.FlowRule; | 29 | import org.onosproject.net.flow.FlowRule; |
| 27 | import org.onosproject.net.flow.FlowRuleOperations; | 30 | import org.onosproject.net.flow.FlowRuleOperations; |
| ... | @@ -49,12 +52,44 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { | ... | @@ -49,12 +52,44 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { |
| 49 | private FlowRuleService flowRuleService; | 52 | private FlowRuleService flowRuleService; |
| 50 | private DeviceId deviceId; | 53 | private DeviceId deviceId; |
| 51 | 54 | ||
| 55 | + private boolean done = false; | ||
| 56 | + | ||
| 52 | @Override | 57 | @Override |
| 53 | public void init(DeviceId deviceId, PipelinerContext context) { | 58 | public void init(DeviceId deviceId, PipelinerContext context) { |
| 54 | this.serviceDirectory = context.directory(); | 59 | this.serviceDirectory = context.directory(); |
| 55 | this.deviceId = deviceId; | 60 | this.deviceId = deviceId; |
| 56 | 61 | ||
| 57 | flowRuleService = serviceDirectory.get(FlowRuleService.class); | 62 | flowRuleService = serviceDirectory.get(FlowRuleService.class); |
| 63 | + | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + private boolean installIGMPRule(ApplicationId appId, boolean done) { | ||
| 67 | + if (done) { | ||
| 68 | + return done; | ||
| 69 | + } | ||
| 70 | + TrafficSelector selector = DefaultTrafficSelector.builder() | ||
| 71 | + .matchInPort(PortNumber.portNumber(1)) | ||
| 72 | + .matchEthType(Ethernet.TYPE_IPV4) | ||
| 73 | + .matchIPProtocol((byte) 2).build(); | ||
| 74 | + | ||
| 75 | + TrafficTreatment treatment = DefaultTrafficTreatment.builder() | ||
| 76 | + .punt().build(); | ||
| 77 | + | ||
| 78 | + FlowRule rule = DefaultFlowRule.builder() | ||
| 79 | + .forDevice(deviceId) | ||
| 80 | + .fromApp(appId) | ||
| 81 | + .withTreatment(treatment) | ||
| 82 | + .withSelector(selector) | ||
| 83 | + .makePermanent() | ||
| 84 | + .withPriority(0) | ||
| 85 | + .build(); | ||
| 86 | + | ||
| 87 | + FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder(); | ||
| 88 | + | ||
| 89 | + flowRuleService.apply(flowBuilder.add(rule).build()); | ||
| 90 | + | ||
| 91 | + return true; | ||
| 92 | + | ||
| 58 | } | 93 | } |
| 59 | 94 | ||
| 60 | @Override | 95 | @Override |
| ... | @@ -64,6 +99,7 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { | ... | @@ -64,6 +99,7 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { |
| 64 | 99 | ||
| 65 | @Override | 100 | @Override |
| 66 | public void forward(ForwardingObjective fwd) { | 101 | public void forward(ForwardingObjective fwd) { |
| 102 | + done = installIGMPRule(fwd.appId(), done); | ||
| 67 | FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder(); | 103 | FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder(); |
| 68 | 104 | ||
| 69 | if (fwd.flag() != ForwardingObjective.Flag.VERSATILE) { | 105 | if (fwd.flag() != ForwardingObjective.Flag.VERSATILE) { | ... | ... |
-
Please register or login to post a comment