alshabib
Committed by Gerrit Code Review

adding iptv provisioning

Change-Id: I11fcc788402793d0bf3ac9d9f03ed77e093d98ad
...@@ -168,6 +168,8 @@ public class CordFabricManager implements FabricService { ...@@ -168,6 +168,8 @@ public class CordFabricManager implements FabricService {
168 .withTreatment(down) 168 .withTreatment(down)
169 .add(); 169 .add();
170 170
171 +
172 +
171 flowObjectiveService.forward(fabricDeviceId, upCtrl); 173 flowObjectiveService.forward(fabricDeviceId, upCtrl);
172 flowObjectiveService.forward(fabricDeviceId, downCtrl); 174 flowObjectiveService.forward(fabricDeviceId, downCtrl);
173 flowObjectiveService.forward(fabricDeviceId, radiusToController); 175 flowObjectiveService.forward(fabricDeviceId, radiusToController);
...@@ -181,6 +183,10 @@ public class CordFabricManager implements FabricService { ...@@ -181,6 +183,10 @@ public class CordFabricManager implements FabricService {
181 183
182 removeVlan(vlan.vlan()); 184 removeVlan(vlan.vlan());
183 185
186 + if (vlan.iptv()) {
187 + provisionIPTV();
188 + }
189 +
184 vlan.ports().forEach(cp -> { 190 vlan.ports().forEach(cp -> {
185 if (vlans.put(vlan.vlan(), cp)) { 191 if (vlans.put(vlan.vlan(), cp)) {
186 addForwarding(vlan.vlan(), cp.deviceId(), cp.port(), 192 addForwarding(vlan.vlan(), cp.deviceId(), cp.port(),
...@@ -192,6 +198,46 @@ public class CordFabricManager implements FabricService { ...@@ -192,6 +198,46 @@ public class CordFabricManager implements FabricService {
192 }); 198 });
193 } 199 }
194 200
201 + //FIXME: pass iptv vlan in here.
202 + private void provisionIPTV() {
203 + TrafficSelector ipTvUp = DefaultTrafficSelector.builder()
204 + .matchVlanId(VlanId.vlanId((short) 7))
205 + .matchInPort(PortNumber.portNumber(2))
206 + .build();
207 +
208 + TrafficTreatment ipTvActUp = DefaultTrafficTreatment.builder()
209 + .setOutput(PortNumber.portNumber(7)).build();
210 +
211 + TrafficSelector ipTvDown = DefaultTrafficSelector.builder()
212 + .matchVlanId(VlanId.vlanId((short) 7))
213 + .matchInPort(PortNumber.portNumber(7))
214 + .build();
215 +
216 + TrafficTreatment ipTvActDown = DefaultTrafficTreatment.builder()
217 + .setOutput(PortNumber.portNumber(2)).build();
218 +
219 + ForwardingObjective ipTvUpstream = DefaultForwardingObjective.builder()
220 + .fromApp(appId)
221 + .makePermanent()
222 + .withFlag(ForwardingObjective.Flag.VERSATILE)
223 + .withPriority(PRIORITY)
224 + .withSelector(ipTvUp)
225 + .withTreatment(ipTvActUp)
226 + .add();
227 +
228 + ForwardingObjective ipTvDownstream = DefaultForwardingObjective.builder()
229 + .fromApp(appId)
230 + .makePermanent()
231 + .withFlag(ForwardingObjective.Flag.VERSATILE)
232 + .withPriority(PRIORITY)
233 + .withSelector(ipTvDown)
234 + .withTreatment(ipTvActDown)
235 + .add();
236 +
237 + flowObjectiveService.forward(fabricDeviceId, ipTvUpstream);
238 + flowObjectiveService.forward(fabricDeviceId, ipTvDownstream);
239 + }
240 +
195 @Override 241 @Override
196 public void removeVlan(VlanId vlanId) { 242 public void removeVlan(VlanId vlanId) {
197 vlans.removeAll(vlanId) 243 vlans.removeAll(vlanId)
...@@ -202,7 +248,9 @@ public class CordFabricManager implements FabricService { ...@@ -202,7 +248,9 @@ public class CordFabricManager implements FabricService {
202 public List<FabricVlan> getVlans() { 248 public List<FabricVlan> getVlans() {
203 List<FabricVlan> fVlans = new ArrayList<>(); 249 List<FabricVlan> fVlans = new ArrayList<>();
204 vlans.keySet().forEach(vlan -> fVlans.add( 250 vlans.keySet().forEach(vlan -> fVlans.add(
205 - new FabricVlan(vlan, vlans.get(vlan)))); 251 + //FIXME: Very aweful but will fo for now
252 + new FabricVlan(vlan, vlans.get(vlan),
253 + vlan.toShort() == 201 ? true : false)));
206 return fVlans; 254 return fVlans;
207 } 255 }
208 256
...@@ -217,6 +265,7 @@ public class CordFabricManager implements FabricService { ...@@ -217,6 +265,7 @@ public class CordFabricManager implements FabricService {
217 265
218 private void addForwarding(VlanId vlanId, DeviceId deviceId, PortNumber inPort, 266 private void addForwarding(VlanId vlanId, DeviceId deviceId, PortNumber inPort,
219 List<PortNumber> outPorts) { 267 List<PortNumber> outPorts) {
268 +
220 TrafficSelector selector = DefaultTrafficSelector.builder() 269 TrafficSelector selector = DefaultTrafficSelector.builder()
221 .matchVlanId(vlanId) 270 .matchVlanId(vlanId)
222 .matchInPort(inPort) 271 .matchInPort(inPort)
......
...@@ -33,12 +33,14 @@ public class FabricVlan { ...@@ -33,12 +33,14 @@ public class FabricVlan {
33 private final VlanId vlan; 33 private final VlanId vlan;
34 34
35 private final List<ConnectPoint> ports; 35 private final List<ConnectPoint> ports;
36 + private final boolean iptv;
36 37
37 - public FabricVlan(VlanId vlan, Collection<ConnectPoint> ports) { 38 + public FabricVlan(VlanId vlan, Collection<ConnectPoint> ports, boolean iptv) {
38 checkNotNull(vlan); 39 checkNotNull(vlan);
39 checkNotNull(ports); 40 checkNotNull(ports);
40 this.vlan = vlan; 41 this.vlan = vlan;
41 this.ports = ImmutableList.copyOf(ports); 42 this.ports = ImmutableList.copyOf(ports);
43 + this.iptv = iptv;
42 } 44 }
43 45
44 public VlanId vlan() { 46 public VlanId vlan() {
...@@ -48,4 +50,8 @@ public class FabricVlan { ...@@ -48,4 +50,8 @@ public class FabricVlan {
48 public List<ConnectPoint> ports() { 50 public List<ConnectPoint> ports() {
49 return ports; 51 return ports;
50 } 52 }
53 +
54 + public boolean iptv() {
55 + return iptv;
56 + }
51 } 57 }
......
...@@ -37,6 +37,7 @@ public final class FabricVlanCodec extends JsonCodec<FabricVlan> { ...@@ -37,6 +37,7 @@ public final class FabricVlanCodec extends JsonCodec<FabricVlan> {
37 // JSON field names 37 // JSON field names
38 private static final String VLAN = "vlan"; 38 private static final String VLAN = "vlan";
39 private static final String PORTS = "ports"; 39 private static final String PORTS = "ports";
40 + private static final String IPTV = "iptv";
40 41
41 @Override 42 @Override
42 public ObjectNode encode(FabricVlan vlan, CodecContext context) { 43 public ObjectNode encode(FabricVlan vlan, CodecContext context) {
...@@ -54,6 +55,7 @@ public final class FabricVlanCodec extends JsonCodec<FabricVlan> { ...@@ -54,6 +55,7 @@ public final class FabricVlanCodec extends JsonCodec<FabricVlan> {
54 @Override 55 @Override
55 public FabricVlan decode(ObjectNode json, CodecContext context) { 56 public FabricVlan decode(ObjectNode json, CodecContext context) {
56 short vlan = json.path(VLAN).shortValue(); 57 short vlan = json.path(VLAN).shortValue();
58 + boolean iptv = json.path(IPTV).booleanValue();
57 List<ConnectPoint> ports = new ArrayList<>(); 59 List<ConnectPoint> ports = new ArrayList<>();
58 60
59 ArrayNode portArray = (ArrayNode) json.path(PORTS); 61 ArrayNode portArray = (ArrayNode) json.path(PORTS);
...@@ -61,6 +63,6 @@ public final class FabricVlanCodec extends JsonCodec<FabricVlan> { ...@@ -61,6 +63,6 @@ public final class FabricVlanCodec extends JsonCodec<FabricVlan> {
61 ports.add(context.codec(ConnectPoint.class).decode((ObjectNode) o, context)); 63 ports.add(context.codec(ConnectPoint.class).decode((ObjectNode) o, context));
62 } 64 }
63 65
64 - return new FabricVlan(VlanId.vlanId(vlan), ports); 66 + return new FabricVlan(VlanId.vlanId(vlan), ports, iptv);
65 } 67 }
66 } 68 }
......
...@@ -59,6 +59,6 @@ public class FabricAddCommand extends AbstractShellCommand { ...@@ -59,6 +59,6 @@ public class FabricAddCommand extends AbstractShellCommand {
59 ports.add(ConnectPoint.deviceConnectPoint(portString)); 59 ports.add(ConnectPoint.deviceConnectPoint(portString));
60 } 60 }
61 61
62 - service.addVlan(new FabricVlan(vlan, ports)); 62 + service.addVlan(new FabricVlan(vlan, ports, false));
63 } 63 }
64 } 64 }
......
...@@ -415,8 +415,16 @@ public class OnosXOSIntegrationManager implements VoltTenantService { ...@@ -415,8 +415,16 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
415 // + FABRIC_VCPE_CONNECT_POINT.toString() + "\"}"; 415 // + FABRIC_VCPE_CONNECT_POINT.toString() + "\"}";
416 //json += "]}"; 416 //json += "]}";
417 417
418 + long vlan = portToVlan.get(fromPoint.port().toLong());
419 +
420 +
418 JsonObject node = new JsonObject(); 421 JsonObject node = new JsonObject();
419 - node.add("vlan", portToVlan.get(fromPoint.port().toLong())); 422 + node.add("vlan", vlan);
423 + if (vlan == 201) {
424 + node.add("iptv", true);
425 + } else {
426 + node.add("iptv", false);
427 + }
420 JsonArray array = new JsonArray(); 428 JsonArray array = new JsonArray();
421 JsonObject cp1 = new JsonObject(); 429 JsonObject cp1 = new JsonObject();
422 JsonObject cp2 = new JsonObject(); 430 JsonObject cp2 = new JsonObject();
......
...@@ -16,15 +16,12 @@ ...@@ -16,15 +16,12 @@
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;
21 import org.onosproject.net.DeviceId; 19 import org.onosproject.net.DeviceId;
22 import org.onosproject.net.PortNumber; 20 import org.onosproject.net.PortNumber;
23 import org.onosproject.net.behaviour.Pipeliner; 21 import org.onosproject.net.behaviour.Pipeliner;
24 import org.onosproject.net.behaviour.PipelinerContext; 22 import org.onosproject.net.behaviour.PipelinerContext;
25 import org.onosproject.net.driver.AbstractHandlerBehaviour; 23 import org.onosproject.net.driver.AbstractHandlerBehaviour;
26 import org.onosproject.net.flow.DefaultFlowRule; 24 import org.onosproject.net.flow.DefaultFlowRule;
27 -import org.onosproject.net.flow.DefaultTrafficSelector;
28 import org.onosproject.net.flow.DefaultTrafficTreatment; 25 import org.onosproject.net.flow.DefaultTrafficTreatment;
29 import org.onosproject.net.flow.FlowRule; 26 import org.onosproject.net.flow.FlowRule;
30 import org.onosproject.net.flow.FlowRuleOperations; 27 import org.onosproject.net.flow.FlowRuleOperations;
...@@ -52,7 +49,6 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { ...@@ -52,7 +49,6 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
52 private FlowRuleService flowRuleService; 49 private FlowRuleService flowRuleService;
53 private DeviceId deviceId; 50 private DeviceId deviceId;
54 51
55 - private boolean done = false;
56 52
57 @Override 53 @Override
58 public void init(DeviceId deviceId, PipelinerContext context) { 54 public void init(DeviceId deviceId, PipelinerContext context) {
...@@ -63,34 +59,7 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { ...@@ -63,34 +59,7 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
63 59
64 } 60 }
65 61
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 62
87 - FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder();
88 -
89 - flowRuleService.apply(flowBuilder.add(rule).build());
90 -
91 - return true;
92 -
93 - }
94 63
95 @Override 64 @Override
96 public void filter(FilteringObjective filter) { 65 public void filter(FilteringObjective filter) {
...@@ -99,7 +68,6 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { ...@@ -99,7 +68,6 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
99 68
100 @Override 69 @Override
101 public void forward(ForwardingObjective fwd) { 70 public void forward(ForwardingObjective fwd) {
102 - done = installIGMPRule(fwd.appId(), done);
103 FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder(); 71 FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder();
104 72
105 if (fwd.flag() != ForwardingObjective.Flag.VERSATILE) { 73 if (fwd.flag() != ForwardingObjective.Flag.VERSATILE) {
......