2 * Copyright (c) 2014 Contextream, 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
8 package org.opendaylight.lispflowmapping.lisp.util;
10 import java.net.Inet4Address;
11 import java.net.Inet6Address;
12 import java.net.InetAddress;
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.regex.Pattern;
16 import java.util.regex.PatternSyntaxException;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AsNumberAfi;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathLcaf;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumberBuilder;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePathBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePath;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKey;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.ExplicitLocatorPathBuilder;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
66 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop.LrsBits;
67 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.HopBuilder;
68 import org.slf4j.Logger;
69 import org.slf4j.LoggerFactory;
71 public final class LispAddressUtil {
72 protected static final Logger LOG = LoggerFactory.getLogger(LispAddressUtil.class);
74 private static Pattern IP4_PATTERN = null;
75 private static Pattern IP6_PATTERN = null;
76 private static final String ip4Pattern = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])";
77 private static final String ip6Pattern = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}";
80 IP4_PATTERN = Pattern.compile(ip4Pattern, Pattern.CASE_INSENSITIVE);
81 IP6_PATTERN = Pattern.compile(ip6Pattern, Pattern.CASE_INSENSITIVE);
82 } catch (PatternSyntaxException e) {
83 LOG.debug("Caught pattern syntax exception", e);
87 // Utility class, should not be instantiated
88 private LispAddressUtil() {
91 public static Class<? extends LispAddressFamily> addressTypeFromSimpleAddress(SimpleAddress address) {
92 if (address.getIpAddress() != null) {
93 return addressTypeFromIpAddress(address.getIpAddress());
94 } else if (address.getIpPrefix() != null) {
95 return addressTypeFromIpPrefix(address.getIpPrefix());
96 } else if (address.getMacAddress() != null) {
98 } else if (address.getDistinguishedNameType() != null) {
99 return DistinguishedNameAfi.class;
100 } else if (address.getAsNumber() != null) {
101 return AsNumberAfi.class;
106 public static Address addressFromSimpleAddress(SimpleAddress address) {
107 if (address.getIpAddress() != null) {
108 return addressFromIpAddress(address.getIpAddress());
109 } else if (address.getIpPrefix() != null) {
110 return addressFromIpPrefix(address.getIpPrefix());
111 } else if (address.getMacAddress() != null) {
112 return addressFromMacAddress(address.getMacAddress());
113 } else if (address.getDistinguishedNameType() != null) {
114 return addressFromDistinguishedName(address.getDistinguishedNameType());
115 } else if (address.getAsNumber() != null) {
116 return addressFromAsNumber(address.getAsNumber());
121 public static Class<? extends LispAddressFamily> addressTypeFromInet(InetAddress address) {
122 if (address instanceof Inet4Address) {
123 return Ipv4Afi.class;
124 } else if (address instanceof Inet6Address) {
125 return Ipv6Afi.class;
130 public static Address addressFromInet(InetAddress address) {
131 if (address instanceof Inet4Address) {
132 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder()
133 .setIpv4(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address(address.getHostAddress())).build();
134 } else if (address instanceof Inet6Address) {
135 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder()
136 .setIpv6(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address(address.getHostAddress())).build();
141 public static Class<? extends LispAddressFamily> addressTypeFromIpAddress(IpAddress address) {
142 if (address == null) {
144 } else if (address.getIpv4Address() != null) {
145 return Ipv4Afi.class;
146 } else if (address.getIpv6Address() != null) {
147 return Ipv6Afi.class;
152 public static Address addressFromIpAddress(IpAddress address) {
153 if (address == null) {
155 } else if (address.getIpv4Address() != null) {
156 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder().setIpv4(address.getIpv4Address()).build();
157 } else if (address.getIpv6Address() != null) {
158 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder().setIpv6(address.getIpv6Address()).build();
163 public static Class<? extends LispAddressFamily> addressTypeFromIpPrefix(IpPrefix address) {
164 if (address == null) {
166 } else if (address.getIpv4Prefix() != null) {
167 return Ipv4PrefixAfi.class;
168 } else if (address.getIpv6Prefix() != null) {
169 return Ipv6PrefixAfi.class;
174 public static Address addressFromIpPrefix(IpPrefix address) {
175 if (address == null) {
177 } else if (address.getIpv4Prefix() != null) {
178 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder().setIpv4Prefix(address.getIpv4Prefix()).build();
179 } else if (address.getIpv6Prefix() != null) {
180 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder().setIpv6Prefix(address.getIpv6Prefix()).build();
185 public static Address addressFromMacAddress(MacAddress address) {
186 if (address == null) {
189 return (Address) new MacBuilder().setMac(address).build();
193 public static Address addressFromServicePath(ServicePath address) {
194 if (address == null) {
197 return (Address) new ServicePathBuilder().setServicePath(address).build();
201 public static Address addressFromDistinguishedName(DistinguishedNameType address) {
202 if (address == null) {
205 return (Address) new DistinguishedNameBuilder().setDistinguishedName(address).build();
209 public static Address addressFromAsNumber(AsNumber address) {
210 if (address == null) {
213 return (Address) new AsNumberBuilder().setAsNumber(address).build();
216 public static Rloc toRloc(SimpleAddress address) {
217 RlocBuilder builder = new RlocBuilder();
218 builder.setAddressType(addressTypeFromSimpleAddress(address));
219 builder.setVirtualNetworkId(null);
220 builder.setAddress(addressFromSimpleAddress(address));
221 return builder.build();
224 public static Rloc toRloc(InetAddress address) {
225 RlocBuilder builder = new RlocBuilder();
226 builder.setAddressType(addressTypeFromInet(address));
227 builder.setVirtualNetworkId(null);
228 builder.setAddress(addressFromInet(address));
229 return builder.build();
232 public static Rloc toRloc(Ipv4Address address) {
233 RlocBuilder builder = new RlocBuilder();
234 builder.setAddressType(Ipv4Afi.class);
235 builder.setVirtualNetworkId(null);
236 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
237 return builder.build();
240 public static Rloc toRloc(Ipv6Address address) {
241 RlocBuilder builder = new RlocBuilder();
242 builder.setAddressType(Ipv6Afi.class);
243 builder.setVirtualNetworkId(null);
244 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
245 return builder.build();
248 public static Rloc asIpv4Rloc(String address) {
249 return toRloc(new Ipv4Address(address));
252 public static Rloc asIpv6Rloc(String address) {
253 return toRloc(new Ipv6Address(address));
256 public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) {
257 EidBuilder builder = new EidBuilder();
258 builder.setAddressType(Ipv4PrefixAfi.class);
259 builder.setVirtualNetworkId(vni);
260 builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
261 return builder.build();
264 public static Eid toEid(Ipv4Address prefix, InstanceIdType vni) {
265 EidBuilder builder = new EidBuilder();
266 builder.setAddressType(Ipv4Afi.class);
267 builder.setVirtualNetworkId(vni);
268 builder.setAddress((Address) new Ipv4Builder().setIpv4(prefix).build());
269 return builder.build();
272 public static Eid toEid(IpPrefix prefix, int vni) {
273 EidBuilder builder = new EidBuilder();
274 builder.setAddress(addressFromIpPrefix(prefix));
275 builder.setAddressType(addressTypeFromIpPrefix(prefix));
276 // XXX getMapping rcp fails if set to 0
277 //builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
278 return builder.build();
281 public static Eid toIpPrefixEid(IpAddress addr, int vni) {
282 int mask = addressTypeFromIpAddress(addr) == Ipv4Afi.class ? 32 : 128;
283 IpPrefix prefix = asIpPrefix(addr.getValue().toString(), mask);
284 return toEid(prefix, vni);
287 public static Eid asEid(SimpleAddress address, InstanceIdType vni) {
288 EidBuilder builder = new EidBuilder();
289 builder.setAddressType(addressTypeFromSimpleAddress(address));
290 builder.setVirtualNetworkId(vni);
291 // XXX Not sure if the below actually works as expected... also, what happens to AFI?
292 builder.setAddress(addressFromSimpleAddress(address));
293 return builder.build();
296 public static Eid asIpv4PrefixEid(String prefix) {
297 return toEid(new Ipv4Prefix(prefix), null);
300 public static Eid asIpv4Eid(String address) {
301 return toEid(new Ipv4Address(address), null);
304 public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) {
305 EidBuilder builder = new EidBuilder();
306 builder.setAddressType(Ipv6PrefixAfi.class);
307 builder.setVirtualNetworkId(vni);
308 builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
309 return builder.build();
312 public static Eid toEid(Ipv6Address prefix, InstanceIdType vni) {
313 EidBuilder builder = new EidBuilder();
314 builder.setAddressType(Ipv6Afi.class);
315 builder.setVirtualNetworkId(vni);
316 builder.setAddress((Address) new Ipv6Builder().setIpv6(prefix).build());
317 return builder.build();
320 public static Eid asIpv6Eid(String address, long vni) {
321 return toEid(new Ipv6Address(address), new InstanceIdType(vni));
324 public static Eid asIpv6PrefixEid(String prefix) {
325 return toEid(new Ipv6Prefix(prefix), null);
328 public static Eid asIpv6Eid(String address) {
329 return toEid(new Ipv6Address(address), null);
332 public static Eid asIpv4Eid(String address, long vni) {
333 return toEid(new Ipv4Address(address), new InstanceIdType(vni));
336 public static int ipVersionFromString(String ip) {
337 if (IP4_PATTERN.matcher(ip).matches()) {
339 } else if (IP6_PATTERN.matcher(ip).matches()) {
346 public static IpPrefix asIpPrefix(String addr, int mask) {
347 int version = ipVersionFromString(addr);
348 if (version == 4 && (mask >= 0 && mask <= 32)) {
349 return new IpPrefix(new Ipv4Prefix(addr + "/" + mask));
350 } else if (version == 6 && (mask >=0 && mask <= 128)) {
351 return new IpPrefix(new Ipv6Prefix(addr + "/" + mask));
357 public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) {
358 EidBuilder builder = new EidBuilder();
359 builder.setAddressType(eid.getAddressType());
360 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
361 builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(new Ipv4Prefix(getStringPrefix(address, mask))).build());
362 return builder.build();
365 public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) {
366 EidBuilder builder = new EidBuilder();
367 builder.setAddressType(eid.getAddressType());
368 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
369 builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(new Ipv6Prefix(getStringPrefix(address, mask))).build());
370 return builder.build();
373 public static Eid asServicePathEid(long vni, long servicePathId, short serviceIndex) {
374 EidBuilder eb = new EidBuilder();
375 eb.setAddressType(ServicePathLcaf.class);
377 eb.setVirtualNetworkId(new InstanceIdType(vni));
379 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePathBuilder spb = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePathBuilder();
380 spb.setServicePathId(new ServicePathIdType(servicePathId));
381 spb.setServiceIndex(serviceIndex);
382 return eb.setAddress(addressFromServicePath(spb.build())).build();
385 public static Eid toEid(MacAddress mac, InstanceIdType vni) {
386 EidBuilder builder = new EidBuilder();
387 builder.setAddressType(MacAfi.class);
388 builder.setVirtualNetworkId(vni);
389 builder.setAddress((Address) new MacBuilder().setMac(mac).build());
390 return builder.build();
393 public static Eid asMacEid(String address, long vni) {
394 return toEid(new MacAddress(address), new InstanceIdType(vni));
397 public static Eid asMacEid(String address) {
398 return toEid(new MacAddress(address), null);
401 public static Eid toEid(DistinguishedNameType dn, InstanceIdType vni) {
402 EidBuilder builder = new EidBuilder();
403 builder.setAddressType(DistinguishedNameAfi.class);
404 builder.setVirtualNetworkId(vni);
405 builder.setAddress((Address) new DistinguishedNameBuilder().setDistinguishedName(dn).build());
406 return builder.build();
409 public static Eid asDistinguishedNameEid(String address, long vni) {
410 return toEid(new MacAddress(address), new InstanceIdType(vni));
413 public static Eid asDistinguishedNameEid(String address) {
414 return toEid(new DistinguishedNameType(address), null);
417 public static Eid asKeyValueAddressEid(SimpleAddress key, SimpleAddress value) {
418 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
420 kvab.setValue(value);
421 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder()
422 .setKeyValueAddress(kvab.build()).build();
423 EidBuilder builder = new EidBuilder();
424 builder.setAddressType(KeyValueAddressLcaf.class);
425 builder.setVirtualNetworkId(null);
426 builder.setAddress((Address) address);
427 return builder.build();
430 public static Rloc asKeyValueAddressRloc(SimpleAddress key, SimpleAddress value) {
431 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
433 kvab.setValue(value);
434 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder()
435 .setKeyValueAddress(kvab.build()).build();
436 RlocBuilder builder = new RlocBuilder();
437 builder.setAddressType(KeyValueAddressLcaf.class);
438 builder.setVirtualNetworkId(null);
439 builder.setAddress((Address) address);
440 return builder.build();
443 public static Rloc asKeyValueAddress(String key, SimpleAddress value) {
444 return asKeyValueAddressRloc(new SimpleAddress(new DistinguishedNameType(key)), value);
447 private static String getStringPrefix(InetAddress address, short mask) {
448 StringBuilder sb = new StringBuilder();
449 sb.append(address.getHostAddress());
452 return sb.toString();
455 public static SourceDestKey asSrcDst(String src, String dst, int smask, int dmask) {
456 SourceDestKeyBuilder builder = new SourceDestKeyBuilder();
457 builder.setSource(new SimpleAddress(asIpPrefix(src, smask)));
458 builder.setDest(new SimpleAddress(asIpPrefix(dst, dmask)));
459 return builder.build();
462 public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, int vni) {
463 EidBuilder builder = new EidBuilder();
464 builder.setAddressType(SourceDestKeyLcaf.class);
465 builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
467 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder()
468 .setSourceDestKey(asSrcDst(src, dst, smask, dmask)).build());
470 return builder.build();
473 public static Eid asSrcDstEid(SourceDestKey sd, int vni) {
474 EidBuilder builder = new EidBuilder();
475 builder.setAddressType(SourceDestKeyLcaf.class);
476 builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
478 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder()
479 .setSourceDestKey(sd).build());
480 return builder.build();
483 public static Rloc asTeLcafRloc(List<IpAddress> hopList) {
484 RlocBuilder teBuilder = new RlocBuilder();
485 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder elpBuilder =
486 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder();
487 ExplicitLocatorPathBuilder teAddrBuilder = new ExplicitLocatorPathBuilder();
488 teAddrBuilder.setHop(new ArrayList<Hop>());
489 for (IpAddress hop : hopList) {
490 HopBuilder hopBuilder = new HopBuilder();
491 hopBuilder.setAddress(new SimpleAddress(hop));
492 hopBuilder.setHopId("Hop " + teAddrBuilder.getHop().size());
493 hopBuilder.setLrsBits(new LrsBits(false, false, false));
494 teAddrBuilder.getHop().add(hopBuilder.build());
497 elpBuilder.setExplicitLocatorPath(teAddrBuilder.build());
498 teBuilder.setAddress(elpBuilder.build());
499 teBuilder.setAddressType(ExplicitLocatorPathLcaf.class);
500 return teBuilder.build();
503 public static List<LocatorRecord> asLocatorRecords(List<Rloc> locators) {
504 List<LocatorRecord> locatorRecords = new ArrayList<LocatorRecord>();
505 for (Rloc locator : locators) {
506 LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder();
507 locatorBuilder.setLocalLocator(false).setRlocProbed(false).setWeight((short) 1).setPriority((short) 1)
508 .setMulticastWeight((short) 1).setMulticastPriority((short) 1).setRouted(true)
509 .setRloc(locator).setLocatorId("SFC_LISP").build();
510 locatorRecords.add(locatorBuilder.build());
512 return locatorRecords;
515 public static Eid getNoAddressEid() {
516 EidBuilder builder = new EidBuilder();
517 builder.setAddressType(NoAddressAfi.class);
518 builder.setVirtualNetworkId(null);
519 builder.setAddress(new NoAddressBuilder().setNoAddress(true).build());
520 return builder.build();