alshabib

adding igmp rule

Change-Id: I0eaeb55861eb3f9f273a3b67fa7b0eaa98b0210e
...@@ -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) {
......