2 * Copyright (c) 2013 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.math.BigInteger;
12 import java.util.ArrayList;
13 import java.util.Iterator;
14 import java.util.List;
16 import javax.xml.bind.DatatypeConverter;
18 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
19 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispMacAddress;
20 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
21 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
22 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecordBuilder;
23 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
24 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord.Action;
25 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecordBuilder;
26 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaflistaddress.Addresses;
27 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.DstAddress;
28 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.DstAddressBuilder;
29 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.SrcAddress;
30 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsourcedestaddress.SrcAddressBuilder;
31 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaftrafficengineeringaddress.Hops;
32 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaftrafficengineeringaddress.HopsBuilder;
33 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainer;
34 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
35 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.Address;
36 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.AS;
37 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.ASBuilder;
38 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.DistinguishedName;
39 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.DistinguishedNameBuilder;
40 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4;
41 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4Builder;
42 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6;
43 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6Builder;
44 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafApplicationDataBuilder;
45 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafListBuilder;
46 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafSegmentBuilder;
47 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafSourceDestBuilder;
48 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.LcafTrafficEngineeringBuilder;
49 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Mac;
50 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.MacBuilder;
51 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.NoBuilder;
52 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.PrimitiveAddress;
53 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecord;
54 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecordBuilder;
55 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder;
56 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRloc;
57 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRlocBuilder;
58 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.SourceEidBuilder;
59 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequestBuilder;
60 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop.Hop;
61 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop.HopBuilder;
62 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
63 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
64 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
65 import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
66 import org.opendaylight.lispflowmapping.type.lisp.address.LispASAddress;
67 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
68 import org.opendaylight.lispflowmapping.type.lisp.address.LispApplicationDataLCAFAddress;
69 import org.opendaylight.lispflowmapping.type.lisp.address.LispDistinguishedNameAddress;
70 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
71 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
72 import org.opendaylight.lispflowmapping.type.lisp.address.LispLCAFAddress;
73 import org.opendaylight.lispflowmapping.type.lisp.address.LispListLCAFAddress;
74 import org.opendaylight.lispflowmapping.type.lisp.address.LispMACAddress;
75 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
76 import org.opendaylight.lispflowmapping.type.lisp.address.LispSegmentLCAFAddress;
77 import org.opendaylight.lispflowmapping.type.lisp.address.LispSourceDestLCAFAddress;
78 import org.opendaylight.lispflowmapping.type.lisp.address.LispTrafficEngineeringLCAFAddress;
79 import org.opendaylight.lispflowmapping.type.lisp.address.ReencapHop;
80 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
81 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
82 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
83 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
85 public class YangTransformerNB {
87 public static LispAddressContainer toContainer(LispAFIAddress address) {
88 if (address instanceof Address) {
89 return new LispAddressContainerBuilder().setAddress((Address) address).build();
95 public static LispAFIAddress toAFI(LispAddressContainer container) {
96 return (LispAFIAddress) container.getAddress();
99 public static PrimitiveAddress toPrimitive(LispAFIAddress address) {
100 if (address instanceof Ipv4) {
101 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv4Builder()
102 .setIpv4Address(((Ipv4) address).getIpv4Address())
103 .setAfi(address.getAfi())
106 if (address instanceof Ipv6) {
107 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv6Builder()
108 .setIpv6Address(((Ipv6) address).getIpv6Address())
109 .setAfi(address.getAfi())
112 if (address instanceof Mac) {
113 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.MacBuilder()
114 .setAfi(address.getAfi())
115 .setMacAddress(((Mac) address).getMacAddress())
118 if (address instanceof DistinguishedName) {
119 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.DistinguishedNameBuilder()
120 .setAfi(address.getAfi())
121 .setDistinguishedName(((DistinguishedName) address).getDistinguishedName())
124 if (address instanceof AS) {
125 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.ASBuilder()
126 .setAfi(address.getAfi())
127 .setAS(((AS) address).getAS())
133 public static LispAFIAddress toAFIfromPrimitive(PrimitiveAddress primitive) {
135 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv4) {
136 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4Builder()
137 .setAfi(((LispAFIAddress) primitive).getAfi())
138 .setIpv4Address(((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv4) primitive).getIpv4Address())
141 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv6) {
142 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6Builder()
143 .setAfi(((LispAFIAddress) primitive).getAfi())
144 .setIpv6Address(((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Ipv6) primitive).getIpv6Address())
147 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Mac) {
148 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.MacBuilder()
149 .setAfi(((LispAFIAddress) primitive).getAfi())
150 .setMacAddress(((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.Mac) primitive).getMacAddress())
153 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.DistinguishedName) {
154 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.DistinguishedNameBuilder()
155 .setAfi(((LispAFIAddress) primitive).getAfi())
156 .setDistinguishedName(((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.DistinguishedName) primitive).getDistinguishedName())
159 if (primitive instanceof org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.AS) {
160 return new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.ASBuilder()
161 .setAfi(((LispAFIAddress) primitive).getAfi())
162 .setAS(((org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.primitiveaddress.AS) primitive).getAS())
171 public static LispAddressContainer transformLispAddress(LispAddress lispAddress) {
173 if (lispAddress == null) {
177 LispAFIAddress lispAFIAddress = null;
178 short ianaCode = lispAddress.getAfi().getIanaCode();
180 switch (lispAddress.getAfi()) {
183 LispIpv4Address lispIpv4Address = (LispIpv4Address) lispAddress;
184 Ipv4Address ipv4Address = new Ipv4Address(lispIpv4Address.getAddress().getHostAddress());
185 lispAFIAddress = new Ipv4Builder().setIpv4Address(ipv4Address).setAfi(ianaCode).build();
188 lispAFIAddress = new NoBuilder().setAfi(ianaCode).build();
190 LispASAddress lispASAddress = (LispASAddress) lispAddress;
191 lispAFIAddress = new ASBuilder().setAS(lispASAddress.getAS()).setAfi(ianaCode).build();
193 case DISTINGUISHED_NAME:
194 LispDistinguishedNameAddress lispDNAddress = (LispDistinguishedNameAddress) lispAddress;
195 lispAFIAddress = new DistinguishedNameBuilder().setDistinguishedName(lispDNAddress.getDistinguishedName()).setAfi(ianaCode).build();
198 LispIpv6Address lispIpv6Address = (LispIpv6Address) lispAddress;
199 Ipv6Address ipv6Address = new Ipv6Address(lispIpv6Address.getAddress().getHostAddress());
200 lispAFIAddress = new Ipv6Builder().setIpv6Address(ipv6Address).setAfi(ianaCode).build();
204 lispAFIAddress = transformLispMACAddress(lispAddress);
209 LispLCAFAddress lispLcafAddress = (LispLCAFAddress) lispAddress;
210 LispCanonicalAddressFormatEnum lcafEnum = lispLcafAddress.getType();
213 case APPLICATION_DATA:
214 lispAFIAddress = transformLispApplicationDataLCAFAddress(lispLcafAddress);
217 lispAFIAddress = transformLispListLCAFAddress(lispLcafAddress);
220 lispAFIAddress = transformLispSegmentLCAFAddress(lispLcafAddress);
223 lispAFIAddress = transformLispSourceDestLCAFAddress(lispLcafAddress);
225 case TRAFFIC_ENGINEERING:
226 lispAFIAddress = transformLispTrafficEngineeringLCAFAddress(lispLcafAddress);
230 throw new IllegalArgumentException("LCAF type " + lcafEnum + " not supported by this transoformer");
236 throw new IllegalArgumentException("AFI " + lispAddress.getAfi() + " not supported by this transformer");
239 return toContainer(lispAFIAddress);
243 public static LispAFIAddress transformLispMACAddress(LispAddress lispAddress) {
244 LispMACAddress lispMacAddress = (LispMACAddress) lispAddress;
245 StringBuilder sb = new StringBuilder(17);
246 for (byte b : lispMacAddress.getMAC()) {
249 sb.append(String.format("%02x", b));
252 return new MacBuilder()
253 .setAfi(lispMacAddress.getAfi().getIanaCode())
254 .setMacAddress(new MacAddress(sb.toString()))
258 public static LispAFIAddress transformLispApplicationDataLCAFAddress(LispLCAFAddress lispLcafAddress) {
259 LispApplicationDataLCAFAddress lispApplicationDataLCAFAddress = (LispApplicationDataLCAFAddress) lispLcafAddress;
260 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafapplicationdataaddress.Address address;
261 address = new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafapplicationdataaddress.AddressBuilder()
262 .setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(lispApplicationDataLCAFAddress.getAddress()))))
264 return new LcafApplicationDataBuilder()
265 .setAfi(lispLcafAddress.getAfi().getIanaCode())
266 .setLcafType((short) lispLcafAddress.getType().getLispCode())
267 .setIpTos(lispApplicationDataLCAFAddress.getIPTos())
268 .setLocalPort(new PortNumber((int) lispApplicationDataLCAFAddress.getLocalPort()))
269 .setRemotePort(new PortNumber((int) lispApplicationDataLCAFAddress.getRemotePort()))
274 public static LispAFIAddress transformLispListLCAFAddress(LispLCAFAddress lispLcafAddress) {
276 LispListLCAFAddress lispListLCAFAddress = (LispListLCAFAddress) lispLcafAddress;
278 List<Addresses> listAddresses = new ArrayList<Addresses>();
280 for (int i=0; i<lispListLCAFAddress.getAddresses().size(); i++){
281 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaflistaddress.Addresses addresses;
282 addresses = new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcaflistaddress.AddressesBuilder()
283 .setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(lispListLCAFAddress.getAddresses().get(i)))))
285 listAddresses.add(addresses);
288 return new LcafListBuilder()
289 .setAfi(lispLcafAddress.getAfi().getIanaCode())
290 .setLcafType((short) lispLcafAddress.getType().getLispCode())
291 .setAddresses(listAddresses)
295 public static LispAFIAddress transformLispSegmentLCAFAddress(LispLCAFAddress lispLcafAddress) {
296 LispSegmentLCAFAddress lispSegmentLCAFAddress = (LispSegmentLCAFAddress) lispLcafAddress;
297 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsegmentaddress.Address address;
298 address = new org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lcafsegmentaddress.AddressBuilder()
299 .setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(lispSegmentLCAFAddress.getAddress()))))
302 return new LcafSegmentBuilder()
303 .setAfi(lispLcafAddress.getAfi().getIanaCode())
304 .setLcafType((short) lispLcafAddress.getType().getLispCode())
305 .setInstanceId((long) lispSegmentLCAFAddress.getInstanceId())
311 public static LispAFIAddress transformLispSourceDestLCAFAddress(LispLCAFAddress lispLcafAddress) {
312 LispSourceDestLCAFAddress lispSourceDestLCAFAddress = (LispSourceDestLCAFAddress) lispLcafAddress;
316 SrcAddress srcAddress = new SrcAddressBuilder()
317 .setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(lispSourceDestLCAFAddress.getSrcAddress()))))
320 DstAddress dstAddress = new DstAddressBuilder()
321 .setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(lispSourceDestLCAFAddress.getDstAddress()))))
324 return new LcafSourceDestBuilder()
325 .setAfi(lispLcafAddress.getAfi().getIanaCode())
326 .setLcafType((short) lispLcafAddress.getType().getLispCode())
327 .setSrcMaskLength((short) lispSourceDestLCAFAddress.getSrcMaskLength())
328 .setDstMaskLength((short) lispSourceDestLCAFAddress.getDstMaskLength())
329 .setSrcAddress(srcAddress)
330 .setDstAddress(dstAddress)
334 public static LispAFIAddress transformLispTrafficEngineeringLCAFAddress(LispLCAFAddress lispLcafAddress) {
335 LispTrafficEngineeringLCAFAddress lispTrafficEngineeringLCAFAddress = (LispTrafficEngineeringLCAFAddress) lispLcafAddress;
337 List<Hops> listHops = new ArrayList<Hops>();
339 for (int i = 0; i < lispTrafficEngineeringLCAFAddress.getHops().size();i++){
340 ReencapHop reencapHop = lispTrafficEngineeringLCAFAddress.getHops().get(i);
342 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.reencaphop.Hop hop;
343 hop = new HopBuilder()
344 .setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(reencapHop.getHop()))))
347 Hops hops = new HopsBuilder()
348 .setLookup(reencapHop.isLookup())
349 .setRLOCProbe(reencapHop.isRLOCProbe())
350 .setStrict(reencapHop.isStrict())
358 return new LcafTrafficEngineeringBuilder()
359 .setAfi(lispLcafAddress.getAfi().getIanaCode())
360 .setLcafType((short) lispLcafAddress.getType().getLispCode())
368 public static LispAddress transformToLispAddress(LispAddressContainer lispAddress) {
370 LispAddress legacyAddress = null;
371 LispAFIAddress address = (LispAFIAddress) lispAddress.getAddress();
372 AddressFamilyNumberEnum afi = AddressFamilyNumberEnum.valueOf(address.getAfi());
377 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address lispIpv4Address;
378 lispIpv4Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address) address;
379 legacyAddress = new LispIpv4Address(lispIpv4Address.getIpv4Address().getValue());
382 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address lispIpv6Address;
383 lispIpv6Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address) address;
384 legacyAddress = new LispIpv6Address(lispIpv6Address.getIpv6Address().getValue());
387 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispASAddress lispASAddress;
388 lispASAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispASAddress) address;
389 legacyAddress = new LispASAddress(lispASAddress.getAS());
391 case DISTINGUISHED_NAME:
392 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispDistinguishedNameAddress lispDistinguishedNameAddress;
393 lispDistinguishedNameAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispDistinguishedNameAddress) address;
394 legacyAddress = new LispDistinguishedNameAddress(lispDistinguishedNameAddress.getDistinguishedName());
397 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispMacAddress lispMacAddress;
398 lispMacAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispMacAddress) address;
399 String macString = lispMacAddress.getMacAddress().getValue();
400 macString = macString.replaceAll(":", "");
401 legacyAddress = new LispMACAddress(DatatypeConverter.parseHexBinary(macString));
404 legacyAddress = new LispNoAddress();
407 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress;
408 lispLcafAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress) address;
410 LispCanonicalAddressFormatEnum lcafEnum =
411 LispCanonicalAddressFormatEnum.valueOf(lispLcafAddress.getLcafType());
414 case APPLICATION_DATA:
415 legacyAddress = transformToLispApplicationDataLCAFAddress(lispLcafAddress);
418 legacyAddress = transformToLispListLCAFAddress(lispLcafAddress);
421 legacyAddress = transformToLispSegmentLCAFAddress(lispLcafAddress);
424 legacyAddress = transformToLispSourceDestLCAFAddress(lispLcafAddress);
426 case TRAFFIC_ENGINEERING:
427 legacyAddress = transformToLispTrafficEngineeringLCAFAddress(lispLcafAddress);
431 throw new IllegalArgumentException("LCAF type " + lcafEnum + " not supported by this transoformer");
436 throw new IllegalArgumentException("AFI " + afi + " not supported by this transformer");
439 return legacyAddress;
442 public static LispAddress transformToLispApplicationDataLCAFAddress(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress){
443 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafApplicationDataAddress lcafApplicationDataAddress;
444 lcafApplicationDataAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafApplicationDataAddress) lispLcafAddress;
446 return new LispApplicationDataLCAFAddress(
448 lcafApplicationDataAddress.getProtocol().byteValue(),
449 lcafApplicationDataAddress.getIpTos().intValue(),
450 lcafApplicationDataAddress.getLocalPort().getValue().shortValue(),
451 lcafApplicationDataAddress.getRemotePort().getValue().shortValue(),
452 transformToLispAddress(toContainer(toAFIfromPrimitive(lcafApplicationDataAddress.getAddress().getPrimitiveAddress()))));
455 public static LispAddress transformToLispListLCAFAddress(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress){
456 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafListAddress lcafListAddress;
457 lcafListAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafListAddress) lispLcafAddress;
459 List<LispAddress> listLegacyAddress = new ArrayList<LispAddress>();
461 for (int i=0;i<lcafListAddress.getAddresses().size();i++){
462 listLegacyAddress.add(transformToLispAddress(toContainer(toAFIfromPrimitive(lcafListAddress.getAddresses().get(i).getPrimitiveAddress()))));
464 return new LispListLCAFAddress((byte)0, listLegacyAddress);
468 public static LispAddress transformToLispSegmentLCAFAddress(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress){
469 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSegmentAddress lcafSegmentAddress;
470 lcafSegmentAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSegmentAddress) lispLcafAddress;
474 return new LispSegmentLCAFAddress(
476 lcafSegmentAddress.getInstanceId().intValue(),
477 transformToLispAddress(toContainer(toAFIfromPrimitive(lcafSegmentAddress.getAddress().getPrimitiveAddress()))));
481 public static LispAddress transformToLispSourceDestLCAFAddress(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress){
482 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSourceDestAddress lcafSourceDestAddress;
483 lcafSourceDestAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafSourceDestAddress) lispLcafAddress;
485 return new LispSourceDestLCAFAddress(
488 lcafSourceDestAddress.getSrcMaskLength().byteValue(),
489 lcafSourceDestAddress.getDstMaskLength().byteValue(),
490 transformToLispAddress(toContainer(toAFIfromPrimitive(lcafSourceDestAddress.getSrcAddress().getPrimitiveAddress()))),
491 transformToLispAddress(toContainer(toAFIfromPrimitive(lcafSourceDestAddress.getDstAddress().getPrimitiveAddress()))));
495 public static LispAddress transformToLispTrafficEngineeringLCAFAddress(org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispLcafAddress lispLcafAddress){
496 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafTrafficEngineeringAddress lcafTrafficEngineeringAddress;
497 lcafTrafficEngineeringAddress = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LcafTrafficEngineeringAddress) lispLcafAddress;
499 List<ReencapHop> listLegacyHops = new ArrayList<ReencapHop>();
501 ReencapHop legacyHop;
502 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.ReencapHop hop;
504 //for (Addresses addresses : lcafListAddress.getAddresses()){
505 for (int i=0;i<lcafTrafficEngineeringAddress.getHops().size();i++){
506 hop = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.ReencapHop) lcafTrafficEngineeringAddress.getHops().get(i);
508 legacyHop = new ReencapHop(
509 transformToLispAddress(toContainer(toAFIfromPrimitive(hop.getHop().getPrimitiveAddress()))),
515 listLegacyHops.add(legacyHop);
517 return new LispTrafficEngineeringLCAFAddress((byte)0, listLegacyHops);
523 public static MapRegister transformMapRegister(org.opendaylight.lispflowmapping.type.lisp.MapRegister legacyMapRegister) {
525 List<EidToLocatorRecord> listEidToLocatorRecord = new ArrayList<EidToLocatorRecord>();
527 // for (EidToLocatorRecord legacyRecord:
528 // legacyMapRegister.getEidToLocatorRecords()){
529 for (int i = 0; i < legacyMapRegister.getEidToLocatorRecords().size(); i++) {
531 listEidToLocatorRecord.add(transformEidToLocatorRecord(legacyMapRegister.getEidToLocatorRecords().get(i)));
535 MapRegisterBuilder builder = new MapRegisterBuilder();
537 MapRegister yangMapRegister = builder.setKeyId(legacyMapRegister.getKeyId()).setProxyMapReply(legacyMapRegister.isProxyMapReply())
538 .setEidToLocatorRecord(listEidToLocatorRecord).setWantMapNotify(true).build();
540 return yangMapRegister;
544 public static EidToLocatorRecord transformEidToLocatorRecord(
545 org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyEidToLocatorRecord) {
547 List<LocatorRecord> listLocatorRecord = new ArrayList<LocatorRecord>();
549 for (int j = 0; j < legacyEidToLocatorRecord.getLocators().size(); j++) {
551 org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = legacyEidToLocatorRecord.getLocators().get(j);
553 LispAddressContainer rloc = transformLispAddress(legacyLocatorRecord.getLocator());
555 LocatorRecordBuilder locatorRecordBuilder = new LocatorRecordBuilder();
557 LocatorRecord locatorRecord = locatorRecordBuilder.setLispAddressContainer((LispAddressContainer) rloc)
558 .setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((short) legacyLocatorRecord.getPriority())
559 .setWeight((short) legacyLocatorRecord.getWeight()).setMulticastPriority((short) legacyLocatorRecord.getMulticastPriority())
560 .setMulticastWeight((short) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
561 .setRouted(legacyLocatorRecord.isRouted()).build();
563 listLocatorRecord.add(locatorRecord);
566 LispAddressContainer eid = transformLispAddress(legacyEidToLocatorRecord.getPrefix());
567 EidToLocatorRecordBuilder eidToLocatorRecordBuilder = new EidToLocatorRecordBuilder();
568 EidToLocatorRecord eidToLocatorRecord = eidToLocatorRecordBuilder.setLispAddressContainer((LispAddressContainer) eid)
569 .setAction(Action.forValue(legacyEidToLocatorRecord.getAction().getCode()))
570 .setAuthoritative(legacyEidToLocatorRecord.isAuthoritative()).setMaskLength((short) legacyEidToLocatorRecord.getMaskLength())
571 .setRecordTtl(legacyEidToLocatorRecord.getRecordTtl()).setLocatorRecord(listLocatorRecord).build();
572 return eidToLocatorRecord;
575 public static org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord reTransformEidToLocatorRecord(EidToLocatorRecord eidToLocatorRecord) {
577 org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyRecord = new org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord();
579 for (int j = 0; j < eidToLocatorRecord.getLocatorRecord().size(); j++) {
581 LocatorRecord locatorRecord = (LocatorRecord) eidToLocatorRecord.getLocatorRecord().get(j);
583 org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = new org.opendaylight.lispflowmapping.type.lisp.LocatorRecord();
585 LispAddressContainer rloc = locatorRecord.getLispAddressContainer();
587 legacyLocatorRecord.setLocator(YangTransformerNB.transformToLispAddress(rloc));
589 legacyLocatorRecord.setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((byte) legacyLocatorRecord.getPriority())
590 .setWeight((byte) legacyLocatorRecord.getWeight()).setMulticastPriority((byte) legacyLocatorRecord.getMulticastPriority())
591 .setMulticastWeight((byte) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
592 .setRouted(legacyLocatorRecord.isRouted());
594 legacyRecord.addLocator(legacyLocatorRecord);
597 LispAddress eid = transformToLispAddress(eidToLocatorRecord.getLispAddressContainer());
598 legacyRecord.setPrefix(eid).setAction(MapReplyAction.valueOf(eidToLocatorRecord.getAction().getIntValue()))
599 .setAuthoritative(eidToLocatorRecord.isAuthoritative()).setMaskLength((short) eidToLocatorRecord.getMaskLength())
600 .setRecordTtl(eidToLocatorRecord.getRecordTtl());
604 public static MapRequest transformMapRequest(org.opendaylight.lispflowmapping.type.lisp.MapRequest legacyMapRequest) {
606 MapRequestBuilder builder = new MapRequestBuilder();
607 builder.setAuthoritative(legacyMapRequest.isAuthoritative());
608 builder.setMapDataPresent(legacyMapRequest.isMapDataPresent());
609 builder.setPitr(legacyMapRequest.isPitr());
610 builder.setProbe(legacyMapRequest.isProbe());
611 builder.setSmr(legacyMapRequest.isSmr());
612 builder.setSmrInvoked(legacyMapRequest.isSmrInvoked());
614 builder.setEidRecord(new ArrayList<org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecord>());
615 for (EidRecord record : legacyMapRequest.getEids()) {
616 LispAddressContainer container = transformLispAddress(record.getPrefix());
617 builder.getEidRecord().add(
619 new EidRecordBuilder().setMask((short) record.getMaskLength()).setLispAddressContainer(container).build());
622 builder.setItrRloc(new ArrayList<ItrRloc>());
623 for (LispAddress itr : legacyMapRequest.getItrRlocs()) {
624 builder.getItrRloc().add(new ItrRlocBuilder().setLispAddressContainer(transformLispAddress(itr)).build());
627 builder.setMapReply(null);
628 builder.setNonce(legacyMapRequest.getNonce());
629 if (legacyMapRequest.getSourceEid() != null) {
630 builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer(transformLispAddress(legacyMapRequest.getSourceEid())).build());
632 return builder.build();