package org.opennaas.extensions.capability.macbridge.vlanawarebridge.shell;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
import org.opennaas.core.resources.IResource;
import org.opennaas.core.resources.ResourceException;
import org.opennaas.core.resources.shell.GenericKarafCommand;
import org.opennaas.extensions.capability.macbridge.model.PortConfiguration;
import org.opennaas.extensions.capability.macbridge.model.StaticVLANRegistrationEntry;
import org.opennaas.extensions.capability.macbridge.vlanawarebridge.IVLANAwareBridgeCapability;
/**
* @author Eduard Grasa
*/
@Command(scope = "vlanawarebridge", name = "addstaticvlanconfig", description = "Add a static VLAN configuration entry to the filtering database")
public class AddStaticVLANConfigCommand extends GenericKarafCommand {
private static final String TAGGED = "tagged";
@Argument(index = 0, name = "resourceType:resourceName", description = "Name of the MAC bridge to create the static VLAN configuration on", required = true, multiValued = false)
private String resourceId;
@Argument(index = 1, name = "vlanID", description = "ID of the VLAN", required = true, multiValued = false)
private int vlanID;
@Argument(index = 2, name = "portConfigurations", description = "The port configurations that will be part of this VLAN, in " +
"the form portId1=tagged&portId2=untagged&portid3=tagged", required = true, multiValued = false)
private String portConfigurations;
@Override
protected Object doExecute() throws Exception {
printInitCommand("Create a static VLAN configuration entry to the filtering database");
try {
IResource macBridge = getResourceFromFriendlyName(resourceId);
IVLANAwareBridgeCapability vlanAwareBridgeCapability =
(IVLANAwareBridgeCapability) macBridge.getCapabilityByInterface(IVLANAwareBridgeCapability.class);
StaticVLANRegistrationEntry entry = generateStaticVLANRegistrationEntry(vlanID, portConfigurations);
vlanAwareBridgeCapability.addStaticVLANRegistrationEntryToFilteringDatabase(entry);
} catch (ResourceException e) {
printError(e);
printEndCommand();
return -1;
} catch (Exception e) {
printError("Error creating a static VLAN configuration entry to the filtering database");
printError(e);
printEndCommand();
return -1;
}
printEndCommand();
return null;
}
private StaticVLANRegistrationEntry generateStaticVLANRegistrationEntry(int vlanID, String portConfigurations) {
String[] aux = null;
String[] aux2 = null;
StaticVLANRegistrationEntry entry = new StaticVLANRegistrationEntry();
entry.setVlanID(vlanID);
aux = portConfigurations.split("&");
PortConfiguration portConfiguration = null;
for (int i = 0; i < aux.length; i++) {
portConfiguration = new PortConfiguration();
aux2 = aux[i].split("=");
portConfiguration.setPortInterfaceId(aux2[0]);
if (aux2[1].equals(TAGGED)) {
portConfiguration.setTagged(true);
} else {
portConfiguration.setTagged(false);
}
entry.getPortConfigurations().add(portConfiguration);
}
return entry;
}
}