Jonathan Hart

Add configuration for default vlan

Change-Id: I183def6d1de3d10b2f53895f7fb7723df315379f
......@@ -16,11 +16,14 @@
package org.onosproject.olt;
import com.fasterxml.jackson.databind.JsonNode;
import org.onlab.packet.VlanId;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.config.Config;
import java.util.Optional;
/**
* Config object for access device data.
*/
......@@ -28,6 +31,7 @@ public class AccessDeviceConfig extends Config<DeviceId> {
private static final String UPLINK = "uplink";
private static final String VLAN = "vlan";
private static final String DEFAULT_VLAN = "defaultVlan";
/**
* Gets the access device configuration for this device.
......@@ -37,7 +41,15 @@ public class AccessDeviceConfig extends Config<DeviceId> {
public AccessDeviceData getOlt() {
PortNumber uplink = PortNumber.portNumber(node.path(UPLINK).asText());
VlanId vlan = VlanId.vlanId(Short.parseShort(node.path(VLAN).asText()));
JsonNode defaultVlanNode = node.path(DEFAULT_VLAN);
Optional<VlanId> defaultVlan;
if (defaultVlanNode.isMissingNode()) {
defaultVlan = Optional.empty();
} else {
defaultVlan = Optional.of(VlanId.vlanId(Short.parseShort(defaultVlanNode.asText())));
}
return new AccessDeviceData(subject(), uplink, vlan);
return new AccessDeviceData(subject(), uplink, vlan, defaultVlan);
}
}
......
......@@ -20,6 +20,8 @@ import org.onlab.packet.VlanId;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import java.util.Optional;
import static com.google.common.base.Preconditions.checkNotNull;
/**
......@@ -33,6 +35,7 @@ public class AccessDeviceData {
private final DeviceId deviceId;
private final PortNumber uplink;
private final VlanId vlan;
private final Optional<VlanId> defaultVlan;
/**
* Class constructor.
......@@ -41,10 +44,12 @@ public class AccessDeviceData {
* @param uplink uplink port number
* @param vlan device VLAN ID
*/
public AccessDeviceData(DeviceId deviceId, PortNumber uplink, VlanId vlan) {
public AccessDeviceData(DeviceId deviceId, PortNumber uplink, VlanId vlan,
Optional<VlanId> defaultVlan) {
this.deviceId = checkNotNull(deviceId, DEVICE_ID_MISSING);
this.uplink = checkNotNull(uplink, UPLINK_MISSING);
this.vlan = checkNotNull(vlan, VLAN_MISSING);
this.defaultVlan = checkNotNull(defaultVlan);
}
/**
......@@ -68,9 +73,18 @@ public class AccessDeviceData {
/**
* Retrieves the VLAN ID assigned to the device.
*
* @return vlan ID
* @return VLAN ID
*/
public VlanId vlan() {
return vlan;
}
/**
* Retrieves the default VLAN ID that will be used for this device.
*
* @return default VLAN ID
*/
public Optional<VlanId> defaultVlan() {
return defaultVlan;
}
}
......
......@@ -52,6 +52,7 @@ import org.slf4j.Logger;
import java.util.Dictionary;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import static org.slf4j.LoggerFactory.getLogger;
......@@ -247,15 +248,17 @@ public class OLT implements AccessDeviceService {
return;
}
provisionVlans(olt.deviceId(), olt.uplink(), port.port(), vlan, olt.vlan());
provisionVlans(olt.deviceId(), olt.uplink(), port.port(), vlan, olt.vlan(),
olt.defaultVlan());
}
private void provisionVlans(DeviceId deviceId, PortNumber uplinkPort,
PortNumber subscriberPort,
VlanId subscriberVlan, VlanId deviceVlan) {
VlanId subscriberVlan, VlanId deviceVlan,
Optional<VlanId> defaultVlan) {
TrafficSelector upstream = DefaultTrafficSelector.builder()
.matchVlanId(DEFAULT_VLAN)
.matchVlanId((defaultVlan.isPresent()) ? defaultVlan.get() : DEFAULT_VLAN)
.matchInPort(subscriberPort)
.build();
......@@ -273,7 +276,7 @@ public class OLT implements AccessDeviceService {
TrafficTreatment downstreamTreatment = DefaultTrafficTreatment.builder()
.popVlan()
.setVlanId(DEFAULT_VLAN)
.setVlanId((defaultVlan.isPresent()) ? defaultVlan.get() : DEFAULT_VLAN)
.setOutput(subscriberPort)
.build();
......