use of org.onosproject.ovsdb.controller.OvsdbInterface in project onos by opennetworkinglab.
the class OvsdbInterfaceConfig method addTunnelMode.
@Override
public boolean addTunnelMode(String ifaceName, TunnelDescription tunnelDesc) {
OvsdbInterface ovsdbIface = OvsdbInterface.builder(tunnelDesc).build();
OvsdbClientService ovsdbClient = getOvsdbClient(handler());
if (!tunnelDesc.deviceId().isPresent()) {
log.warn("Device ID is required {}", tunnelDesc);
return false;
}
return ovsdbClient.createInterface(tunnelDesc.deviceId().get(), ovsdbIface);
}
use of org.onosproject.ovsdb.controller.OvsdbInterface in project onos by opennetworkinglab.
the class OpenstackRecoverPortsCommand method recoverOvsPort.
/**
* Recovers the openvswitch port from conf.db corruption.
*
* @param controller ovsdb controller
* @param ovsdbPort ovsdb port number
* @param node openstack node
* @param osPort an openstack port
* @param ovsPorts set of openvswitch ports
*
* @return a set of recovered port name
*/
private Set<String> recoverOvsPort(OvsdbController controller, int ovsdbPort, OpenstackNode node, Port osPort, List<org.onosproject.net.Port> ovsPorts) {
OvsdbClientService client = getOvsdbClient(node, ovsdbPort, controller);
if (client == null) {
return ImmutableSet.of();
}
Set<String> portNames = ovsPorts.stream().filter(ovsPort -> ovsPort.annotations() != null || ovsPort.annotations().keys().contains(PORT_NAME)).map(ovsPort -> ovsPort.annotations().value(PORT_NAME)).collect(Collectors.toSet());
String tapPort = ifaceNameFromOsPortId(osPort.getId());
Set<String> recoveredPortNames = Sets.newConcurrentHashSet();
if (!portNames.contains(tapPort)) {
Map<String, String> extIdMap = ImmutableMap.of(ATTACHED_MAC, osPort.getMacAddress(), IFACE_ID, osPort.getId(), IFACE_STATUS, StringUtils.lowerCase(osPort.getState().name()), VM_ID, osPort.getDeviceId());
OvsdbInterface ovsIface = OvsdbInterface.builder().name(tapPort).options(ImmutableMap.of()).data(ImmutableMap.of(EXTERNALIDS, extIdMap)).build();
client.createInterface(INTEGRATION_BRIDGE, ovsIface);
recoveredPortNames.add(tapPort);
}
return ImmutableSet.copyOf(recoveredPortNames);
}
use of org.onosproject.ovsdb.controller.OvsdbInterface in project onos by opennetworkinglab.
the class OvsdbInterfaceConfig method addPatchMode.
@Override
public boolean addPatchMode(String ifaceName, PatchDescription patchDesc) {
OvsdbInterface ovsdbIface = OvsdbInterface.builder(patchDesc).build();
OvsdbClientService ovsdbClient = getOvsdbClient(handler());
if (!patchDesc.deviceId().isPresent()) {
log.warn("Device ID is required {}", patchDesc);
return false;
}
return ovsdbClient.createInterface(patchDesc.deviceId().get(), ovsdbIface);
}
use of org.onosproject.ovsdb.controller.OvsdbInterface in project onos by opennetworkinglab.
the class DefaultOvsdbClient method createInterface.
@Override
public boolean createInterface(String bridgeName, OvsdbInterface ovsdbIface) {
String bridgeUuid = getBridgeUuid(bridgeName);
if (bridgeUuid == null) {
log.warn("Couldn't find bridge {} in {}", bridgeName, nodeId.getIpAddress());
return false;
}
if (getPortUuid(ovsdbIface.name(), bridgeUuid) != null) {
log.warn("Interface {} already exists", ovsdbIface.name());
return false;
}
ArrayList<Operation> operations = Lists.newArrayList();
DatabaseSchema dbSchema = schema.get(DATABASENAME);
// insert a new port with the interface name
Port port = (Port) TableGenerator.createTable(dbSchema, OvsdbTable.PORT);
port.setName(ovsdbIface.name());
Insert portInsert = new Insert(dbSchema.getTableSchema(PORT), PORT, port.getRow());
portInsert.getRow().put(INTERFACES, Uuid.uuid(INTERFACE));
operations.add(portInsert);
// update the bridge table with the new port
Condition condition = ConditionUtil.isEqual(UUID, Uuid.uuid(bridgeUuid));
Mutation mutation = MutationUtil.insert(PORTS, Uuid.uuid(PORT));
List<Condition> conditions = Lists.newArrayList(condition);
List<Mutation> mutations = Lists.newArrayList(mutation);
operations.add(new Mutate(dbSchema.getTableSchema(BRIDGE), conditions, mutations));
Interface intf = (Interface) TableGenerator.createTable(dbSchema, OvsdbTable.INTERFACE);
intf.setName(ovsdbIface.name());
if (ovsdbIface.type() != null) {
intf.setType(ovsdbIface.typeToString());
}
if (ovsdbIface.mtu().isPresent()) {
Set<Long> mtuSet = Sets.newConcurrentHashSet();
mtuSet.add(ovsdbIface.mtu().get());
intf.setMtu(mtuSet);
intf.setMtuRequest(mtuSet);
}
intf.setOptions(ovsdbIface.options());
ovsdbIface.data().forEach((k, v) -> {
if (k == Interface.InterfaceColumn.EXTERNALIDS) {
intf.setExternalIds(v);
}
});
Insert intfInsert = new Insert(dbSchema.getTableSchema(INTERFACE), INTERFACE, intf.getRow());
operations.add(intfInsert);
transactConfig(DATABASENAME, operations);
log.info("Created interface {}", ovsdbIface);
return true;
}
Aggregations