diff options
Diffstat (limited to 'framework')
3 files changed, 36 insertions, 7 deletions
diff --git a/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceConfig.java b/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceConfig.java index 90ed7403..07b73c84 100644 --- a/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceConfig.java +++ b/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceConfig.java @@ -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); } } diff --git a/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceData.java b/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceData.java index f7e40e30..18b5e99f 100644 --- a/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceData.java +++ b/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/AccessDeviceData.java @@ -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; + } } diff --git a/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/OLT.java b/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/OLT.java index 9aa8865a..d5d7d277 100644 --- a/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/OLT.java +++ b/framework/src/onos/apps/olt/src/main/java/org/onosproject/olt/OLT.java @@ -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(); |