2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.lispflowmapping.northbound;
11 import java.util.ArrayList;
12 import java.util.List;
14 import javax.xml.bind.DatatypeConverter;
16 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.EidToLocatorRecord.Action;
17 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
18 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
19 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
20 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecordBuilder;
21 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
22 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecordBuilder;
23 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaflistaddress.Addresses;
24 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.DstAddress;
25 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.DstAddressBuilder;
26 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.SrcAddress;
27 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.SrcAddressBuilder;
28 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaftrafficengineeringaddress.Hops;
29 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaftrafficengineeringaddress.HopsBuilder;
30 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainer;
31 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
32 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.Address;
33 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.AS;
34 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.ASBuilder;
35 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.DistinguishedName;
36 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.DistinguishedNameBuilder;
37 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4;
38 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4Builder;
39 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6;
40 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6Builder;
41 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafApplicationDataBuilder;
42 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafListBuilder;
43 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafSegmentBuilder;
44 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafSourceDestBuilder;
45 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafTrafficEngineeringBuilder;
46 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Mac;
47 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.MacBuilder;
48 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.NoBuilder;
49 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.PrimitiveAddress;
50 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecord;
51 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecordBuilder;
52 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder;
53 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRloc;
54 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRlocBuilder;
55 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.SourceEidBuilder;
56 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequestBuilder;
57 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop.HopBuilder;
58 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
59 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
60 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
61 import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
62 import org.opendaylight.lispflowmapping.type.lisp.address.LispASAddress;
63 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
64 import org.opendaylight.lispflowmapping.type.lisp.address.LispApplicationDataLCAFAddress;
65 import org.opendaylight.lispflowmapping.type.lisp.address.LispDistinguishedNameAddress;
66 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
67 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
68 import org.opendaylight.lispflowmapping.type.lisp.address.LispLCAFAddress;
69 import org.opendaylight.lispflowmapping.type.lisp.address.LispListLCAFAddress;
70 import org.opendaylight.lispflowmapping.type.lisp.address.LispMACAddress;
71 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
72 import org.opendaylight.lispflowmapping.type.lisp.address.LispSegmentLCAFAddress;
73 import org.opendaylight.lispflowmapping.type.lisp.address.LispSourceDestLCAFAddress;
74 import org.opendaylight.lispflowmapping.type.lisp.address.LispTrafficEngineeringLCAFAddress;
75 import org.opendaylight.lispflowmapping.type.lisp.address.ReencapHop;
76 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
77 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
78 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
79 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
81 public class YangTransformerNB {
83 public static LispAddressContainer toContainer(LispAFIAddress address) {
84 if (address instanceof Address) {
85 return new LispAddressContainerBuilder().setAddress((Address) address).build();
91 public static LispAFIAddress toAFI(LispAddressContainer container) {
92 return (LispAFIAddress) container.getAddress();
95 public static PrimitiveAddress toPrimitive(LispAFIAddress address) {
96 if (address instanceof Ipv4) {
97 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv4Builder()
98 .setIpv4Address(((Ipv4) address).getIpv4Address()).setAfi(address.getAfi()).build();
100 if (address instanceof Ipv6) {
101 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv6Builder()
102 .setIpv6Address(((Ipv6) address).getIpv6Address()).setAfi(address.getAfi()).build();
104 if (address instanceof Mac) {
105 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.MacBuilder()
106 .setAfi(address.getAfi()).setMacAddress(((Mac) address).getMacAddress()).build();
108 if (address instanceof DistinguishedName) {
109 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.DistinguishedNameBuilder()
110 .setAfi(address.getAfi()).setDistinguishedName(((DistinguishedName) address).getDistinguishedName()).build();
112 if (address instanceof AS) {
113 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.ASBuilder().setAfi(address.getAfi())
114 .setAS(((AS) address).getAS()).build();
119 public static LispAFIAddress toAFIfromPrimitive(PrimitiveAddress primitive) {
121 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv4) {
122 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4Builder()
123 .setAfi(((LispAFIAddress) primitive).getAfi())
125 ((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv4) primitive)
126 .getIpv4Address()).build();
128 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv6) {
129 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6Builder()
130 .setAfi(((LispAFIAddress) primitive).getAfi())
132 ((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv6) primitive)
133 .getIpv6Address()).build();
135 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Mac) {
136 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.MacBuilder()
137 .setAfi(((LispAFIAddress) primitive).getAfi())
139 ((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Mac) primitive)
140 .getMacAddress()).build();
142 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.DistinguishedName) {
143 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.DistinguishedNameBuilder()
144 .setAfi(((LispAFIAddress) primitive).getAfi())
145 .setDistinguishedName(
146 ((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.DistinguishedName) primitive)
147 .getDistinguishedName()).build();
149 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.AS) {
150 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.ASBuilder()
151 .setAfi(((LispAFIAddress) primitive).getAfi())
152 .setAS(((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.AS) primitive).getAS())
158 public static LispAddressContainer transformLispAddress(LispAddress lispAddress) {
160 if (lispAddress == null) {
164 LispAFIAddress lispAFIAddress = null;
165 short ianaCode = lispAddress.getAfi().getIanaCode();
167 switch (lispAddress.getAfi()) {
170 LispIpv4Address lispIpv4Address = (LispIpv4Address) lispAddress;
171 Ipv4Address ipv4Address = new Ipv4Address(lispIpv4Address.getAddress().getHostAddress());
172 lispAFIAddress = new Ipv4Builder().setIpv4Address(ipv4Address).setAfi(ianaCode).build();
175 lispAFIAddress = new NoBuilder().setAfi(ianaCode).build();
177 LispASAddress lispASAddress = (LispASAddress) lispAddress;
178 lispAFIAddress = new ASBuilder().setAS(lispASAddress.getAS()).setAfi(ianaCode).build();
180 case DISTINGUISHED_NAME:
181 LispDistinguishedNameAddress lispDNAddress = (LispDistinguishedNameAddress) lispAddress;
182 lispAFIAddress = new DistinguishedNameBuilder().setDistinguishedName(lispDNAddress.getDistinguishedName()).setAfi(ianaCode).build();
185 LispIpv6Address lispIpv6Address = (LispIpv6Address) lispAddress;
186 Ipv6Address ipv6Address = new Ipv6Address(lispIpv6Address.getAddress().getHostAddress());
187 lispAFIAddress = new Ipv6Builder().setIpv6Address(ipv6Address).setAfi(ianaCode).build();
191 lispAFIAddress = transformLispMACAddress(lispAddress);
196 LispLCAFAddress lispLcafAddress = (LispLCAFAddress) lispAddress;
197 LispCanonicalAddressFormatEnum lcafEnum = lispLcafAddress.getType();
200 case APPLICATION_DATA:
201 lispAFIAddress = transformLispApplicationDataLCAFAddress(lispLcafAddress);
204 lispAFIAddress = transformLispListLCAFAddress(lispLcafAddress);
207 lispAFIAddress = transformLispSegmentLCAFAddress(lispLcafAddress);
210 lispAFIAddress = transformLispSourceDestLCAFAddress(lispLcafAddress);
212 case TRAFFIC_ENGINEERING:
213 lispAFIAddress = transformLispTrafficEngineeringLCAFAddress(lispLcafAddress);
217 throw new IllegalArgumentException("LCAF type " + lcafEnum + " not supported by this transoformer");
223 throw new IllegalArgumentException("AFI " + lispAddress.getAfi() + " not supported by this transformer");
226 return toContainer(lispAFIAddress);
230 public static LispAFIAddress transformLispMACAddress(LispAddress lispAddress) {
231 LispMACAddress lispMacAddress = (LispMACAddress) lispAddress;
232 StringBuilder sb = new StringBuilder(17);
233 for (byte b : lispMacAddress.getMAC()) {
236 sb.append(String.format("%02x", b));
239 return new MacBuilder().setAfi(lispMacAddress.getAfi().getIanaCode()).setMacAddress(new MacAddress(sb.toString())).build();
242 public static LispAFIAddress transformLispApplicationDataLCAFAddress(LispLCAFAddress lispLcafAddress) {
243 LispApplicationDataLCAFAddress lispApplicationDataLCAFAddress = (LispApplicationDataLCAFAddress) lispLcafAddress;
244 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafapplicationdataaddress.Address address;
245 address = new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafapplicationdataaddress.AddressBuilder().setPrimitiveAddress(
246 toPrimitive(toAFI(transformLispAddress(lispApplicationDataLCAFAddress.getAddress())))).build();
247 return new LcafApplicationDataBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode())
248 .setLcafType((short) lispLcafAddress.getType().getLispCode()).setIpTos(lispApplicationDataLCAFAddress.getIPTos())
249 .setLocalPort(new PortNumber((int) lispApplicationDataLCAFAddress.getLocalPort()))
250 .setRemotePort(new PortNumber((int) lispApplicationDataLCAFAddress.getRemotePort())).setAddress(address).build();
253 public static LispAFIAddress transformLispListLCAFAddress(LispLCAFAddress lispLcafAddress) {
255 LispListLCAFAddress lispListLCAFAddress = (LispListLCAFAddress) lispLcafAddress;
257 List<Addresses> listAddresses = new ArrayList<Addresses>();
259 for (int i = 0; i < lispListLCAFAddress.getAddresses().size(); i++) {
260 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaflistaddress.Addresses addresses;
261 addresses = new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaflistaddress.AddressesBuilder().setPrimitiveAddress(
262 toPrimitive(toAFI(transformLispAddress(lispListLCAFAddress.getAddresses().get(i))))).build();
263 listAddresses.add(addresses);
266 return new LcafListBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode()).setLcafType((short) lispLcafAddress.getType().getLispCode())
267 .setAddresses(listAddresses).build();
270 public static LispAFIAddress transformLispSegmentLCAFAddress(LispLCAFAddress lispLcafAddress) {
271 LispSegmentLCAFAddress lispSegmentLCAFAddress = (LispSegmentLCAFAddress) lispLcafAddress;
272 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsegmentaddress.Address address;
273 address = new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsegmentaddress.AddressBuilder().setPrimitiveAddress(
274 toPrimitive(toAFI(transformLispAddress(lispSegmentLCAFAddress.getAddress())))).build();
276 return new LcafSegmentBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode()).setLcafType((short) lispLcafAddress.getType().getLispCode())
277 .setInstanceId((long) lispSegmentLCAFAddress.getInstanceId()).setAddress(address).build();
281 public static LispAFIAddress transformLispSourceDestLCAFAddress(LispLCAFAddress lispLcafAddress) {
282 LispSourceDestLCAFAddress lispSourceDestLCAFAddress = (LispSourceDestLCAFAddress) lispLcafAddress;
284 SrcAddress srcAddress = new SrcAddressBuilder().setPrimitiveAddress(
285 toPrimitive(toAFI(transformLispAddress(lispSourceDestLCAFAddress.getSrcAddress())))).build();
287 DstAddress dstAddress = new DstAddressBuilder().setPrimitiveAddress(
288 toPrimitive(toAFI(transformLispAddress(lispSourceDestLCAFAddress.getDstAddress())))).build();
290 return new LcafSourceDestBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode())
291 .setLcafType((short) lispLcafAddress.getType().getLispCode()).setSrcMaskLength((short) lispSourceDestLCAFAddress.getSrcMaskLength())
292 .setDstMaskLength((short) lispSourceDestLCAFAddress.getDstMaskLength()).setSrcAddress(srcAddress).setDstAddress(dstAddress).build();
295 public static LispAFIAddress transformLispTrafficEngineeringLCAFAddress(LispLCAFAddress lispLcafAddress) {
296 LispTrafficEngineeringLCAFAddress lispTrafficEngineeringLCAFAddress = (LispTrafficEngineeringLCAFAddress) lispLcafAddress;
298 List<Hops> listHops = new ArrayList<Hops>();
300 for (int i = 0; i < lispTrafficEngineeringLCAFAddress.getHops().size(); i++) {
301 ReencapHop reencapHop = lispTrafficEngineeringLCAFAddress.getHops().get(i);
303 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop.Hop hop;
304 hop = new HopBuilder().setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(reencapHop.getHop())))).build();
306 Hops hops = new HopsBuilder().setLookup(reencapHop.isLookup()).setRLOCProbe(reencapHop.isRLOCProbe()).setStrict(reencapHop.isStrict())
307 .setHop(hop).build();
313 return new LcafTrafficEngineeringBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode())
314 .setLcafType((short) lispLcafAddress.getType().getLispCode()).setHops(listHops).build();
317 public static LispAddress transformToLispAddress(LispAddressContainer lispAddress) {
319 LispAddress legacyAddress = null;
320 LispAFIAddress address = (LispAFIAddress) lispAddress.getAddress();
321 AddressFamilyNumberEnum afi = AddressFamilyNumberEnum.valueOf(address.getAfi());
326 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address lispIpv4Address;
327 lispIpv4Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address) address;
328 legacyAddress = new LispIpv4Address(lispIpv4Address.getIpv4Address().getValue());
331 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address lispIpv6Address;
332 lispIpv6Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address) address;
333 legacyAddress = new LispIpv6Address(lispIpv6Address.getIpv6Address().getValue());
336 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispASAddress lispASAddress;
337 lispASAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispASAddress) address;
338 legacyAddress = new LispASAddress(lispASAddress.getAS());
340 case DISTINGUISHED_NAME:
341 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispDistinguishedNameAddress lispDistinguishedNameAddress;
342 lispDistinguishedNameAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispDistinguishedNameAddress) address;
343 legacyAddress = new LispDistinguishedNameAddress(lispDistinguishedNameAddress.getDistinguishedName());
346 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispMacAddress lispMacAddress;
347 lispMacAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispMacAddress) address;
348 String macString = lispMacAddress.getMacAddress().getValue();
349 macString = macString.replaceAll(":", "");
350 legacyAddress = new LispMACAddress(DatatypeConverter.parseHexBinary(macString));
353 legacyAddress = new LispNoAddress();
356 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress;
357 lispLcafAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress) address;
359 LispCanonicalAddressFormatEnum lcafEnum = LispCanonicalAddressFormatEnum.valueOf(lispLcafAddress.getLcafType());
362 case APPLICATION_DATA:
363 legacyAddress = transformToLispApplicationDataLCAFAddress(lispLcafAddress);
366 legacyAddress = transformToLispListLCAFAddress(lispLcafAddress);
369 legacyAddress = transformToLispSegmentLCAFAddress(lispLcafAddress);
372 legacyAddress = transformToLispSourceDestLCAFAddress(lispLcafAddress);
374 case TRAFFIC_ENGINEERING:
375 legacyAddress = transformToLispTrafficEngineeringLCAFAddress(lispLcafAddress);
379 throw new IllegalArgumentException("LCAF type " + lcafEnum + " not supported by this transoformer");
384 throw new IllegalArgumentException("AFI " + afi + " not supported by this transformer");
387 return legacyAddress;
390 public static LispAddress transformToLispApplicationDataLCAFAddress(
391 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress) {
392 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafApplicationDataAddress lcafApplicationDataAddress;
393 lcafApplicationDataAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafApplicationDataAddress) lispLcafAddress;
395 return new LispApplicationDataLCAFAddress((byte) 0, lcafApplicationDataAddress.getProtocol().byteValue(), lcafApplicationDataAddress
396 .getIpTos().intValue(), lcafApplicationDataAddress.getLocalPort().getValue().shortValue(), lcafApplicationDataAddress.getRemotePort()
397 .getValue().shortValue(), transformToLispAddress(toContainer(toAFIfromPrimitive(lcafApplicationDataAddress.getAddress()
398 .getPrimitiveAddress()))));
401 public static LispAddress transformToLispListLCAFAddress(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress) {
402 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafListAddress lcafListAddress;
403 lcafListAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafListAddress) lispLcafAddress;
405 List<LispAddress> listLegacyAddress = new ArrayList<LispAddress>();
407 for (int i = 0; i < lcafListAddress.getAddresses().size(); i++) {
409 .add(transformToLispAddress(toContainer(toAFIfromPrimitive(lcafListAddress.getAddresses().get(i).getPrimitiveAddress()))));
411 return new LispListLCAFAddress((byte) 0, listLegacyAddress);
414 public static LispAddress transformToLispSegmentLCAFAddress(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress) {
415 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSegmentAddress lcafSegmentAddress;
416 lcafSegmentAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSegmentAddress) lispLcafAddress;
420 return new LispSegmentLCAFAddress(iidMaskLen, lcafSegmentAddress.getInstanceId().intValue(),
421 transformToLispAddress(toContainer(toAFIfromPrimitive(lcafSegmentAddress.getAddress().getPrimitiveAddress()))));
425 public static LispAddress transformToLispSourceDestLCAFAddress(
426 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress) {
427 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSourceDestAddress lcafSourceDestAddress;
428 lcafSourceDestAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSourceDestAddress) lispLcafAddress;
430 return new LispSourceDestLCAFAddress((byte) 0, (short) 0, lcafSourceDestAddress.getSrcMaskLength().byteValue(), lcafSourceDestAddress
431 .getDstMaskLength().byteValue(), transformToLispAddress(toContainer(toAFIfromPrimitive(lcafSourceDestAddress.getSrcAddress()
432 .getPrimitiveAddress()))), transformToLispAddress(toContainer(toAFIfromPrimitive(lcafSourceDestAddress.getDstAddress()
433 .getPrimitiveAddress()))));
437 public static LispAddress transformToLispTrafficEngineeringLCAFAddress(
438 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress) {
439 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafTrafficEngineeringAddress lcafTrafficEngineeringAddress;
440 lcafTrafficEngineeringAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafTrafficEngineeringAddress) lispLcafAddress;
442 List<ReencapHop> listLegacyHops = new ArrayList<ReencapHop>();
444 ReencapHop legacyHop;
445 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.ReencapHop hop;
447 // for (Addresses addresses : lcafListAddress.getAddresses()){
448 for (int i = 0; i < lcafTrafficEngineeringAddress.getHops().size(); i++) {
449 hop = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.ReencapHop) lcafTrafficEngineeringAddress.getHops().get(i);
451 legacyHop = new ReencapHop(transformToLispAddress(toContainer(toAFIfromPrimitive(hop.getHop().getPrimitiveAddress()))), (short) 0,
452 hop.isLookup(), hop.isRLOCProbe(), hop.isStrict());
454 listLegacyHops.add(legacyHop);
456 return new LispTrafficEngineeringLCAFAddress((byte) 0, listLegacyHops);
459 public static MapRegister transformMapRegister(org.opendaylight.lispflowmapping.type.lisp.MapRegister legacyMapRegister) {
461 List<EidToLocatorRecord> listEidToLocatorRecord = new ArrayList<EidToLocatorRecord>();
463 // for (EidToLocatorRecord legacyRecord:
464 // legacyMapRegister.getEidToLocatorRecords()){
465 for (int i = 0; i < legacyMapRegister.getEidToLocatorRecords().size(); i++) {
467 listEidToLocatorRecord.add(transformEidToLocatorRecord(legacyMapRegister.getEidToLocatorRecords().get(i)));
471 MapRegisterBuilder builder = new MapRegisterBuilder();
473 MapRegister yangMapRegister = builder.setKeyId(legacyMapRegister.getKeyId()).setProxyMapReply(legacyMapRegister.isProxyMapReply())
474 .setEidToLocatorRecord(listEidToLocatorRecord).setWantMapNotify(true).build();
476 return yangMapRegister;
480 public static EidToLocatorRecord transformEidToLocatorRecord(
481 org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyEidToLocatorRecord) {
483 List<LocatorRecord> listLocatorRecord = new ArrayList<LocatorRecord>();
485 for (int j = 0; j < legacyEidToLocatorRecord.getLocators().size(); j++) {
487 org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = legacyEidToLocatorRecord.getLocators().get(j);
489 LispAddressContainer rloc = transformLispAddress(legacyLocatorRecord.getLocator());
491 LocatorRecordBuilder locatorRecordBuilder = new LocatorRecordBuilder();
493 LocatorRecord locatorRecord = locatorRecordBuilder.setLispAddressContainer((LispAddressContainer) rloc)
494 .setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((short) legacyLocatorRecord.getPriority())
495 .setWeight((short) legacyLocatorRecord.getWeight()).setMulticastPriority((short) legacyLocatorRecord.getMulticastPriority())
496 .setMulticastWeight((short) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
497 .setRouted(legacyLocatorRecord.isRouted()).build();
499 listLocatorRecord.add(locatorRecord);
502 LispAddressContainer eid = transformLispAddress(legacyEidToLocatorRecord.getPrefix());
503 EidToLocatorRecordBuilder eidToLocatorRecordBuilder = new EidToLocatorRecordBuilder();
504 EidToLocatorRecord eidToLocatorRecord = eidToLocatorRecordBuilder.setLispAddressContainer((LispAddressContainer) eid)
505 .setAction(Action.forValue(legacyEidToLocatorRecord.getAction().getCode()))
506 .setAuthoritative(legacyEidToLocatorRecord.isAuthoritative()).setMaskLength((short) legacyEidToLocatorRecord.getMaskLength())
507 .setRecordTtl(legacyEidToLocatorRecord.getRecordTtl()).setLocatorRecord(listLocatorRecord).build();
508 return eidToLocatorRecord;
511 public static org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord reTransformEidToLocatorRecord(EidToLocatorRecord eidToLocatorRecord) {
513 org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyRecord = new org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord();
515 for (int j = 0; j < eidToLocatorRecord.getLocatorRecord().size(); j++) {
517 LocatorRecord locatorRecord = (LocatorRecord) eidToLocatorRecord.getLocatorRecord().get(j);
519 org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = new org.opendaylight.lispflowmapping.type.lisp.LocatorRecord();
521 LispAddressContainer rloc = locatorRecord.getLispAddressContainer();
523 legacyLocatorRecord.setLocator(YangTransformerNB.transformToLispAddress(rloc));
525 legacyLocatorRecord.setLocalLocator(locatorRecord.isLocalLocator()).setPriority(locatorRecord.getPriority())
526 .setWeight(locatorRecord.getWeight()).setMulticastPriority(locatorRecord.getMulticastPriority())
527 .setMulticastWeight(locatorRecord.getMulticastWeight()).setRlocProbed(locatorRecord.isRlocProbed())
528 .setRouted(locatorRecord.isRouted());
530 legacyRecord.addLocator(legacyLocatorRecord);
533 LispAddress eid = transformToLispAddress(eidToLocatorRecord.getLispAddressContainer());
534 legacyRecord.setPrefix(eid).setAction(MapReplyAction.valueOf(eidToLocatorRecord.getAction().getIntValue()))
535 .setAuthoritative(eidToLocatorRecord.isAuthoritative()).setMaskLength((short) eidToLocatorRecord.getMaskLength())
536 .setRecordTtl(eidToLocatorRecord.getRecordTtl());
540 public static MapRequest transformMapRequest(org.opendaylight.lispflowmapping.type.lisp.MapRequest legacyMapRequest) {
542 MapRequestBuilder builder = new MapRequestBuilder();
543 builder.setAuthoritative(legacyMapRequest.isAuthoritative());
544 builder.setMapDataPresent(legacyMapRequest.isMapDataPresent());
545 builder.setPitr(legacyMapRequest.isPitr());
546 builder.setProbe(legacyMapRequest.isProbe());
547 builder.setSmr(legacyMapRequest.isSmr());
548 builder.setSmrInvoked(legacyMapRequest.isSmrInvoked());
550 builder.setEidRecord(new ArrayList<org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecord>());
551 for (EidRecord record : legacyMapRequest.getEids()) {
552 LispAddressContainer container = transformLispAddress(record.getPrefix());
553 builder.getEidRecord().add(
555 new EidRecordBuilder().setMask((short) record.getMaskLength()).setLispAddressContainer(container).build());
558 builder.setItrRloc(new ArrayList<ItrRloc>());
559 for (LispAddress itr : legacyMapRequest.getItrRlocs()) {
560 builder.getItrRloc().add(new ItrRlocBuilder().setLispAddressContainer(transformLispAddress(itr)).build());
563 builder.setMapReply(null);
564 builder.setNonce(legacyMapRequest.getNonce());
565 if (legacyMapRequest.getSourceEid() != null) {
566 builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer(transformLispAddress(legacyMapRequest.getSourceEid())).build());
568 return builder.build();