mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-18 19:01:06 +02:00
[ONOS-7731] Add a set of interfaces for openstack vTap app
Change-Id: Ic44030a996bb6c3d5883acfdb3ac310a290682f6
This commit is contained in:
parent
e2e03a52a6
commit
38e4d94786
@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onosproject.net.Annotated;
|
||||||
|
import org.onosproject.net.DeviceId;
|
||||||
|
import org.onosproject.net.SparseAnnotations;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstraction of an OpenstackVtap.
|
||||||
|
*/
|
||||||
|
public interface OpenstackVtap extends Annotated {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Openstack vTap type.
|
||||||
|
*/
|
||||||
|
enum Type {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates mirroring both TX and RX traffic.
|
||||||
|
*/
|
||||||
|
VTAP_ALL(0x3),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates only mirroring RX traffic.
|
||||||
|
*/
|
||||||
|
VTAP_RX(0x2),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates only mirroring TX traffic.
|
||||||
|
*/
|
||||||
|
VTAP_TX(0x1),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates do not mirroring any traffic.
|
||||||
|
*/
|
||||||
|
VTAP_NONE(0);
|
||||||
|
|
||||||
|
private final int type;
|
||||||
|
|
||||||
|
Type(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid(Type comp) {
|
||||||
|
return (this.type & comp.type) == comp.type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenstackVtap identifier.
|
||||||
|
*
|
||||||
|
* @return OpenstackVtap id
|
||||||
|
*/
|
||||||
|
OpenstackVtapId id();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns OpenstackVtap type.
|
||||||
|
*
|
||||||
|
* @return type
|
||||||
|
*/
|
||||||
|
Type type();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the vTap criterion.
|
||||||
|
*
|
||||||
|
* @return vTap criterion
|
||||||
|
*/
|
||||||
|
OpenstackVtapCriterion vTapCriterion();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a collection of TX device identifiers.
|
||||||
|
*
|
||||||
|
* @return device identifiers
|
||||||
|
*/
|
||||||
|
Set<DeviceId> txDeviceIds();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a collection of RX device identifiers.
|
||||||
|
*
|
||||||
|
* @return device identifiers
|
||||||
|
*/
|
||||||
|
Set<DeviceId> rxDeviceIds();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builder of new openstack vTap instance.
|
||||||
|
*/
|
||||||
|
interface Builder {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap builder with supplied vTap identifier.
|
||||||
|
*
|
||||||
|
* @param id vTap identifier
|
||||||
|
* @return openstack vTap builder
|
||||||
|
*/
|
||||||
|
Builder id(OpenstackVtapId id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap builder with supplied vTap type.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @return openstack vTap builder
|
||||||
|
*/
|
||||||
|
Builder type(OpenstackVtap.Type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap builder with supplied vTap criterion.
|
||||||
|
*
|
||||||
|
* @param vTapCriterion vTap criterion
|
||||||
|
* @return openstack vTap builder
|
||||||
|
*/
|
||||||
|
Builder vTapCriterion(OpenstackVtapCriterion vTapCriterion);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap builder with supplied TX device identifiers.
|
||||||
|
*
|
||||||
|
* @param txDeviceIds TX device identifiers
|
||||||
|
* @return openstack vTap builder
|
||||||
|
*/
|
||||||
|
Builder txDeviceIds(Set<DeviceId> txDeviceIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap builder with supplied RX device identifiers.
|
||||||
|
*
|
||||||
|
* @param rxDeviceIds RX device identifiers
|
||||||
|
* @return openstack vTap builder
|
||||||
|
*/
|
||||||
|
Builder rxDeviceIds(Set<DeviceId> rxDeviceIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap builder with supplied annotations.
|
||||||
|
*
|
||||||
|
* @param annotations a set of annotations
|
||||||
|
* @return openstack vTap builder
|
||||||
|
*/
|
||||||
|
Builder annotations(SparseAnnotations... annotations);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds an immutable openstack vTap instance.
|
||||||
|
*
|
||||||
|
* @return openstack vTap instance
|
||||||
|
*/
|
||||||
|
OpenstackVtap build();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onlab.packet.VlanId;
|
||||||
|
import org.onosproject.net.DeviceId;
|
||||||
|
import org.onosproject.net.PortNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service for administering the inventory of vTap.
|
||||||
|
*/
|
||||||
|
public interface OpenstackVtapAdminService extends OpenstackVtapService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new vTap based on the specified description.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @param vTapCriterion criterion of a vTap
|
||||||
|
* @return created vTap object or null if error occurred
|
||||||
|
*/
|
||||||
|
OpenstackVtap createVtap(OpenstackVtap.Type type, OpenstackVtapCriterion vTapCriterion);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the existing vTap based on the given vTap instance.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identifier
|
||||||
|
* @param vTap vTap instance to be modified
|
||||||
|
* @return updated vTap object or null if error occurred
|
||||||
|
*/
|
||||||
|
OpenstackVtap updateVtap(OpenstackVtapId vTapId, OpenstackVtap vTap);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified vTap with given vTap identifier.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identifier
|
||||||
|
* @return removed vTap object or null if error occurred
|
||||||
|
*/
|
||||||
|
OpenstackVtap removeVtap(OpenstackVtapId vTapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets output port and VLAN tag for vTap.
|
||||||
|
*
|
||||||
|
* @param deviceId device identifier
|
||||||
|
* @param type vTap type
|
||||||
|
* @param portNumber port number
|
||||||
|
* @param vlanId VLAN tag
|
||||||
|
*/
|
||||||
|
void setVtapOutput(DeviceId deviceId, OpenstackVtap.Type type,
|
||||||
|
PortNumber portNumber, VlanId vlanId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets output port and VNI for vTap.
|
||||||
|
*
|
||||||
|
* @param deviceId device identifier
|
||||||
|
* @param type vTap type
|
||||||
|
* @param portNumber port number
|
||||||
|
* @param vni virtual network index (VNI) of VxLAN
|
||||||
|
*/
|
||||||
|
void setVtapOutput(DeviceId deviceId, OpenstackVtap.Type type,
|
||||||
|
PortNumber portNumber, int vni);
|
||||||
|
}
|
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onlab.packet.IpPrefix;
|
||||||
|
import org.onlab.packet.TpPort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A vTAP criterion used for mirroring traffic.
|
||||||
|
*/
|
||||||
|
public interface OpenstackVtapCriterion {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns IP Prefix of Source VM.
|
||||||
|
*
|
||||||
|
* @return source IP prefix
|
||||||
|
*/
|
||||||
|
IpPrefix srcIpPrefix();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns IP Prefix of Destination VM.
|
||||||
|
*
|
||||||
|
* @return destination IP prefix
|
||||||
|
*/
|
||||||
|
IpPrefix dstIpPrefix();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns IP protocol.
|
||||||
|
*
|
||||||
|
* @return IP protocol
|
||||||
|
*/
|
||||||
|
byte ipProtocol();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns source transport port.
|
||||||
|
*
|
||||||
|
* @return source transport port number
|
||||||
|
*/
|
||||||
|
|
||||||
|
TpPort srcTpPort();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns destination transport port.
|
||||||
|
*
|
||||||
|
* @return destination transport port number
|
||||||
|
*/
|
||||||
|
TpPort dstTpPort();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builder of new openstack vTap criteria.
|
||||||
|
*/
|
||||||
|
interface Builder {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds an immutable openstack vTap criterion instance.
|
||||||
|
*
|
||||||
|
* @return openstack vTap criterion
|
||||||
|
*/
|
||||||
|
OpenstackVtapCriterion build();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap criterion builder with supplied srcIpPrefix.
|
||||||
|
*
|
||||||
|
* @param srcIpPrefix Source IP address
|
||||||
|
* @return openstack vTap criterion builder
|
||||||
|
*/
|
||||||
|
Builder srcIpPrefix(IpPrefix srcIpPrefix);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap criterion builder with supplied srcIpPrefix.
|
||||||
|
*
|
||||||
|
* @param dstIpPrefix Destination IP Prefix
|
||||||
|
* @return openstack vTap criterion builder
|
||||||
|
*/
|
||||||
|
Builder dstIpPrefix(IpPrefix dstIpPrefix);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap criterion builder with supplied ipProtocol.
|
||||||
|
*
|
||||||
|
* @param ipProtocol IP protocol number
|
||||||
|
* @return openstack vTap criterion builder
|
||||||
|
*/
|
||||||
|
Builder ipProtocol(byte ipProtocol);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap criterion builder with supplied srcTpPort.
|
||||||
|
*
|
||||||
|
* @param srcTpPort Source transport port number
|
||||||
|
* @return openstack vTap criterion builder
|
||||||
|
*/
|
||||||
|
Builder srcTpPort(TpPort srcTpPort);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns openstack vTap criterion builder with supplied dstTpPort.
|
||||||
|
*
|
||||||
|
* @param dstTpPort Destination transport port number
|
||||||
|
* @return openstack vTap criterion builder
|
||||||
|
*/
|
||||||
|
Builder dstTpPort(TpPort dstTpPort);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onlab.util.Tools;
|
||||||
|
import org.onosproject.event.AbstractEvent;
|
||||||
|
|
||||||
|
import static com.google.common.base.MoreObjects.toStringHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes vTap event.
|
||||||
|
*/
|
||||||
|
public class OpenstackVtapEvent extends AbstractEvent<OpenstackVtapEvent.Type, OpenstackVtap> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Type of vTap events.
|
||||||
|
*/
|
||||||
|
public enum Type {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signifies that a new vTap has been added.
|
||||||
|
*/
|
||||||
|
VTAP_ADDED,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signifies that a vTap has been removed.
|
||||||
|
*/
|
||||||
|
VTAP_REMOVED,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signifies that a vTap data changed.
|
||||||
|
*/
|
||||||
|
VTAP_UPDATED,
|
||||||
|
}
|
||||||
|
|
||||||
|
private OpenstackVtap prevSubject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an event of a given type and for the specified vTap and the
|
||||||
|
* current time.
|
||||||
|
*
|
||||||
|
* @param type vTap event type
|
||||||
|
* @param vTap event vTap subject
|
||||||
|
*/
|
||||||
|
public OpenstackVtapEvent(Type type, OpenstackVtap vTap) {
|
||||||
|
super(type, vTap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an event of a given type and for the specified vTap and time.
|
||||||
|
*
|
||||||
|
* @param type vTap event type
|
||||||
|
* @param vTap event vTap subject
|
||||||
|
* @param time occurrence time
|
||||||
|
*/
|
||||||
|
public OpenstackVtapEvent(Type type, OpenstackVtap vTap, long time) {
|
||||||
|
super(type, vTap, time);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an event with previous subject.
|
||||||
|
*
|
||||||
|
* The previous subject is ignored if the type is not moved or updated
|
||||||
|
*
|
||||||
|
* @param type vTap event type
|
||||||
|
* @param vTap event vTap subject
|
||||||
|
* @param prevSubject previous vTap subject
|
||||||
|
*/
|
||||||
|
public OpenstackVtapEvent(Type type, OpenstackVtap vTap, OpenstackVtap prevSubject) {
|
||||||
|
super(type, vTap);
|
||||||
|
if (type == Type.VTAP_UPDATED) {
|
||||||
|
this.prevSubject = prevSubject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the previous subject in this vTap event.
|
||||||
|
*
|
||||||
|
* @return the previous subject, or null if previous subject is not
|
||||||
|
* specified.
|
||||||
|
*/
|
||||||
|
public OpenstackVtap prevSubject() {
|
||||||
|
return this.prevSubject;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return toStringHelper(this)
|
||||||
|
.add("time", Tools.defaultOffsetDataTime(time()))
|
||||||
|
.add("type", type())
|
||||||
|
.add("subject", subject())
|
||||||
|
.add("prevSubject", prevSubject())
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Immutable representation of an openstack vTap identifier.
|
||||||
|
*/
|
||||||
|
public final class OpenstackVtapId {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents either no vTap, or an unspecified vTap.
|
||||||
|
*/
|
||||||
|
public static final OpenstackVtapId NONE = new OpenstackVtapId(null);
|
||||||
|
|
||||||
|
private final UUID uuid;
|
||||||
|
|
||||||
|
// Public construction is prohibited
|
||||||
|
private OpenstackVtapId(UUID uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default constructor for serialization
|
||||||
|
private OpenstackVtapId() {
|
||||||
|
this.uuid = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an unique UUID.
|
||||||
|
*
|
||||||
|
* @return UUID
|
||||||
|
*/
|
||||||
|
public UUID uuid() {
|
||||||
|
return uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a vTap identifier using the supplied UUID.
|
||||||
|
*
|
||||||
|
* @param uuid vTap UUID
|
||||||
|
* @return vTap identifier
|
||||||
|
*/
|
||||||
|
public static OpenstackVtapId vTapId(UUID uuid) {
|
||||||
|
return new OpenstackVtapId(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a vTap identifier using the supplied string format of UUID.
|
||||||
|
*
|
||||||
|
* @param uuidString vTap UUID
|
||||||
|
* @return vTap identifier
|
||||||
|
*/
|
||||||
|
public static OpenstackVtapId vTapId(String uuidString) {
|
||||||
|
try {
|
||||||
|
return vTapId(UUID.fromString(uuidString));
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new IllegalArgumentException("Invalid UUID string: " + uuidString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a OpenstackVtap id using random uuid.
|
||||||
|
*
|
||||||
|
* @return OpenstackVtap identifier
|
||||||
|
*/
|
||||||
|
public static OpenstackVtapId vTapId() {
|
||||||
|
return new OpenstackVtapId(UUID.randomUUID());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return uuid.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (obj instanceof OpenstackVtapId) {
|
||||||
|
final OpenstackVtapId other = (OpenstackVtapId) obj;
|
||||||
|
return Objects.equals(this.uuid, other.uuid);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onosproject.event.EventListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entity capable of receiving user related events.
|
||||||
|
*/
|
||||||
|
public interface OpenstackVtapListener extends EventListener<OpenstackVtapEvent> {
|
||||||
|
}
|
@ -15,13 +15,47 @@
|
|||||||
*/
|
*/
|
||||||
package org.onosproject.openstackvtap.api;
|
package org.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onosproject.event.ListenerService;
|
||||||
|
import org.onosproject.net.DeviceId;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Openstack vtap interface.
|
* Service for interacting with the inventory of vTap.
|
||||||
*/
|
*/
|
||||||
public interface OpenstackVtapService {
|
public interface OpenstackVtapService
|
||||||
|
extends ListenerService<OpenstackVtapEvent, OpenstackVtapListener> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A dummy method.
|
* Returns the number of vTaps in the store.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @return vTap count
|
||||||
*/
|
*/
|
||||||
void dummy();
|
int getVtapCount(OpenstackVtap.Type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a collection of selected vTaps in the store.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @return iterable collection of selected vTaps
|
||||||
|
*/
|
||||||
|
Set<OpenstackVtap> getVtaps(OpenstackVtap.Type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the vTap with the specified identifier.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identifier
|
||||||
|
* @return vTap or null if not exist
|
||||||
|
*/
|
||||||
|
OpenstackVtap getVtap(OpenstackVtapId vTapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a collection of vTaps which are associated with the given device.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @param deviceId device identifier
|
||||||
|
* @return a set of vTaps
|
||||||
|
*/
|
||||||
|
Set<OpenstackVtap> getVtapsByDeviceId(OpenstackVtap.Type type, DeviceId deviceId);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onosproject.net.DeviceId;
|
||||||
|
import org.onosproject.store.Store;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manages inventory of OpenstackVtap states; not intended for direct use.
|
||||||
|
*/
|
||||||
|
public interface OpenstackVtapStore
|
||||||
|
extends Store<OpenstackVtapEvent, OpenstackVtapStoreDelegate> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new vTap or updates the existing one based on the specified
|
||||||
|
* description.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identifier
|
||||||
|
* @param description vTap description data
|
||||||
|
* @param replaceFlag replace device set if true, merge device set otherwise
|
||||||
|
* @return created or updated vTap object or null if error occurred
|
||||||
|
*/
|
||||||
|
OpenstackVtap createOrUpdateVtap(OpenstackVtapId vTapId, OpenstackVtap description, boolean replaceFlag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified vTap from the inventory by the given vTap identifier.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identifier
|
||||||
|
* @return removed vTap object or null if error occurred
|
||||||
|
*/
|
||||||
|
OpenstackVtap removeVtapById(OpenstackVtapId vTapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the specified device id from the vTap entry.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identification
|
||||||
|
* @param type vTap type
|
||||||
|
* @param deviceId device identifier to be added
|
||||||
|
* @return true on success, false otherwise
|
||||||
|
*/
|
||||||
|
boolean addDeviceToVtap(OpenstackVtapId vTapId, OpenstackVtap.Type type, DeviceId deviceId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified device id from the vTap entry.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identification
|
||||||
|
* @param type vTap type
|
||||||
|
* @param deviceId device identifier to be removed
|
||||||
|
* @return true on success, false otherwise
|
||||||
|
*/
|
||||||
|
boolean removeDeviceFromVtap(OpenstackVtapId vTapId, OpenstackVtap.Type type, DeviceId deviceId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the specified device id from the vTap entry.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identification
|
||||||
|
* @param txDeviceIds TX device identifiers to be updated
|
||||||
|
* @param rxDeviceIds RX device identifiers to be updated
|
||||||
|
* @param replaceFlag replace device set if true, merge device set otherwise
|
||||||
|
* @return true on success, false otherwise
|
||||||
|
*/
|
||||||
|
boolean updateDeviceForVtap(OpenstackVtapId vTapId, Set<DeviceId> txDeviceIds,
|
||||||
|
Set<DeviceId> rxDeviceIds, boolean replaceFlag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of vTaps in the store.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @return vTap count
|
||||||
|
*/
|
||||||
|
int getVtapCount(OpenstackVtap.Type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a collection of selected vTaps in the store.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @return iterable collection of selected vTaps
|
||||||
|
*/
|
||||||
|
Set<OpenstackVtap> getVtaps(OpenstackVtap.Type type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the vTap with the specified identifier.
|
||||||
|
*
|
||||||
|
* @param vTapId vTap identifier
|
||||||
|
* @return vtap or null if not found
|
||||||
|
*/
|
||||||
|
OpenstackVtap getVtap(OpenstackVtapId vTapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the set of vTaps whose included on device.
|
||||||
|
*
|
||||||
|
* @param type vTap type
|
||||||
|
* @param deviceId device identifier
|
||||||
|
* @return set of vTaps
|
||||||
|
*/
|
||||||
|
Set<OpenstackVtap> getVtapsByDeviceId(OpenstackVtap.Type type, DeviceId deviceId);
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018-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.onosproject.openstackvtap.api;
|
||||||
|
|
||||||
|
import org.onosproject.store.StoreDelegate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenstackVtap store delegate abstraction.
|
||||||
|
*/
|
||||||
|
public interface OpenstackVtapStoreDelegate extends StoreDelegate<OpenstackVtapEvent> {
|
||||||
|
}
|
@ -156,6 +156,12 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.onosproject</groupId>
|
||||||
|
<artifactId>onos-core-serializers</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.onosproject</groupId>
|
<groupId>org.onosproject</groupId>
|
||||||
<artifactId>onos-rest</artifactId>
|
<artifactId>onos-rest</artifactId>
|
||||||
|
@ -15,14 +15,44 @@
|
|||||||
*/
|
*/
|
||||||
package org.onosproject.openstackvtap.impl;
|
package org.onosproject.openstackvtap.impl;
|
||||||
|
|
||||||
|
import org.onosproject.net.DeviceId;
|
||||||
|
import org.onosproject.openstackvtap.api.OpenstackVtap;
|
||||||
|
import org.onosproject.openstackvtap.api.OpenstackVtapId;
|
||||||
|
import org.onosproject.openstackvtap.api.OpenstackVtapListener;
|
||||||
import org.onosproject.openstackvtap.api.OpenstackVtapService;
|
import org.onosproject.openstackvtap.api.OpenstackVtapService;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of openstack vtap.
|
* Implementation of openstack vtap.
|
||||||
*/
|
*/
|
||||||
public class OpenstackVtapManager implements OpenstackVtapService {
|
public class OpenstackVtapManager implements OpenstackVtapService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void dummy() {
|
public int getVtapCount(OpenstackVtap.Type type) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<OpenstackVtap> getVtaps(OpenstackVtap.Type type) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OpenstackVtap getVtap(OpenstackVtapId vTapId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<OpenstackVtap> getVtapsByDeviceId(OpenstackVtap.Type type, DeviceId deviceId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addListener(OpenstackVtapListener listener) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeListener(OpenstackVtapListener listener) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user