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.SimpleAddress;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumberBuilder;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKey;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.ExplicitLocatorPathBuilder;
61 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;
62 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;
63 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;
65 public class LispAddressUtil {
66 private static Pattern IP4_PATTERN = null;
67 private static Pattern IP6_PATTERN = null;
68 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])";
69 private static final String ip6Pattern = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}";
72 IP4_PATTERN = Pattern.compile(ip4Pattern, Pattern.CASE_INSENSITIVE);
73 IP6_PATTERN = Pattern.compile(ip6Pattern, Pattern.CASE_INSENSITIVE);
74 } catch (PatternSyntaxException e) {
78 public static Class<? extends LispAddressFamily> addressTypeFromSimpleAddress(SimpleAddress address) {
79 if (address.getIpAddress() != null) {
80 return addressTypeFromIpAddress(address.getIpAddress());
81 } else if (address.getIpPrefix() != null) {
82 return addressTypeFromIpPrefix(address.getIpPrefix());
83 } else if (address.getMacAddress() != null) {
85 } else if (address.getDistinguishedNameType() != null) {
86 return DistinguishedNameAfi.class;
87 } else if (address.getAsNumber() != null) {
88 return AsNumberAfi.class;
93 public static Address addressFromSimpleAddress(SimpleAddress address) {
94 if (address.getIpAddress() != null) {
95 return addressFromIpAddress(address.getIpAddress());
96 } else if (address.getIpPrefix() != null) {
97 return addressFromIpPrefix(address.getIpPrefix());
98 } else if (address.getMacAddress() != null) {
99 return addressFromMacAddress(address.getMacAddress());
100 } else if (address.getDistinguishedNameType() != null) {
101 return addressFromDistinguishedName(address.getDistinguishedNameType());
102 } else if (address.getAsNumber() != null) {
103 return addressFromAsNumber(address.getAsNumber());
108 public static Class<? extends LispAddressFamily> addressTypeFromInet(InetAddress address) {
109 if (address instanceof Inet4Address) {
110 return Ipv4Afi.class;
111 } else if (address instanceof Inet6Address) {
112 return Ipv6Afi.class;
117 public static Address addressFromInet(InetAddress address) {
118 if (address instanceof Inet4Address) {
119 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder()
120 .setIpv4(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address(address.getHostAddress())).build();
121 } else if (address instanceof Inet6Address) {
122 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder()
123 .setIpv6(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address(address.getHostAddress())).build();
128 public static Class<? extends LispAddressFamily> addressTypeFromIpAddress(IpAddress address) {
129 if (address == null) {
131 } else if (address.getIpv4Address() != null) {
132 return Ipv4Afi.class;
133 } else if (address.getIpv6Address() != null) {
134 return Ipv6Afi.class;
139 public static Address addressFromIpAddress(IpAddress address) {
140 if (address == null) {
142 } else if (address.getIpv4Address() != null) {
143 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();
144 } else if (address.getIpv6Address() != null) {
145 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();
150 public static Class<? extends LispAddressFamily> addressTypeFromIpPrefix(IpPrefix address) {
151 if (address == null) {
153 } else if (address.getIpv4Prefix() != null) {
154 return Ipv4PrefixAfi.class;
155 } else if (address.getIpv6Prefix() != null) {
156 return Ipv6PrefixAfi.class;
161 public static Address addressFromIpPrefix(IpPrefix address) {
162 if (address == null) {
164 } else if (address.getIpv4Prefix() != null) {
165 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();
166 } else if (address.getIpv6Prefix() != null) {
167 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();
172 public static Address addressFromMacAddress(MacAddress address) {
173 if (address == null) {
176 return (Address) new MacBuilder().setMac(address).build();
180 public static Address addressFromDistinguishedName(DistinguishedNameType address) {
181 if (address == null) {
184 return (Address) new DistinguishedNameBuilder().setDistinguishedName(address).build();
188 public static Address addressFromAsNumber(AsNumber address) {
189 if (address == null) {
192 return (Address) new AsNumberBuilder().setAsNumber(address).build();
195 public static Rloc toRloc(SimpleAddress address) {
196 RlocBuilder builder = new RlocBuilder();
197 builder.setAddressType(addressTypeFromSimpleAddress(address));
198 builder.setVirtualNetworkId(null);
199 builder.setAddress(addressFromSimpleAddress(address));
200 return builder.build();
203 public static Rloc toRloc(InetAddress address) {
204 RlocBuilder builder = new RlocBuilder();
205 builder.setAddressType(addressTypeFromInet(address));
206 builder.setVirtualNetworkId(null);
207 builder.setAddress(addressFromInet(address));
208 return builder.build();
211 public static Rloc toRloc(Ipv4Address address) {
212 RlocBuilder builder = new RlocBuilder();
213 builder.setAddressType(Ipv4Afi.class);
214 builder.setVirtualNetworkId(null);
215 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
216 return builder.build();
219 public static Rloc toRloc(Ipv6Address address) {
220 RlocBuilder builder = new RlocBuilder();
221 builder.setAddressType(Ipv6Afi.class);
222 builder.setVirtualNetworkId(null);
223 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
224 return builder.build();
227 public static Rloc asIpv4Rloc(String address) {
228 return toRloc(new Ipv4Address(address));
231 public static Rloc asIpv6Rloc(String address) {
232 return toRloc(new Ipv6Address(address));
235 public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) {
236 EidBuilder builder = new EidBuilder();
237 builder.setAddressType(Ipv4PrefixAfi.class);
238 builder.setVirtualNetworkId(vni);
239 builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
240 return builder.build();
243 public static Eid toEid(Ipv4Address prefix, InstanceIdType vni) {
244 EidBuilder builder = new EidBuilder();
245 builder.setAddressType(Ipv4Afi.class);
246 builder.setVirtualNetworkId(vni);
247 builder.setAddress((Address) new Ipv4Builder().setIpv4(prefix).build());
248 return builder.build();
251 public static Eid toEid(IpPrefix prefix, int vni) {
252 EidBuilder builder = new EidBuilder();
253 builder.setAddress(addressFromIpPrefix(prefix));
254 builder.setAddressType(addressTypeFromIpPrefix(prefix));
255 // XXX getMapping rcp fails if set to 0
256 //builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
257 return builder.build();
260 public static Eid toIpPrefixEid(IpAddress addr, int vni) {
261 int mask = addressTypeFromIpAddress(addr) == Ipv4Afi.class ? 32 : 128;
262 IpPrefix prefix = asIpPrefix(addr.getValue().toString(), mask);
263 return toEid(prefix, vni);
266 public static Eid asEid(SimpleAddress address, InstanceIdType vni) {
267 EidBuilder builder = new EidBuilder();
268 builder.setAddressType(addressTypeFromSimpleAddress(address));
269 builder.setVirtualNetworkId(vni);
270 // XXX Not sure if the below actually works as expected... also, what happens to AFI?
271 builder.setAddress(addressFromSimpleAddress(address));
272 return builder.build();
275 public static Eid asIpv4PrefixEid(String prefix) {
276 return toEid(new Ipv4Prefix(prefix), null);
279 public static Eid asIpv4Eid(String address) {
280 return toEid(new Ipv4Address(address), null);
283 public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) {
284 EidBuilder builder = new EidBuilder();
285 builder.setAddressType(Ipv6PrefixAfi.class);
286 builder.setVirtualNetworkId(vni);
287 builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
288 return builder.build();
291 public static Eid toEid(Ipv6Address prefix, InstanceIdType vni) {
292 EidBuilder builder = new EidBuilder();
293 builder.setAddressType(Ipv6Afi.class);
294 builder.setVirtualNetworkId(vni);
295 builder.setAddress((Address) new Ipv6Builder().setIpv6(prefix).build());
296 return builder.build();
299 public static Eid asIpv6Eid(String address, long vni) {
300 return toEid(new Ipv6Address(address), new InstanceIdType(vni));
303 public static Eid asIpv6PrefixEid(String prefix) {
304 return toEid(new Ipv6Prefix(prefix), null);
307 public static Eid asIpv6Eid(String address) {
308 return toEid(new Ipv6Address(address), null);
311 public static Eid asIpv4Eid(String address, long vni) {
312 return toEid(new Ipv4Address(address), new InstanceIdType(vni));
315 public static int ipVersionFromString(String ip) {
316 if (IP4_PATTERN.matcher(ip).matches()) {
318 } else if (IP6_PATTERN.matcher(ip).matches()) {
325 public static IpPrefix asIpPrefix(String addr, int mask) {
326 int version = ipVersionFromString(addr);
327 if (version == 4 && (mask >= 0 && mask <= 32)) {
328 return new IpPrefix(new Ipv4Prefix(addr + "/" + mask));
329 } else if (version == 6 && (mask >=0 && mask <= 128)) {
330 return new IpPrefix(new Ipv6Prefix(addr + "/" + mask));
336 public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) {
337 EidBuilder builder = new EidBuilder();
338 builder.setAddressType(eid.getAddressType());
339 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
340 builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(new Ipv4Prefix(getStringPrefix(address, mask))).build());
341 return builder.build();
344 public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) {
345 EidBuilder builder = new EidBuilder();
346 builder.setAddressType(eid.getAddressType());
347 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
348 builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(new Ipv6Prefix(getStringPrefix(address, mask))).build());
349 return builder.build();
352 public static Eid toEid(MacAddress mac, InstanceIdType vni) {
353 EidBuilder builder = new EidBuilder();
354 builder.setAddressType(MacAfi.class);
355 builder.setVirtualNetworkId(vni);
356 builder.setAddress((Address) new MacBuilder().setMac(mac).build());
357 return builder.build();
360 public static Eid asMacEid(String address, long vni) {
361 return toEid(new MacAddress(address), new InstanceIdType(vni));
364 public static Eid asMacEid(String address) {
365 return toEid(new MacAddress(address), null);
368 public static Eid toEid(DistinguishedNameType dn, InstanceIdType vni) {
369 EidBuilder builder = new EidBuilder();
370 builder.setAddressType(DistinguishedNameAfi.class);
371 builder.setVirtualNetworkId(vni);
372 builder.setAddress((Address) new DistinguishedNameBuilder().setDistinguishedName(dn).build());
373 return builder.build();
376 public static Eid asDistinguishedNameEid(String address, long vni) {
377 return toEid(new MacAddress(address), new InstanceIdType(vni));
380 public static Eid asDistinguishedNameEid(String address) {
381 return toEid(new DistinguishedNameType(address), null);
384 public static Eid asKeyValueAddressEid(SimpleAddress key, SimpleAddress value) {
385 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
387 kvab.setValue(value);
388 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder()
389 .setKeyValueAddress(kvab.build()).build();
390 EidBuilder builder = new EidBuilder();
391 builder.setAddressType(KeyValueAddressLcaf.class);
392 builder.setVirtualNetworkId(null);
393 builder.setAddress((Address) address);
394 return builder.build();
397 public static Rloc asKeyValueAddressRloc(SimpleAddress key, SimpleAddress value) {
398 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
400 kvab.setValue(value);
401 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder()
402 .setKeyValueAddress(kvab.build()).build();
403 RlocBuilder builder = new RlocBuilder();
404 builder.setAddressType(KeyValueAddressLcaf.class);
405 builder.setVirtualNetworkId(null);
406 builder.setAddress((Address) address);
407 return builder.build();
410 public static Rloc asKeyValueAddress(String key, SimpleAddress value) {
411 return asKeyValueAddressRloc(new SimpleAddress(new DistinguishedNameType(key)), value);
414 private static String getStringPrefix(InetAddress address, short mask) {
415 StringBuilder sb = new StringBuilder();
416 sb.append(address.getHostAddress());
419 return sb.toString();
422 public static SourceDestKey asSrcDst(String src, String dst, int smask, int dmask) {
423 SourceDestKeyBuilder builder = new SourceDestKeyBuilder();
424 builder.setSource(new SimpleAddress(asIpPrefix(src, smask)));
425 builder.setDest(new SimpleAddress(asIpPrefix(dst, dmask)));
426 return builder.build();
429 public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, int vni) {
430 EidBuilder builder = new EidBuilder();
431 builder.setAddressType(SourceDestKeyLcaf.class);
432 builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
434 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder()
435 .setSourceDestKey(asSrcDst(src, dst, smask, dmask)).build());
437 return builder.build();
440 public static Eid asSrcDstEid(SourceDestKey sd, int vni) {
441 EidBuilder builder = new EidBuilder();
442 builder.setAddressType(SourceDestKeyLcaf.class);
443 builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
445 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder()
446 .setSourceDestKey(sd).build());
447 return builder.build();
450 public static Rloc asTeLcafRloc(List<IpAddress> hopList) {
451 RlocBuilder teBuilder = new RlocBuilder();
452 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder elpBuilder =
453 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder();
454 ExplicitLocatorPathBuilder teAddrBuilder = new ExplicitLocatorPathBuilder();
455 teAddrBuilder.setHop(new ArrayList<Hop>());
456 for (IpAddress hop : hopList) {
457 HopBuilder hopBuilder = new HopBuilder();
458 hopBuilder.setAddress(new SimpleAddress(hop));
459 hopBuilder.setHopId("Hop " + teAddrBuilder.getHop().size());
460 hopBuilder.setLrsBits(new LrsBits(false, false, false));
461 teAddrBuilder.getHop().add(hopBuilder.build());
464 elpBuilder.setExplicitLocatorPath(teAddrBuilder.build());
465 teBuilder.setAddress(elpBuilder.build());
466 teBuilder.setAddressType(ExplicitLocatorPathLcaf.class);
467 return teBuilder.build();
470 public static List<LocatorRecord> asLocatorRecords(List<Rloc> locators) {
471 List<LocatorRecord> locatorRecords = new ArrayList<LocatorRecord>();
472 for (Rloc locator : locators) {
473 LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder();
474 locatorBuilder.setLocalLocator(false).setRlocProbed(false).setWeight((short) 1).setPriority((short) 1)
475 .setMulticastWeight((short) 1).setMulticastPriority((short) 1).setRouted(true)
476 .setRloc(locator).setLocatorId("SFC_LISP").build();
477 locatorRecords.add(locatorBuilder.build());
479 return locatorRecords;
482 public static Eid getNoAddressEid() {
483 EidBuilder builder = new EidBuilder();
484 builder.setAddressType(NoAddressAfi.class);
485 builder.setVirtualNetworkId(null);
486 builder.setAddress(new NoAddressBuilder().setNoAddress(true).build());
487 return builder.build();