Jonathan Hart
Committed by Gerrit Code Review

Move AAA app to OLT

Change-Id: Ie1e41353177c8755f25bca1476b41df1f2826288
...@@ -232,6 +232,14 @@ public class AAA { ...@@ -232,6 +232,14 @@ public class AAA {
232 selector.matchEthType(EthType.EtherType.EAPOL.ethType().toShort()); 232 selector.matchEthType(EthType.EtherType.EAPOL.ethType().toShort());
233 packetService.requestPackets(selector.build(), 233 packetService.requestPackets(selector.build(),
234 CONTROL, appId); 234 CONTROL, appId);
235 +
236 + TrafficSelector radSelector = DefaultTrafficSelector.builder()
237 + .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
238 + .matchIPProtocol(IPv4.PROTOCOL_UDP)
239 + .matchUdpDst((short) 1812)
240 + .matchUdpSrc((short) 1812)
241 + .build();
242 + packetService.requestPackets(radSelector, CONTROL, appId);
235 } 243 }
236 244
237 /** 245 /**
...@@ -241,6 +249,14 @@ public class AAA { ...@@ -241,6 +249,14 @@ public class AAA {
241 TrafficSelector.Builder selector = DefaultTrafficSelector.builder(); 249 TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
242 selector.matchEthType(EthType.EtherType.EAPOL.ethType().toShort()); 250 selector.matchEthType(EthType.EtherType.EAPOL.ethType().toShort());
243 packetService.cancelPackets(selector.build(), CONTROL, appId); 251 packetService.cancelPackets(selector.build(), CONTROL, appId);
252 +
253 + TrafficSelector radSelector = DefaultTrafficSelector.builder()
254 + .matchEthType(EthType.EtherType.IPV4.ethType().toShort())
255 + .matchIPProtocol(IPv4.PROTOCOL_UDP)
256 + .matchUdpDst((short) 1812)
257 + .matchUdpSrc((short) 1812)
258 + .build();
259 + packetService.cancelPackets(radSelector, CONTROL, appId);
244 } 260 }
245 261
246 /** 262 /**
......
...@@ -26,6 +26,7 @@ import org.apache.felix.scr.annotations.ReferenceCardinality; ...@@ -26,6 +26,7 @@ import org.apache.felix.scr.annotations.ReferenceCardinality;
26 import org.apache.felix.scr.annotations.Service; 26 import org.apache.felix.scr.annotations.Service;
27 import org.onlab.packet.Ethernet; 27 import org.onlab.packet.Ethernet;
28 import org.onlab.packet.IPv4; 28 import org.onlab.packet.IPv4;
29 +import org.onlab.packet.MacAddress;
29 import org.onlab.packet.VlanId; 30 import org.onlab.packet.VlanId;
30 import org.onosproject.core.ApplicationId; 31 import org.onosproject.core.ApplicationId;
31 import org.onosproject.core.CoreService; 32 import org.onosproject.core.CoreService;
...@@ -124,6 +125,16 @@ public class CordFabricManager implements FabricService { ...@@ -124,6 +125,16 @@ public class CordFabricManager implements FabricService {
124 .matchInPort(PortNumber.portNumber(1)) 125 .matchInPort(PortNumber.portNumber(1))
125 .build(); 126 .build();
126 127
128 + TrafficSelector oltMgmtUp = DefaultTrafficSelector.builder()
129 + .matchEthSrc(MacAddress.valueOf("00:0c:d5:00:01:01"))
130 + .matchInPort(PortNumber.portNumber(2))
131 + .build();
132 +
133 + TrafficSelector oltMgmtDown = DefaultTrafficSelector.builder()
134 + .matchEthDst(MacAddress.valueOf("00:0c:d5:00:01:01"))
135 + .matchInPort(PortNumber.portNumber(9))
136 + .build();
137 +
127 TrafficTreatment up = DefaultTrafficTreatment.builder() 138 TrafficTreatment up = DefaultTrafficTreatment.builder()
128 .setOutput(PortNumber.portNumber(1)) 139 .setOutput(PortNumber.portNumber(1))
129 .build(); 140 .build();
...@@ -150,6 +161,9 @@ public class CordFabricManager implements FabricService { ...@@ -150,6 +161,9 @@ public class CordFabricManager implements FabricService {
150 .setOutput(PortNumber.portNumber(2)) 161 .setOutput(PortNumber.portNumber(2))
151 .build(); 162 .build();
152 163
164 + TrafficTreatment toVolt = DefaultTrafficTreatment.builder()
165 + .setOutput(PortNumber.portNumber(9))
166 + .build();
153 167
154 TrafficTreatment sentToRadius = DefaultTrafficTreatment.builder() 168 TrafficTreatment sentToRadius = DefaultTrafficTreatment.builder()
155 .setOutput(PortNumber.portNumber(5)) 169 .setOutput(PortNumber.portNumber(5))
...@@ -193,12 +207,31 @@ public class CordFabricManager implements FabricService { ...@@ -193,12 +207,31 @@ public class CordFabricManager implements FabricService {
193 .withTreatment(down) 207 .withTreatment(down)
194 .add(); 208 .add();
195 209
210 + ForwardingObjective upOltMgmt = DefaultForwardingObjective.builder()
211 + .fromApp(appId)
212 + .makePermanent()
213 + .withFlag(ForwardingObjective.Flag.VERSATILE)
214 + .withPriority(PRIORITY)
215 + .withSelector(oltMgmtUp)
216 + .withTreatment(toVolt)
217 + .add();
218 +
219 + ForwardingObjective downOltMgmt = DefaultForwardingObjective.builder()
220 + .fromApp(appId)
221 + .makePermanent()
222 + .withFlag(ForwardingObjective.Flag.VERSATILE)
223 + .withPriority(PRIORITY)
224 + .withSelector(oltMgmtDown)
225 + .withTreatment(toOlt)
226 + .add();
196 227
197 228
198 flowObjectiveService.forward(fabricDeviceId, upCtrl); 229 flowObjectiveService.forward(fabricDeviceId, upCtrl);
199 flowObjectiveService.forward(fabricDeviceId, downCtrl); 230 flowObjectiveService.forward(fabricDeviceId, downCtrl);
200 flowObjectiveService.forward(fabricDeviceId, radiusToServer); 231 flowObjectiveService.forward(fabricDeviceId, radiusToServer);
201 flowObjectiveService.forward(fabricDeviceId, serverToRadius); 232 flowObjectiveService.forward(fabricDeviceId, serverToRadius);
233 + flowObjectiveService.forward(fabricDeviceId, upOltMgmt);
234 + flowObjectiveService.forward(fabricDeviceId, downOltMgmt);
202 } 235 }
203 236
204 @Override 237 @Override
......
...@@ -57,7 +57,9 @@ import java.util.stream.IntStream; ...@@ -57,7 +57,9 @@ import java.util.stream.IntStream;
57 57
58 import static com.google.common.base.Strings.isNullOrEmpty; 58 import static com.google.common.base.Strings.isNullOrEmpty;
59 import static com.google.common.net.MediaType.JSON_UTF_8; 59 import static com.google.common.net.MediaType.JSON_UTF_8;
60 -import static java.net.HttpURLConnection.*; 60 +import static java.net.HttpURLConnection.HTTP_CREATED;
61 +import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
62 +import static java.net.HttpURLConnection.HTTP_OK;
61 import static org.slf4j.LoggerFactory.getLogger; 63 import static org.slf4j.LoggerFactory.getLogger;
62 64
63 65
...@@ -87,6 +89,9 @@ public class OnosXOSIntegrationManager implements VoltTenantService { ...@@ -87,6 +89,9 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
87 private static final int FABRIC_SERVER_PORT = 8181; 89 private static final int FABRIC_SERVER_PORT = 8181;
88 private static final String FABRIC_BASE_URI = "/onos/cordfabric/vlans/add"; 90 private static final String FABRIC_BASE_URI = "/onos/cordfabric/vlans/add";
89 91
92 + private static final DeviceId OLT_DEVICE_ID = DeviceId.deviceId("of:90e2ba82f97791e9");
93 + private static final int OLT_UPLINK_PORT = 129;
94 +
90 private static final ConnectPoint FABRIC_PORT = new ConnectPoint( 95 private static final ConnectPoint FABRIC_PORT = new ConnectPoint(
91 DeviceId.deviceId("of:000090e2ba82f974"), 96 DeviceId.deviceId("of:000090e2ba82f974"),
92 PortNumber.portNumber(2)); 97 PortNumber.portNumber(2));
...@@ -154,11 +159,11 @@ public class OnosXOSIntegrationManager implements VoltTenantService { ...@@ -154,11 +159,11 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
154 PortNumber.portNumber(3))); 159 PortNumber.portNumber(3)));
155 160
156 portToVlan = Maps.newHashMap(); 161 portToVlan = Maps.newHashMap();
157 - portToVlan.putIfAbsent(2L, (short) 201); 162 + portToVlan.putIfAbsent(1L, (short) 201);
158 portToVlan.putIfAbsent(6L, (short) 401); 163 portToVlan.putIfAbsent(6L, (short) 401);
159 164
160 portToSsid = Maps.newHashMap(); 165 portToSsid = Maps.newHashMap();
161 - portToSsid.put(new ConnectPoint(FABRIC_DEVICE_ID, PortNumber.portNumber(2)), "0"); 166 + portToSsid.put(new ConnectPoint(OLT_DEVICE_ID, PortNumber.portNumber(1)), "0");
162 portToSsid.put(new ConnectPoint(FABRIC_DEVICE_ID, PortNumber.portNumber(6)), "1"); 167 portToSsid.put(new ConnectPoint(FABRIC_DEVICE_ID, PortNumber.portNumber(6)), "1");
163 } 168 }
164 169
...@@ -333,19 +338,25 @@ public class OnosXOSIntegrationManager implements VoltTenantService { ...@@ -333,19 +338,25 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
333 if (providerServiceId == -1) { 338 if (providerServiceId == -1) {
334 providerServiceId = xosProviderService; 339 providerServiceId = xosProviderService;
335 } 340 }
341 +
342 + PortNumber onuPort = newTenant.port().port();
343 + VlanId subscriberVlan = VlanId.vlanId(portToVlan.get(onuPort.toLong()));
344 +
336 VoltTenant tenantToCreate = VoltTenant.builder() 345 VoltTenant tenantToCreate = VoltTenant.builder()
337 .withProviderService(providerServiceId) 346 .withProviderService(providerServiceId)
338 .withServiceSpecificId(portToSsid.get(newTenant.port())) 347 .withServiceSpecificId(portToSsid.get(newTenant.port()))
339 - .withVlanId(newTenant.vlanId()) 348 + .withVlanId(String.valueOf(subscriberVlan.toShort()))
340 .withPort(newTenant.port()) 349 .withPort(newTenant.port())
341 .build(); 350 .build();
342 String json = tenantToJson(tenantToCreate); 351 String json = tenantToJson(tenantToCreate);
343 352
353 +
354 + provisionVlanOnPort(OLT_DEVICE_ID, OLT_UPLINK_PORT, onuPort, subscriberVlan.toShort());
344 //provisionDataPlane(tenantToCreate); 355 //provisionDataPlane(tenantToCreate);
345 356
346 String retJson = postRest(json); 357 String retJson = postRest(json);
347 358
348 - fetchCPELocation(newTenant, retJson); 359 + fetchCPELocation(tenantToCreate, retJson);
349 360
350 return newTenant; 361 return newTenant;
351 } 362 }
...@@ -355,10 +366,11 @@ public class OnosXOSIntegrationManager implements VoltTenantService { ...@@ -355,10 +366,11 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
355 366
356 if (json.get("computeNodeName") != null) { 367 if (json.get("computeNodeName") != null) {
357 ConnectPoint point = nodeToPort.get(json.get("computeNodeName").asString()); 368 ConnectPoint point = nodeToPort.get(json.get("computeNodeName").asString());
358 - ConnectPoint fromPoint = newTenant.port(); 369 + //ConnectPoint fromPoint = newTenant.port();
370 + ConnectPoint oltPort = new ConnectPoint(FABRIC_DEVICE_ID, FABRIC_OLT_CONNECT_POINT);
359 371
360 provisionFabric(VlanId.vlanId(Short.parseShort(newTenant.vlanId())), 372 provisionFabric(VlanId.vlanId(Short.parseShort(newTenant.vlanId())),
361 - point, fromPoint); 373 + point, oltPort);
362 } 374 }
363 375
364 } 376 }
...@@ -374,6 +386,50 @@ public class OnosXOSIntegrationManager implements VoltTenantService { ...@@ -374,6 +386,50 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
374 } 386 }
375 } 387 }
376 388
389 + private void provisionVlanOnPort(DeviceId deviceId, int uplinkPort, PortNumber p, short vlanId) {
390 +
391 + TrafficSelector upstream = DefaultTrafficSelector.builder()
392 + .matchVlanId(VlanId.vlanId(vlanId))
393 + .matchInPort(p)
394 + .build();
395 +
396 + TrafficSelector downstream = DefaultTrafficSelector.builder()
397 + .matchVlanId(VlanId.vlanId(vlanId))
398 + .matchInPort(PortNumber.portNumber(uplinkPort))
399 + .build();
400 +
401 + TrafficTreatment upstreamTreatment = DefaultTrafficTreatment.builder()
402 + .setOutput(PortNumber.portNumber(uplinkPort))
403 + .build();
404 +
405 + TrafficTreatment downstreamTreatment = DefaultTrafficTreatment.builder()
406 + .setOutput(p)
407 + .build();
408 +
409 +
410 + ForwardingObjective upFwd = DefaultForwardingObjective.builder()
411 + .withFlag(ForwardingObjective.Flag.VERSATILE)
412 + .withPriority(1000)
413 + .makePermanent()
414 + .withSelector(upstream)
415 + .fromApp(appId)
416 + .withTreatment(upstreamTreatment)
417 + .add();
418 +
419 + ForwardingObjective downFwd = DefaultForwardingObjective.builder()
420 + .withFlag(ForwardingObjective.Flag.VERSATILE)
421 + .withPriority(1000)
422 + .makePermanent()
423 + .withSelector(downstream)
424 + .fromApp(appId)
425 + .withTreatment(downstreamTreatment)
426 + .add();
427 +
428 + flowObjectiveService.forward(deviceId, upFwd);
429 + flowObjectiveService.forward(deviceId, downFwd);
430 +
431 + }
432 +
377 private void provisionDataPlane(VoltTenant tenant) { 433 private void provisionDataPlane(VoltTenant tenant) {
378 VlanId vlan = VlanId.vlanId(Short.parseShort(tenant.vlanId())); 434 VlanId vlan = VlanId.vlanId(Short.parseShort(tenant.vlanId()));
379 435
...@@ -420,15 +476,8 @@ public class OnosXOSIntegrationManager implements VoltTenantService { ...@@ -420,15 +476,8 @@ public class OnosXOSIntegrationManager implements VoltTenantService {
420 } 476 }
421 477
422 private void provisionFabric(VlanId vlanId, ConnectPoint point, ConnectPoint fromPoint) { 478 private void provisionFabric(VlanId vlanId, ConnectPoint point, ConnectPoint fromPoint) {
423 - //String json = "{\"vlan\":" + vlanId + ",\"ports\":[";
424 - //json += "{\"device\":\"" + FABRIC_DEVICE_ID.toString() + "\",\"port\":\""
425 - // + FABRIC_OLT_CONNECT_POINT.toString() + "\"},";
426 - //json += "{\"device\":\"" + FABRIC_DEVICE_ID.toString() + "\",\"port\":\""
427 - // + FABRIC_VCPE_CONNECT_POINT.toString() + "\"}";
428 - //json += "]}";
429 -
430 - long vlan = portToVlan.get(fromPoint.port().toLong());
431 479
480 + long vlan = vlanId.toShort();
432 481
433 JsonObject node = new JsonObject(); 482 JsonObject node = new JsonObject();
434 node.add("vlan", vlan); 483 node.add("vlan", vlan);
......
...@@ -56,7 +56,7 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -56,7 +56,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
56 import static org.slf4j.LoggerFactory.getLogger; 56 import static org.slf4j.LoggerFactory.getLogger;
57 57
58 /** 58 /**
59 - * Simple single table pipeline abstraction. 59 + * Pipeliner for OLT device.
60 */ 60 */
61 public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { 61 public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
62 62
...@@ -101,10 +101,6 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { ...@@ -101,10 +101,6 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
101 .matchEthType(EthType.EtherType.EAPOL.ethType().toShort()) 101 .matchEthType(EthType.EtherType.EAPOL.ethType().toShort())
102 .build(); 102 .build();
103 103
104 - TrafficSelector arpSelector = DefaultTrafficSelector.builder()
105 - .matchEthType(EthType.EtherType.ARP.ethType().toShort())
106 - .build();
107 -
108 TrafficTreatment treatment = DefaultTrafficTreatment.builder() 104 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
109 .punt() 105 .punt()
110 .build(); 106 .build();
...@@ -113,11 +109,7 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner { ...@@ -113,11 +109,7 @@ public class OLTPipeline extends AbstractHandlerBehaviour implements Pipeliner {
113 PacketPriority.CONTROL.priorityValue(), 109 PacketPriority.CONTROL.priorityValue(),
114 appId, 0, true, null); 110 appId, 0, true, null);
115 111
116 - FlowRule arpRule = new DefaultFlowRule(deviceId, arpSelector, treatment, 112 + flowRuleService.applyFlowRules(flowRule);
117 - PacketPriority.CONTROL.priorityValue(),
118 - appId, 0, true, null);
119 -
120 - flowRuleService.applyFlowRules(flowRule, arpRule);
121 } 113 }
122 114
123 @Override 115 @Override
......