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