+ /**
+ * Extracts IP address from URI.
+ *
+ * @param uri in format protocol:ip:port
+ * @return IPv4 or IPv6 address as {@link String}.
+ */
+ private static @Nonnull String getIpAddrFromUri(Uri uri) {
+ String otherConfig = uri.getValue();
+ String[] elements = otherConfig.split(":");
+ // IPv6 expression also contains colons
+ if (elements.length < 3) {
+ return "";
+ }
+ StringBuilder sb = new StringBuilder();
+ // first (protocol) and last (port) elements are filtered
+ for (int i = 1; i < elements.length - 1; i++) {
+ sb.append(elements[i]);
+ }
+ return sb.toString();
+ }
+
+ private List<ControllerEntry> managerToControllerEntries(List<ManagerEntry> managerEntries) {
+ return Lists.transform(managerEntries, new Function<ManagerEntry, ControllerEntry>() {
+
+ @Override
+ public ControllerEntry apply(ManagerEntry managerEntry) {
+ String ipAddr = getIpAddrFromUri(managerEntry.getTarget());
+ Uri uri = new Uri(intBrSettings.getOpenflowProtocol() + OF_SEPARATOR + ipAddr + OF_SEPARATOR
+ + intBrSettings.getOpenflowPort());
+ return new ControllerEntryBuilder().setTarget(new Uri(uri)).build();
+ }
+ });
+ }
+
+ private Node createBridge(InstanceIdentifier<Node> managedByIid, List<ControllerEntry> controllerEntries,
+ String bridgeName) {
+ OvsdbBridgeAugmentation br = new OvsdbBridgeAugmentationBuilder()
+ .setBridgeName(new OvsdbBridgeName(bridgeName))
+ .setManagedBy(new OvsdbNodeRef(managedByIid))
+ .setControllerEntry(controllerEntries)
+ .setDatapathType(DatapathTypeSystem.class)
+ .setProtocolEntry(
+ ImmutableList.of(new ProtocolEntryBuilder().setProtocol(
+ OvsdbBridgeProtocolOpenflow13.class).build()))
+ .build();
+ NodeKey managerNodeKey = managedByIid.firstKeyOf(Node.class);
+ return new NodeBuilder().setNodeId(
+ new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId(
+ managerNodeKey.getNodeId().getValue() + BRIDGE_SEPARATOR + bridgeName))
+ .addAugmentation(OvsdbBridgeAugmentation.class, br)
+ .build();
+ }
+