// XXX: to remove once RPC API has been updated to remove explicit mask
input = new AddKeyInputBuilder(input).setLispAddressContainer(
- MaskUtil.setMask(input.getLispAddressContainer(), input.getMaskLength())).build();
+ MaskUtil.fixMask(input.getLispAddressContainer(), input.getMaskLength())).build();
String key = lispMappingService.getAuthenticationKey(input.getLispAddressContainer());
// XXX: to remove once RPC API has been updated to remove explicit mask
input = new AddMappingInputBuilder(input).setLispAddressContainer(
- MaskUtil.setMask(input.getLispAddressContainer(), input.getMaskLength())).build();
+ MaskUtil.fixMask(input.getLispAddressContainer(), input.getMaskLength())).build();
dsbe.addMapping(RPCInputConvertorUtil.toMapping(input));
// XXX: to remove once RPC API has been updated to remove explicit mask
input = new GetKeyInputBuilder(input).setLispAddressContainer(
- MaskUtil.setMask(input.getLispAddressContainer(), input.getMaskLength())).build();
+ MaskUtil.fixMask(input.getLispAddressContainer(), input.getMaskLength())).build();
RpcResultBuilder<GetKeyOutput> rpcResultBuilder;
// XXX: to remove once RPC API has been updated to remove explicit mask
input = new GetMappingInputBuilder(input).setLispAddressContainer(
- MaskUtil.setMask(input.getLispAddressContainer(), input.getMaskLength())).build();
+ MaskUtil.fixMask(input.getLispAddressContainer(), input.getMaskLength())).build();
RpcResultBuilder<GetMappingOutput> rpcResultBuilder;
// XXX: to remove once RPC API has been updated to remove explicit mask
input = new RemoveKeyInputBuilder(input).setLispAddressContainer(
- MaskUtil.setMask(input.getLispAddressContainer(), input.getMaskLength())).build();
+ MaskUtil.fixMask(input.getLispAddressContainer(), input.getMaskLength())).build();
RpcResultBuilder<Void> rpcResultBuilder;
// XXX: to remove once RPC API has been updated to remove explicit mask
input = new RemoveMappingInputBuilder(input).setLispAddressContainer(
- MaskUtil.setMask(input.getLispAddressContainer(), input.getMaskLength())).build();
+ MaskUtil.fixMask(input.getLispAddressContainer(), input.getMaskLength())).build();
RpcResultBuilder<Void> rpcResultBuilder;
// XXX: to remove once RPC API has been updated to remove explicit mask
input = new UpdateKeyInputBuilder(input).setEid(
new EidBuilder(input.getEid()).setLispAddressContainer(
- MaskUtil.setMask(input.getEid().getLispAddressContainer(), input.getEid()
+ MaskUtil.fixMask(input.getEid().getLispAddressContainer(), input.getEid()
.getMaskLength())).build()).build();
RpcResultBuilder<Void> rpcResultBuilder;
// XXX: to remove once RPC API has been updated to remove explicit mask
input = new UpdateMappingInputBuilder(input).setLispAddressContainer(
- MaskUtil.setMask(input.getLispAddressContainer(), input.getMaskLength())).build();
+ MaskUtil.fixMask(input.getLispAddressContainer(), input.getMaskLength())).build();
RpcResultBuilder<Void> rpcResultBuilder;
return mapping;
}
- public static void removeMapping(LispAddressContainer address, ILispDAO dao, boolean oerwrite) {
- if (address.getAddress() instanceof LcafSourceDest) {
- ILispDAO db = getSDInnerDao(address, dao);
+ public static void removeMapping(LispAddressContainer eid, ILispDAO dao, boolean oerwrite) {
+ eid = MaskUtil.normalize(eid);
+ if (eid.getAddress() instanceof LcafSourceDest) {
+ ILispDAO db = getSDInnerDao(eid, dao);
if (db != null) {
- db.removeSpecific(LcafSourceDestHelper.getSrc(address),
+ db.removeSpecific(LcafSourceDestHelper.getSrc(eid),
SubKeys.RECORD);
}
} else {
- dao.removeSpecific(address, SubKeys.RECORD);
+ dao.removeSpecific(eid, SubKeys.RECORD);
}
}
}
public static void removeAuthenticationKey(LispAddressContainer eid, ILispDAO dao) {
+ eid = MaskUtil.normalize(eid);
if (eid.getAddress() instanceof LcafSourceDest) {
ILispDAO srcDstDao = getSDInnerDao(eid, dao);
if (srcDstDao != null) {
return null;
}
- public static void removeSubscribers(LispAddressContainer address, ILispDAO dao, boolean shouldOverwrite) {
- if (address.getAddress() instanceof LcafSourceDest) {
- ILispDAO db = getSDInnerDao(address, dao);
+ public static void removeSubscribers(LispAddressContainer eid, ILispDAO dao, boolean shouldOverwrite) {
+ eid = MaskUtil.normalize(eid);
+ if (eid.getAddress() instanceof LcafSourceDest) {
+ ILispDAO db = getSDInnerDao(eid, dao);
if (db != null) {
- db.removeSpecific(LcafSourceDestHelper.getSrc(address), SubKeys.SUBSCRIBERS);
+ db.removeSpecific(LcafSourceDestHelper.getSrc(eid), SubKeys.SUBSCRIBERS);
}
} else {
- dao.removeSpecific(address, SubKeys.SUBSCRIBERS);
+ dao.removeSpecific(eid, SubKeys.SUBSCRIBERS);
}
}
import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer;
import org.opendaylight.lispflowmapping.lisp.util.ByteUtil;
import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor;
+import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LispAFIAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.eidrecords.EidRecord;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.eidrecords.EidRecordBuilder;
/* byte reserved = */requestBuffer.get();
short maskLength = (short) (ByteUtil.getUnsignedByte(requestBuffer));
LispAFIAddress prefix = LispAddressSerializer.getInstance().deserialize(requestBuffer);
- prefix = SerializerHelper.fixMask(prefix, maskLength);
+ prefix = MaskUtil.fixMask(prefix, maskLength);
return new EidRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(prefix)).setMask(maskLength)
.build();
}
import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer;
import org.opendaylight.lispflowmapping.lisp.util.ByteUtil;
import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor;
+import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
import org.opendaylight.lispflowmapping.lisp.util.NumberUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.EidToLocatorRecord;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.EidToLocatorRecord.Action;
builder.setMapVersion(buffer.getShort());
LispAFIAddress afiAddress = LispAddressSerializer.getInstance().deserialize(buffer);
- afiAddress = SerializerHelper.fixMask(afiAddress, builder.getMaskLength());
+ afiAddress = MaskUtil.fixMask(afiAddress, builder.getMaskLength());
LispAddressContainer container = LispAFIConvertor.toContainer(afiAddress);
builder.setLispAddressContainer(container);
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.lispflowmapping.lisp.serializer;
-
-import org.opendaylight.lispflowmapping.lisp.util.LcafSourceDestHelper;
-import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LcafSegmentAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LcafSourceDestAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LispAFIAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LispIpv4Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LispIpv6Address;
-
-/**
- * @author Florin Coras
- *
- * Helper class needed to fix masks of EIDs in southbound incoming LISP packets.
- *
- * RFC6830 defines masks and EIDs as separate fields of larger, encompassing blocks of LISP messages. However
- * within LispFlowMapping masks are internal fields of EIDs. The method fixMask should be used in deserializers
- * to ensure that masks for deserialized EIDs reflect accordingly the mask field values carried in LISP
- * messages.
- */
-
-public class SerializerHelper {
- public static LispAFIAddress fixMask(LispAFIAddress addr, short mask) {
- if (addr instanceof LispIpv4Address || addr instanceof LispIpv6Address || addr instanceof LcafSegmentAddress) {
- return MaskUtil.setMask(addr, mask);
- } else if (addr instanceof LcafSourceDestAddress) {
- return MaskUtil.setMaskSourceDest(addr, LcafSourceDestHelper.getSrcMask(addr),
- LcafSourceDestHelper.getDstMask(addr));
- }
- return addr;
- }
-}
import java.nio.ByteBuffer;
-import org.opendaylight.lispflowmapping.lisp.serializer.SerializerHelper;
import org.opendaylight.lispflowmapping.lisp.type.AddressFamilyNumberEnum;
import org.opendaylight.lispflowmapping.lisp.type.LispCanonicalAddressFormatEnum;
import org.opendaylight.lispflowmapping.lisp.util.ByteUtil;
import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor;
+import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LcafSourceDestAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.LispAFIAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lcafsourcedestaddress.DstAddressBuilder;
short srcMaskLength = (short) ByteUtil.getUnsignedByte(buffer);
short dstMaskLength = (short) ByteUtil.getUnsignedByte(buffer);
LispAFIAddress srcAddress = LispAddressSerializer.getInstance().deserialize(buffer);
- srcAddress = SerializerHelper.fixMask(srcAddress, srcMaskLength);
+ srcAddress = MaskUtil.fixMask(srcAddress, srcMaskLength);
LispAFIAddress dstAddress = LispAddressSerializer.getInstance().deserialize(buffer);
- dstAddress = SerializerHelper.fixMask(dstAddress, dstMaskLength);
+ dstAddress = MaskUtil.fixMask(dstAddress, dstMaskLength);
LcafSourceDestAddrBuilder builder = new LcafSourceDestAddrBuilder();
builder.setDstMaskLength((short) dstMaskLength).setSrcMaskLength((short) srcMaskLength);
builder.setSrcAddress(new SrcAddressBuilder().setPrimitiveAddress((PrimitiveAddress) LispAFIConvertor.toPrimitive(srcAddress)).build());
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispaddress.lispaddresscontainer.address.Ipv4Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispaddress.lispaddresscontainer.address.Ipv6;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispaddress.lispaddresscontainer.address.Ipv6Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispaddress.lispaddresscontainer.address.LcafSegment;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispaddress.lispaddresscontainer.address.LcafSegmentBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispaddress.lispaddresscontainer.address.LcafSourceDest;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev150820.lispaddress.lispaddresscontainer.address.LcafSourceDestBuilder;
public static boolean isMaskable(LispAddressContainer address) {
if (address.getAddress() instanceof Ipv4 || address.getAddress() instanceof Ipv6) {
return true;
- } else if (address.getAddress() instanceof LcafSegmentAddress) {
- return isMaskable(LispAFIConvertor.toAFIfromPrimitive(((LcafSegmentAddress) address).getAddress()
- .getPrimitiveAddress()));
+ } else if (address.getAddress() instanceof LcafSegment) {
+ return isMaskable(LispAFIConvertor.toAFIfromPrimitive(((LcafSegment) address.getAddress())
+ .getLcafSegmentAddr().getAddress().getPrimitiveAddress()));
} else if (address.getAddress() instanceof LcafSourceDestAddress) {
LcafSourceDestAddr sd = ((LcafSourceDest) address.getAddress()).getLcafSourceDestAddr();
return isMaskable(LispAFIConvertor.toAFIfromPrimitive(sd.getSrcAddress().getPrimitiveAddress()))
return LispAFIConvertor.asIPv6Prefix(normalizeIP(
Inet6Address.getByName(((Ipv6) address.getAddress()).getIpv6Address().getIpv6Address().getValue()),
mask).getHostAddress(), mask);
- } else if (address instanceof LcafSegmentAddress) {
- LcafSegmentAddress segAddr = (LcafSegmentAddress) address;
+ } else if (address.getAddress() instanceof LcafSegment) {
+ LcafSegmentAddress segAddr = ((LcafSegment) address.getAddress()).getLcafSegmentAddr();
LispAFIAddress afiAddr = LispAFIConvertor
.toAFIfromPrimitive(segAddr.getAddress().getPrimitiveAddress());
Address normalizedAddr = new AddressBuilder().setPrimitiveAddress(
return normalize(address, ((Ipv4)address.getAddress()).getIpv4Address().getMask());
} else if (address.getAddress() instanceof Ipv6) {
return normalize(address, ((Ipv6)address.getAddress()).getIpv6Address().getMask());
- } else if (address instanceof LcafSegmentAddress) {
- LcafSegmentAddress segAddr = (LcafSegmentAddress) address;
+ } else if (address.getAddress() instanceof LcafSegment) {
+ LcafSegmentAddress segAddr = ((LcafSegment) address.getAddress()).getLcafSegmentAddr();
LispAFIAddress afiAddr = LispAFIConvertor
.toAFIfromPrimitive(segAddr.getAddress().getPrimitiveAddress());
short mask = getMaskForAfiAddress(afiAddr);
} else if (addr.getAddress() instanceof Ipv6) {
Short res = ((Ipv6)addr.getAddress()).getIpv6Address().getMask();
return (res != null) ? res.shortValue() : 128;
- } else if (addr.getAddress() instanceof LcafSegmentAddress) {
- return getMaskForAfiAddress(LispAFIConvertor.toAFIfromPrimitive(((LcafSegmentAddress) addr.getAddress())
- .getAddress().getPrimitiveAddress()));
+ } else if (addr.getAddress() instanceof LcafSegment) {
+ return getMaskForAfiAddress(LispAFIConvertor.toAFIfromPrimitive((((LcafSegment) addr.getAddress())
+ .getLcafSegmentAddr()).getAddress().getPrimitiveAddress()));
}
return 0;
}
new Ipv6Builder().setIpv6Address(
new Ipv6AddressBuilder(((Ipv6) addr.getAddress()).getIpv6Address()).setMask((short) mask)
.build()).build()).build();
- } else if (addr.getAddress() instanceof LcafSegmentAddress) {
- setMask(LispAFIConvertor.toAFIfromPrimitive(((LcafSegmentAddress) addr.getAddress()).getAddress()
- .getPrimitiveAddress()), mask);
+ } else if (addr.getAddress() instanceof LcafSegment) {
+ setMask(LispAFIConvertor.toAFIfromPrimitive(((LcafSegment) addr.getAddress()).getLcafSegmentAddr()
+ .getAddress().getPrimitiveAddress()), mask);
}
return addr;
}
((LcafSourceDest) addr.getAddress()).getLcafSourceDestAddr(), srcMask, dstMask))
.build()).build();
}
+
+ /**
+ * RFC6830 defines masks and EIDs as separate fields of larger, encompassing blocks of LISP messages. However within
+ * LispFlowMapping masks are internal fields of EIDs. The fixMask methods should be used in deserializers and RPC
+ * handlers to ensure that masks for EIDs reflect accordingly the mask field values carried in LISP messages or RPC
+ * input objects respectively.
+ */
+ public static LispAFIAddress fixMask(LispAFIAddress addr, short mask) {
+ if (addr instanceof LispIpv4Address || addr instanceof LispIpv6Address || addr instanceof LcafSegmentAddress) {
+ return MaskUtil.setMask(addr, mask);
+ } else if (addr instanceof LcafSourceDestAddress) {
+ return MaskUtil.setMaskSourceDest(addr, LcafSourceDestHelper.getSrcMask(addr),
+ LcafSourceDestHelper.getDstMask(addr));
+ }
+ return addr;
+ }
+
+ public static LispAddressContainer fixMask(LispAddressContainer addr, short mask) {
+ if (addr.getAddress() instanceof Ipv4 || addr.getAddress() instanceof Ipv6
+ || addr.getAddress() instanceof LcafSegment) {
+ return MaskUtil.setMask(addr, mask);
+ } else if (addr.getAddress() instanceof LcafSourceDest) {
+ return MaskUtil.setMaskSourceDest(addr, LcafSourceDestHelper.getSrcMask(addr),
+ LcafSourceDestHelper.getDstMask(addr));
+ }
+ return addr;
+ }
}