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.util.ArrayList;
12 import java.util.Iterator;
13 import java.util.List;
15 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
16 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
17 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
18 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecordBuilder;
19 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
20 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord.Action;
21 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecordBuilder;
22 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainer;
23 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
24 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.Address;
25 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.AS;
26 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.ASBuilder;
27 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4;
28 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4Builder;
29 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6;
30 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6Builder;
31 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.NoBuilder;
32 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecord;
33 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecordBuilder;
34 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder;
35 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRloc;
36 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRlocBuilder;
37 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.SourceEidBuilder;
38 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequestBuilder;
39 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
40 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
41 import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
42 import org.opendaylight.lispflowmapping.type.lisp.address.LispASAddress;
43 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
44 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
45 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
51 public class YangTransformerNB {
53 protected static final Logger logger = LoggerFactory.getLogger(YangTransformerNB.class);
55 public static LispAddressContainer toContainer(LispAFIAddress address) {
56 if (address instanceof Address) {
57 return new LispAddressContainerBuilder().setAddress((Address) address).build();
63 public static LispAddressContainer transformLispAddress(LispAddress lispAddress) {
65 if (lispAddress == null) {
69 LispAFIAddress lispAFIAddress = null;
70 short ianaCode = lispAddress.getAfi().getIanaCode();
72 switch (lispAddress.getAfi()) {
75 LispIpv4Address lispIpv4Address = (LispIpv4Address) lispAddress;
76 Ipv4Address ipv4Address = new Ipv4Address(lispIpv4Address.getAddress().getHostAddress());
77 lispAFIAddress = new Ipv4Builder().setIpv4Address(ipv4Address).setAfi(ianaCode).build();
80 lispAFIAddress = new NoBuilder().setAfi(ianaCode).build();
82 LispASAddress lispASAddress = (LispASAddress) lispAddress;
83 lispAFIAddress = new ASBuilder().setAS(lispASAddress.getAS()).setAfi(ianaCode).build();
85 case DISTINGUISHED_NAME:
88 LispIpv6Address lispIpv6Address = (LispIpv6Address) lispAddress;
89 Ipv6Address ipv6Address = new Ipv6Address(lispIpv6Address.getAddress().getHostAddress());
90 lispAFIAddress = new Ipv6Builder().setIpv6Address(ipv6Address).setAfi(ianaCode).build();
103 return toContainer(lispAFIAddress);
107 public static LispAddress transformToLispAddress(LispAddressContainer lispAddress) {
109 LispAddress legacyAddres = null;
110 LispAFIAddress address = (LispAFIAddress) lispAddress.getAddress();
111 short ianaCode = address.getAfi();
113 // TODO: add all other cases.
118 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address lispIpv4Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address) address;
119 legacyAddres = new LispIpv4Address(lispIpv4Address.getIpv4Address().getValue());
122 org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address lispIpv6Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address) address;
123 legacyAddres = new LispIpv6Address(lispIpv6Address.getIpv6Address().getValue());
134 public static MapRegister transformMapRegister(org.opendaylight.lispflowmapping.type.lisp.MapRegister legacyMapRegister) {
136 List<EidToLocatorRecord> listEidToLocatorRecord = new ArrayList<EidToLocatorRecord>();
138 // for (EidToLocatorRecord legacyRecord:
139 // legacyMapRegister.getEidToLocatorRecords()){
140 for (int i = 0; i < legacyMapRegister.getEidToLocatorRecords().size(); i++) {
142 listEidToLocatorRecord.add(transformEidToLocatorRecord(legacyMapRegister.getEidToLocatorRecords().get(i)));
146 MapRegisterBuilder builder = new MapRegisterBuilder();
148 MapRegister yangMapRegister = builder.setKeyId(legacyMapRegister.getKeyId()).setProxyMapReply(legacyMapRegister.isProxyMapReply())
149 .setEidToLocatorRecord(listEidToLocatorRecord).setWantMapNotify(true).build();
151 return yangMapRegister;
155 public static EidToLocatorRecord transformEidToLocatorRecord(
156 org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyEidToLocatorRecord) {
158 List<LocatorRecord> listLocatorRecord = new ArrayList<LocatorRecord>();
160 for (int j = 0; j < legacyEidToLocatorRecord.getLocators().size(); j++) {
162 org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = legacyEidToLocatorRecord.getLocators().get(j);
164 LispAddressContainer rloc = transformLispAddress(legacyLocatorRecord.getLocator());
166 LocatorRecordBuilder locatorRecordBuilder = new LocatorRecordBuilder();
168 LocatorRecord locatorRecord = locatorRecordBuilder.setLispAddressContainer((LispAddressContainer) rloc)
169 .setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((short) legacyLocatorRecord.getPriority())
170 .setWeight((short) legacyLocatorRecord.getWeight()).setMulticastPriority((short) legacyLocatorRecord.getMulticastPriority())
171 .setMulticastWeight((short) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
172 .setRouted(legacyLocatorRecord.isRouted()).build();
174 listLocatorRecord.add(locatorRecord);
177 LispAddressContainer eid = transformLispAddress(legacyEidToLocatorRecord.getPrefix());
178 EidToLocatorRecordBuilder eidToLocatorRecordBuilder = new EidToLocatorRecordBuilder();
179 EidToLocatorRecord eidToLocatorRecord = eidToLocatorRecordBuilder.setLispAddressContainer((LispAddressContainer) eid)
180 .setAction(Action.forValue(legacyEidToLocatorRecord.getAction().getCode()))
181 .setAuthoritative(legacyEidToLocatorRecord.isAuthoritative()).setMaskLength((short) legacyEidToLocatorRecord.getMaskLength())
182 .setRecordTtl(legacyEidToLocatorRecord.getRecordTtl()).setLocatorRecord(listLocatorRecord).build();
183 return eidToLocatorRecord;
186 public static org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord reTransformEidToLocatorRecord(EidToLocatorRecord eidToLocatorRecord) {
188 org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyRecord = new org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord();
190 for (int j = 0; j < eidToLocatorRecord.getLocatorRecord().size(); j++) {
192 LocatorRecord locatorRecord = eidToLocatorRecord.getLocatorRecord().get(j);
194 org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = new org.opendaylight.lispflowmapping.type.lisp.LocatorRecord();
196 LispAddressContainer rloc = locatorRecord.getLispAddressContainer();
198 legacyLocatorRecord.setLocator(YangTransformerNB.transformToLispAddress(rloc));
200 legacyLocatorRecord.setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((byte) legacyLocatorRecord.getPriority())
201 .setWeight((byte) legacyLocatorRecord.getWeight()).setMulticastPriority((byte) legacyLocatorRecord.getMulticastPriority())
202 .setMulticastWeight((byte) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
203 .setRouted(legacyLocatorRecord.isRouted());
205 legacyRecord.addLocator(legacyLocatorRecord);
208 LispAddress eid = transformToLispAddress(eidToLocatorRecord.getLispAddressContainer());
209 legacyRecord.setPrefix(eid).setAction(MapReplyAction.valueOf(eidToLocatorRecord.getAction().getIntValue()))
210 .setAuthoritative(eidToLocatorRecord.isAuthoritative()).setMaskLength((short) eidToLocatorRecord.getMaskLength())
211 .setRecordTtl(eidToLocatorRecord.getRecordTtl());
215 public static MapRequest transformMapRequest(org.opendaylight.lispflowmapping.type.lisp.MapRequest legacyMapRequest) {
217 MapRequestBuilder builder = new MapRequestBuilder();
218 builder.setAuthoritative(legacyMapRequest.isAuthoritative());
219 builder.setMapDataPresent(legacyMapRequest.isMapDataPresent());
220 builder.setPitr(legacyMapRequest.isPitr());
221 builder.setProbe(legacyMapRequest.isProbe());
222 builder.setSmr(legacyMapRequest.isSmr());
223 builder.setSmrInvoked(legacyMapRequest.isSmrInvoked());
225 builder.setEidRecord(new ArrayList<org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecord>());
226 for (EidRecord record : legacyMapRequest.getEids()) {
227 LispAddressContainer container = transformLispAddress(record.getPrefix());
228 builder.getEidRecord().add(
230 new EidRecordBuilder().setMask((short) record.getMaskLength()).setLispAddressContainer(container).build());
233 builder.setItrRloc(new ArrayList<ItrRloc>());
234 for (LispAddress itr : legacyMapRequest.getItrRlocs()) {
235 builder.getItrRloc().add(new ItrRlocBuilder().setLispAddressContainer(transformLispAddress(itr)).build());
238 builder.setMapReply(null);
239 builder.setNonce(legacyMapRequest.getNonce());
240 if (legacyMapRequest.getSourceEid() != null) {
241 builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer(transformLispAddress(legacyMapRequest.getSourceEid())).build());
243 return builder.build();