| /* |
| * Copyright 2019-present Open Networking Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.opencord.bng; |
| |
| import com.google.common.base.MoreObjects; |
| import org.onlab.packet.IpAddress; |
| import org.onlab.packet.MacAddress; |
| import org.onlab.packet.VlanId; |
| import org.onosproject.core.ApplicationId; |
| import org.onosproject.net.ConnectPoint; |
| import org.onosproject.net.behaviour.BngProgrammable; |
| |
| /** |
| * Abstract implementation of an attachment. |
| */ |
| public abstract class BngAttachment implements BngProgrammable.Attachment { |
| private final ApplicationId appId; |
| private final VlanId sTag; |
| private final VlanId cTag; |
| private final MacAddress macAddress; |
| private final IpAddress ipAddress; |
| private final boolean lineActivated; |
| private final ConnectPoint oltConnectPoint; |
| private final String onuSerial; |
| private final short qinqTpid; |
| |
| /** |
| * Creates a new attachment. |
| * |
| * @param appId The application that created this attachment |
| * @param sTag The VLAN S-TAG |
| * @param cTag The VLAN C-TAG |
| * @param macAddress The MAC address of the attachment |
| * @param ipAddress The IP address of the attachment |
| * @param lineActivated Define if the attachment is active or not |
| * @param oltConnectPoint The connect point of the OLT (UNI port) |
| * @param onuSerial The serial string of the ONU |
| * @param qinqTpid The QinQ Tpid for the packets |
| */ |
| BngAttachment(ApplicationId appId, VlanId sTag, VlanId cTag, |
| MacAddress macAddress, IpAddress ipAddress, |
| boolean lineActivated, ConnectPoint oltConnectPoint, |
| String onuSerial, short qinqTpid) { |
| this.appId = appId; |
| this.sTag = sTag; |
| this.cTag = cTag; |
| this.macAddress = macAddress; |
| this.ipAddress = ipAddress; |
| this.lineActivated = lineActivated; |
| this.oltConnectPoint = oltConnectPoint; |
| this.onuSerial = onuSerial; |
| this.qinqTpid = qinqTpid; |
| } |
| |
| /** |
| * Returns the OLT connect point (UNI port). |
| * |
| * @return The OLT connect point |
| */ |
| public ConnectPoint oltConnectPoint() { |
| return this.oltConnectPoint; |
| } |
| |
| /** |
| * Returns the ONU serial number. |
| * |
| * @return The ONU serial number |
| */ |
| public String onuSerial() { |
| return this.onuSerial; |
| } |
| |
| /** |
| * Returns the QinQ TPID. |
| * |
| * @return The QinQ TPID |
| */ |
| public short qinqTpid() { |
| return this.qinqTpid; |
| } |
| |
| @Override |
| public ApplicationId appId() { |
| return appId; |
| } |
| |
| @Override |
| public VlanId sTag() { |
| return sTag; |
| } |
| |
| @Override |
| public VlanId cTag() { |
| return cTag; |
| } |
| |
| @Override |
| public MacAddress macAddress() { |
| return macAddress; |
| } |
| |
| @Override |
| public IpAddress ipAddress() { |
| return ipAddress; |
| } |
| |
| @Override |
| public boolean lineActive() { |
| return lineActivated; |
| } |
| |
| MoreObjects.ToStringHelper toStringHelper() { |
| return MoreObjects.toStringHelper(this) |
| .add("appId", appId) |
| .add("sTag", sTag) |
| .add("cTag", cTag) |
| .add("macAddress", macAddress) |
| .add("ipAddress", ipAddress) |
| .add("lineActivated", lineActivated) |
| .add("oltConnectPoint", oltConnectPoint) |
| .add("onuSerial", onuSerial) |
| .add("qinqTpid", qinqTpid); |
| } |
| |
| /** |
| * Abstract builder of attachments. |
| */ |
| public abstract static class BngBuilder { |
| ApplicationId appId; |
| VlanId sTag; |
| VlanId cTag; |
| MacAddress macAddress; |
| IpAddress ipAddress = IpAddress.valueOf(0); |
| boolean lineActivated; |
| ConnectPoint oltconnectPoint; |
| String onuSerial; |
| short qinqTpid; |
| |
| BngBuilder() { |
| // Hide constructor |
| this.lineActivated = false; |
| } |
| |
| /** |
| * Sets the ONU serial number. |
| * |
| * @param onuSerial The ONU serial number |
| * @return self |
| */ |
| public BngBuilder withOnuSerial(String onuSerial) { |
| this.onuSerial = onuSerial; |
| return this; |
| } |
| |
| /** |
| * Sets the OLT connect point (UNI port). |
| * |
| * @param oltconnectPoint The OLT connect point |
| * @return self |
| */ |
| public BngBuilder withOltConnectPoint(ConnectPoint oltconnectPoint) { |
| this.oltconnectPoint = oltconnectPoint; |
| return this; |
| } |
| |
| /** |
| * Sets the VLAN S-Tag. |
| * |
| * @param sTag The VLAN S-Tag |
| * @return self |
| */ |
| public BngBuilder withSTag(VlanId sTag) { |
| this.sTag = sTag; |
| return this; |
| } |
| |
| /** |
| * Sets the VLAN C-Tag. |
| * |
| * @param cTag the VLAN C-Tag |
| * @return self |
| */ |
| public BngBuilder withCTag(VlanId cTag) { |
| this.cTag = cTag; |
| return this; |
| } |
| |
| /** |
| * Sets the attachment activation state. |
| * |
| * @param lineActivated The attachment activation state |
| * @return self |
| */ |
| public BngBuilder lineActivated(boolean lineActivated) { |
| this.lineActivated = lineActivated; |
| return this; |
| } |
| |
| /** |
| * Sets the application ID. |
| * |
| * @param appId The application ID. |
| * @return self |
| */ |
| public BngBuilder withApplicationId(ApplicationId appId) { |
| this.appId = appId; |
| return this; |
| } |
| |
| /** |
| * Sets the attachment MAC address. |
| * |
| * @param macAddress The MAC address |
| * @return self |
| */ |
| public BngBuilder withMacAddress(MacAddress macAddress) { |
| this.macAddress = macAddress; |
| return this; |
| } |
| |
| /** |
| * Sets the attachment IP address. |
| * |
| * @param ipAddress The IP address |
| * @return self |
| */ |
| public BngBuilder withIpAddress(IpAddress ipAddress) { |
| this.ipAddress = ipAddress; |
| return this; |
| } |
| |
| /** |
| * Sets the QinQ tpid. |
| * |
| * @param qinqTpid The QinQ tpid |
| * @return self |
| */ |
| public BngBuilder withQinqTpid(short qinqTpid) { |
| this.qinqTpid = qinqTpid; |
| return this; |
| } |
| |
| /** |
| * Returns a new BNG attachment. |
| * |
| * @return BNG attachment |
| */ |
| public abstract BngAttachment build(); |
| } |
| } |