blob: 1cfc1541e82c0f2bf465a8634f87fdb52c6a8e84 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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 com.cloud.network;
import com.cloud.dc.Vlan;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.hypervisor.vmware.mo.VirtualSwitchType;
import com.cloud.network.Networks.TrafficType;
public class VmwareTrafficLabel implements TrafficLabel {
public static final String DEFAULT_VSWITCH_NAME = "vSwitch0";
public static final String DEFAULT_DVSWITCH_NAME = "dvSwitch0";
public static final String DEFAULT_NDVSWITCH_NAME = "epp0";
public static final int MAX_FIELDS_VMWARE_LABEL = 3;
public static final int VMWARE_LABEL_FIELD_INDEX_NAME = 0;
public static final int VMWARE_LABEL_FIELD_INDEX_VLANID = 1;
public static final int VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE = 2;
TrafficType _trafficType = TrafficType.None;
VirtualSwitchType _vSwitchType = VirtualSwitchType.StandardVirtualSwitch;
String _vSwitchName = DEFAULT_VSWITCH_NAME;
String _vlanId = Vlan.UNTAGGED;
public VmwareTrafficLabel(String networkLabel, TrafficType trafficType, VirtualSwitchType defVswitchType) {
_trafficType = trafficType;
_parseLabel(networkLabel, defVswitchType);
}
public VmwareTrafficLabel(String networkLabel, TrafficType trafficType) {
_trafficType = trafficType;
_parseLabel(networkLabel, VirtualSwitchType.StandardVirtualSwitch);
}
public VmwareTrafficLabel(TrafficType trafficType, VirtualSwitchType defVswitchType) {
_trafficType = trafficType; // Define traffic label with specific traffic type
_parseLabel(null, defVswitchType);
}
public VmwareTrafficLabel(TrafficType trafficType) {
_trafficType = trafficType; // Define traffic label with specific traffic type
_parseLabel(null, VirtualSwitchType.StandardVirtualSwitch);
}
public VmwareTrafficLabel() {
}
private void _parseLabel(String networkLabel, VirtualSwitchType defVswitchType) {
// Set defaults for label in case of distributed vSwitch
if (defVswitchType.equals(VirtualSwitchType.VMwareDistributedVirtualSwitch)) {
_vSwitchName = DEFAULT_DVSWITCH_NAME;
_vSwitchType = VirtualSwitchType.VMwareDistributedVirtualSwitch;
} else if (defVswitchType.equals(VirtualSwitchType.NexusDistributedVirtualSwitch)) {
_vSwitchName = DEFAULT_NDVSWITCH_NAME;
_vSwitchType = VirtualSwitchType.NexusDistributedVirtualSwitch;
}
if (networkLabel == null || networkLabel.isEmpty()) {
return;
}
String[] tokens = networkLabel.split(",");
if (tokens.length > VMWARE_LABEL_FIELD_INDEX_NAME) {
_vSwitchName = tokens[VMWARE_LABEL_FIELD_INDEX_NAME].trim();
}
if (tokens.length > VMWARE_LABEL_FIELD_INDEX_VLANID) {
String vlanToken = tokens[VMWARE_LABEL_FIELD_INDEX_VLANID].trim();
if (!vlanToken.isEmpty()) {
_vlanId = vlanToken;
}
}
if (tokens.length > VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE) {
_vSwitchType = VirtualSwitchType.getType(tokens[VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE].trim());
if (VirtualSwitchType.None == _vSwitchType) {
throw new InvalidParameterValueException("Invalid virtual switch type : " + tokens[VMWARE_LABEL_FIELD_INDEX_VSWITCH_TYPE].trim());
}
}
if (tokens.length > MAX_FIELDS_VMWARE_LABEL) {
throw new InvalidParameterValueException("Found extraneous fields in vmware traffic label : " + networkLabel);
}
}
@Override
public TrafficType getTrafficType() {
return _trafficType;
}
@Override
public String getNetworkLabel() {
return null;
}
public VirtualSwitchType getVirtualSwitchType() {
return _vSwitchType;
}
public String getVirtualSwitchName() {
return _vSwitchName;
}
public String getVlanId() {
return _vlanId;
}
public void setVirtualSwitchName(String vSwitchName) {
_vSwitchName = vSwitchName;
}
public void setVirtualSwitchType(VirtualSwitchType vSwitchType) {
_vSwitchType = vSwitchType;
}
}