package org.opendaylight.lispflowmapping.implementation.mdsal;
import java.util.Collection;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.lispflowmapping.interfaces.mapcache.IMappingSystem;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingDatabase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.AuthenticationKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.AuthenticationKeyBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
LOG.trace("Key: {}", change.getRootPath().getRootIdentifier());
LOG.trace("Value: {}", authKey);
- mapSystem.removeAuthenticationKey(authKey.getEid());
+ final AuthenticationKey convertedAuthKey = convertToBinaryIfNecessary(authKey);
+
+ mapSystem.removeAuthenticationKey(convertedAuthKey.getEid());
} else if (ModificationType.WRITE == mod.getModificationType() || ModificationType.SUBTREE_MODIFIED == mod
.getModificationType()) {
if (ModificationType.WRITE == mod.getModificationType()) {
LOG.trace("Key: {}", change.getRootPath().getRootIdentifier());
LOG.trace("Value: {}", authKey);
- mapSystem.addAuthenticationKey(authKey.getEid(), authKey.getMappingAuthkey());
+ final AuthenticationKey convertedAuthKey = convertToBinaryIfNecessary(authKey);
+
+ mapSystem.addAuthenticationKey(convertedAuthKey.getEid(), convertedAuthKey.getMappingAuthkey());
} else {
LOG.warn("Ignoring unhandled modification type {}", mod.getModificationType());
}
}
}
+ private static AuthenticationKey convertToBinaryIfNecessary(AuthenticationKey authKey) {
+ Eid originalEid = authKey.getEid();
+ if (originalEid.getAddress() instanceof Ipv4Prefix || originalEid.getAddress() instanceof Ipv6Prefix ||
+ originalEid.getAddress() instanceof Ipv4 || originalEid.getAddress() instanceof Ipv6) {
+ AuthenticationKeyBuilder akb = new AuthenticationKeyBuilder(authKey);
+ akb.setEid(LispAddressUtil.convertToBinary(originalEid));
+ return akb.build();
+ }
+ return authKey;
+ }
+
void setMappingSystem(IMappingSystem msmr) {
this.mapSystem = msmr;
}
}
}
+ private static Ipv4PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix prefix) {
+ Ipv4PrefixBinaryBuilder pb = new Ipv4PrefixBinaryBuilder();
+ byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv4Prefix(prefix)).getAddress();
+ pb.setIpv4AddressBinary(new Ipv4AddressBinary(address));
+ pb.setIpv4MaskLength(MaskUtil.getMaskForAddress(prefix));
+ return pb.build();
+ }
+
+ private static Ipv6PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix prefix) {
+ Ipv6PrefixBinaryBuilder pb = new Ipv6PrefixBinaryBuilder();
+ byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv6Prefix(prefix)).getAddress();
+ pb.setIpv6AddressBinary(new Ipv6AddressBinary(address));
+ pb.setIpv6MaskLength(MaskUtil.getMaskForAddress(prefix));
+ return pb.build();
+ }
+
+ private static Ipv4Binary convertToBinary(Ipv4 address) {
+ byte[] addr = InetAddresses.forString(address.getIpv4().getValue()).getAddress();
+ return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(addr)).build();
+ }
+
+ private static Ipv6Binary convertToBinary(Ipv6 address) {
+ byte[] addr = InetAddresses.forString(address.getIpv6().getValue()).getAddress();
+ return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(addr)).build();
+ }
+
+ public static Eid convertToBinary(Eid eid) {
+ EidBuilder eb = new EidBuilder(eid);
+ Address addr = eid.getAddress();
+ Address convAddr = null;
+ if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) {
+ convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) addr);
+ } else if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
+ convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) addr);
+ } else if (addr instanceof Ipv4) {
+ convAddr = convertToBinary((Ipv4) addr);
+ } else if (addr instanceof Ipv6) {
+ convAddr = convertToBinary((Ipv6) addr);
+ } else {
+ return eid;
+ }
+ eb.setAddress(convAddr);
+ return eb.build();
+ }
+
public static int compareIpAddressByteArrays(byte[] a, byte[] b) {
int i;
if (a.length < b.length) {
package org.opendaylight.lispflowmapping.southbound.lisp;
import java.util.Collection;
+
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
import org.opendaylight.lispflowmapping.mapcache.SimpleMapCache;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingDatabase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.AuthenticationKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.AuthenticationKeyBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifier;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
LOG.trace("Key: {}", change.getRootPath().getRootIdentifier());
LOG.trace("Value: {}", authKey);
- smc.removeAuthenticationKey(authKey.getEid());
+ final AuthenticationKey convertedAuthKey = convertToBinaryIfNecessary(authKey);
+
+ smc.removeAuthenticationKey(convertedAuthKey.getEid());
} else if (ModificationType.WRITE == mod.getModificationType() || ModificationType.SUBTREE_MODIFIED == mod
.getModificationType()) {
if (ModificationType.WRITE == mod.getModificationType()) {
LOG.trace("Key: {}", change.getRootPath().getRootIdentifier());
LOG.trace("Value: {}", authKey);
- smc.addAuthenticationKey(authKey.getEid(), authKey.getMappingAuthkey());
+ final AuthenticationKey convertedAuthKey = convertToBinaryIfNecessary(authKey);
+
+ smc.addAuthenticationKey(convertedAuthKey.getEid(), convertedAuthKey.getMappingAuthkey());
} else {
LOG.warn("Ignoring unhandled modification type {}", mod.getModificationType());
}
}
}
+ private static AuthenticationKey convertToBinaryIfNecessary(AuthenticationKey authKey) {
+ Eid originalEid = authKey.getEid();
+ if (originalEid.getAddress() instanceof Ipv4Prefix || originalEid.getAddress() instanceof Ipv6Prefix ||
+ originalEid.getAddress() instanceof Ipv4 || originalEid.getAddress() instanceof Ipv6) {
+ AuthenticationKeyBuilder akb = new AuthenticationKeyBuilder(authKey);
+ akb.setEid(LispAddressUtil.convertToBinary(originalEid));
+ return akb.build();
+ }
+ return authKey;
+ }
+
}