*/
package org.opendaylight.groupbasedpolicy.neutron.ovsdb.util;
-import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.DataStore.getLongFromDpid;
-import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.DataStore.readFromDs;
-import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.DataStore.submitToDs;
+import static org.opendaylight.groupbasedpolicy.util.DataStoreHelper.readFromDs;
+import static org.opendaylight.groupbasedpolicy.util.DataStoreHelper.submitToDs;
import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.OvsdbHelper.getOvsdbBridgeFromTerminationPoint;
import static org.opendaylight.groupbasedpolicy.neutron.ovsdb.util.OvsdbHelper.getOvsdbTerminationPoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.ExternalInterfacesKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.Tunnel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
public class InventoryHelper {
private static final Logger LOG = LoggerFactory.getLogger(InventoryHelper.class);
+ private static final String HEX = "0x";
+
+ /**
+ * Convert an OpenFlow Datapath ID to a Long
+ *
+ * @param dpid The OpenFlow Datapath ID
+ * @return The Long representation of the DPID
+ */
+ public static Long getLongFromDpid(String dpid) {
+ String[] addressInBytes = dpid.split(":");
+ Long address =
+ (Long.decode(HEX + addressInBytes[2]) << 40) |
+ (Long.decode(HEX + addressInBytes[3]) << 32) |
+ (Long.decode(HEX + addressInBytes[4]) << 24) |
+ (Long.decode(HEX + addressInBytes[5]) << 16) |
+ (Long.decode(HEX + addressInBytes[6]) << 8 ) |
+ (Long.decode(HEX + addressInBytes[7]));
+ return address;
+ }
private static final Long MAX_OF_PORT=65534L;
/**
submitToDs(transaction);
}
+ private static void addTunnelToOfOverlayAugmentation(Tunnel tunnel, String nodeIdString, DataBroker dataBroker) {
+ InstanceIdentifier<Tunnel> ofOverlayNodeIid = InstanceIdentifier.builder(
+ Nodes.class)
+ .child(Node.class, new NodeKey(new NodeId(nodeIdString)))
+ .augmentation(OfOverlayNodeConfig.class)
+ .child(Tunnel.class, new TunnelKey(tunnel.getKey()))
+ .build();
+
+ WriteTransaction transaction = dataBroker.newReadWriteTransaction();
+ transaction.merge(LogicalDatastoreType.CONFIGURATION, ofOverlayNodeIid, tunnel, true);
+ submitToDs(transaction);
+ }
+
/**
* Update the {@link OfOverlayConfig} of an Inventory Node
* using the new tunnel state.
}
}
if (tunnelsUpdated == true) {
- OfOverlayNodeConfigBuilder ofOverlayBuilder = null;
- if (ofConfig == null) {
- ofOverlayBuilder = new OfOverlayNodeConfigBuilder();
- } else {
- ofOverlayBuilder = new OfOverlayNodeConfigBuilder(ofConfig);
+ for (Tunnel tunnel: tunnelList) {
+ addTunnelToOfOverlayAugmentation(tunnel, nodeIdString, dataBroker);
}
- ofOverlayBuilder.setTunnel(tunnelList);
- addOfOverlayAugmentation(ofOverlayBuilder.build(), nodeIdString, dataBroker);
}
}
}