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 com.google.common.base.Preconditions;
11 import com.google.common.collect.Lists;
12 import com.google.common.net.InetAddresses;
13 import java.net.Inet4Address;
14 import java.net.Inet6Address;
15 import java.net.InetAddress;
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.util.regex.Pattern;
19 import org.apache.commons.lang3.tuple.ImmutablePair;
20 import org.apache.commons.lang3.tuple.Pair;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AsNumberAfi;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathLcaf;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumberBuilder;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePathBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.ExplicitLocatorPathBuilder;
60 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;
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.LrsBits;
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.HopBuilder;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePath;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKey;
66 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder;
67 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv6AddressBinary;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4BinaryAfi;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4PrefixBinaryAfi;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6BinaryAfi;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6PrefixBinaryAfi;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4BinaryBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinary;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinaryBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6BinaryBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinary;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinaryBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRloc;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
90 import org.slf4j.Logger;
91 import org.slf4j.LoggerFactory;
93 public final class LispAddressUtil {
94 protected static final Logger LOG = LoggerFactory.getLogger(LispAddressUtil.class);
96 public static final short STARTING_SERVICE_INDEX = 255;
97 private static final Pattern IP4_PATTERN =
98 Pattern.compile("(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])",
99 Pattern.CASE_INSENSITIVE);
100 private static final Pattern IP6_PATTERN =
101 Pattern.compile("([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}", Pattern.CASE_INSENSITIVE);
103 // Utility class, should not be instantiated
104 private LispAddressUtil() {
107 public static Class<? extends LispAddressFamily> addressTypeFromSimpleAddress(SimpleAddress address) {
108 if (address.getIpAddress() != null) {
109 return binaryAddressTypeFromIpAddress(address.getIpAddress());
110 } else if (address.getIpPrefix() != null) {
111 return addressTypeFromIpPrefix(address.getIpPrefix());
112 } else if (address.getMacAddress() != null) {
114 } else if (address.getDistinguishedNameType() != null) {
115 return DistinguishedNameAfi.class;
116 } else if (address.getAsNumber() != null) {
117 return AsNumberAfi.class;
122 public static Address addressFromSimpleAddress(SimpleAddress address) {
123 if (address.getIpAddress() != null) {
124 return binaryAddressFromIpAddress(address.getIpAddress());
125 } else if (address.getIpPrefix() != null) {
126 return addressFromIpPrefix(address.getIpPrefix());
127 } else if (address.getMacAddress() != null) {
128 return addressFromMacAddress(address.getMacAddress());
129 } else if (address.getDistinguishedNameType() != null) {
130 return addressFromDistinguishedName(address.getDistinguishedNameType());
131 } else if (address.getAsNumber() != null) {
132 return addressFromAsNumber(address.getAsNumber());
137 public static Class<? extends LispAddressFamily> addressTypeFromInet(InetAddress address) {
138 if (address instanceof Inet4Address) {
139 return Ipv4Afi.class;
140 } else if (address instanceof Inet6Address) {
141 return Ipv6Afi.class;
146 public static Address addressFromInet(InetAddress address) {
147 if (address instanceof Inet4Address) {
148 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
149 .rev151105.lisp.address.address.Ipv4Builder()
150 .setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address)).build();
151 } else if (address instanceof Inet6Address) {
152 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
153 .rev151105.lisp.address.address.Ipv6Builder()
154 .setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address)).build();
159 public static Class<? extends LispAddressFamily> binaryAddressTypeFromInet(InetAddress address) {
160 if (address instanceof Inet4Address) {
161 return Ipv4BinaryAfi.class;
162 } else if (address instanceof Inet6Address) {
163 return Ipv6BinaryAfi.class;
168 public static Address binaryAddressFromInet(InetAddress address) {
169 if (address instanceof Inet4Address) {
170 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(address.getAddress())).build();
171 } else if (address instanceof Inet6Address) {
172 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(address.getAddress())).build();
177 public static Class<? extends LispAddressFamily> addressTypeFromIpAddress(IpAddress address) {
178 if (address == null) {
180 } else if (address.getIpv4Address() != null) {
181 return Ipv4Afi.class;
182 } else if (address.getIpv6Address() != null) {
183 return Ipv6Afi.class;
188 public static Class<? extends LispAddressFamily> binaryAddressTypeFromIpAddress(IpAddress address) {
189 if (address == null) {
191 } else if (address.getIpv4Address() != null) {
192 return Ipv4BinaryAfi.class;
193 } else if (address.getIpv6Address() != null) {
194 return Ipv6BinaryAfi.class;
199 public static Address addressFromIpAddress(IpAddress address) {
200 if (address == null) {
202 } else if (address.getIpv4Address() != null) {
203 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
204 .rev151105.lisp.address.address.Ipv4Builder().setIpv4(address.getIpv4Address()).build();
205 } else if (address.getIpv6Address() != null) {
206 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
207 .rev151105.lisp.address.address.Ipv6Builder().setIpv6(address.getIpv6Address()).build();
213 public static Address binaryAddressFromIpAddress(IpAddress address) {
214 if (address == null) {
216 } else if (address.getIpv4Address() != null) {
217 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(
218 InetAddresses.forString(address.getIpv4Address().getValue()).getAddress())).build();
219 } else if (address.getIpv6Address() != null) {
220 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(
221 InetAddresses.forString(address.getIpv6Address().getValue()).getAddress())).build();
226 public static Class<? extends LispAddressFamily> addressTypeFromIpPrefix(IpPrefix address) {
227 if (address == null) {
229 } else if (address.getIpv4Prefix() != null) {
230 return Ipv4PrefixAfi.class;
231 } else if (address.getIpv6Prefix() != null) {
232 return Ipv6PrefixAfi.class;
237 public static Address addressFromIpPrefix(IpPrefix address) {
238 if (address == null) {
240 } else if (address.getIpv4Prefix() != null) {
241 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
242 .rev151105.lisp.address.address.Ipv4PrefixBuilder().setIpv4Prefix(address.getIpv4Prefix()).build();
243 } else if (address.getIpv6Prefix() != null) {
244 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
245 .rev151105.lisp.address.address.Ipv6PrefixBuilder().setIpv6Prefix(address.getIpv6Prefix()).build();
250 public static Address addressFromMacAddress(MacAddress address) {
251 if (address == null) {
254 return (Address) new MacBuilder().setMac(address).build();
258 public static Address addressFromServicePath(ServicePath address) {
259 if (address == null) {
262 return (Address) new ServicePathBuilder().setServicePath(address).build();
266 public static Address addressFromDistinguishedName(DistinguishedNameType address) {
267 if (address == null) {
270 return (Address) new DistinguishedNameBuilder().setDistinguishedName(address).build();
274 public static Address addressFromAsNumber(AsNumber address) {
275 if (address == null) {
278 return (Address) new AsNumberBuilder().setAsNumber(address).build();
282 public static Rloc toRloc(SimpleAddress address) {
283 RlocBuilder builder = new RlocBuilder();
284 builder.setAddressType(addressTypeFromSimpleAddress(address));
285 builder.setVirtualNetworkId(null);
286 builder.setAddress(addressFromSimpleAddress(address));
287 return builder.build();
290 public static Rloc toRloc(InetAddress address) {
291 RlocBuilder builder = new RlocBuilder();
292 builder.setAddressType(binaryAddressTypeFromInet(address));
293 builder.setVirtualNetworkId(null);
294 builder.setAddress(binaryAddressFromInet(address));
295 return builder.build();
298 public static Rloc toRloc(Ipv4Address address) {
299 RlocBuilder builder = new RlocBuilder();
300 builder.setAddressType(Ipv4Afi.class);
301 builder.setVirtualNetworkId(null);
302 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
303 return builder.build();
306 public static Rloc toRloc(Ipv4AddressBinary address) {
307 RlocBuilder builder = new RlocBuilder();
308 builder.setAddressType(Ipv4BinaryAfi.class);
309 builder.setVirtualNetworkId(null);
310 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
311 return builder.build();
314 public static Rloc toRloc(Ipv6Address address) {
315 RlocBuilder builder = new RlocBuilder();
316 builder.setAddressType(Ipv6Afi.class);
317 builder.setVirtualNetworkId(null);
318 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
319 return builder.build();
322 public static Rloc toRloc(Ipv6AddressBinary address) {
323 RlocBuilder builder = new RlocBuilder();
324 builder.setAddressType(Ipv6BinaryAfi.class);
325 builder.setVirtualNetworkId(null);
326 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
327 return builder.build();
330 public static Rloc asIpv4Rloc(String address) {
331 return toRloc(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()));
334 public static Rloc asIpv6Rloc(String address) {
335 return toRloc(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()));
338 public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) {
339 EidBuilder builder = new EidBuilder();
340 builder.setAddressType(Ipv4PrefixAfi.class);
341 builder.setVirtualNetworkId(vni);
342 builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
343 return builder.build();
346 public static Eid toEid(Ipv4PrefixBinary prefix, InstanceIdType vni) {
347 EidBuilder builder = new EidBuilder();
348 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
349 builder.setVirtualNetworkId(vni);
350 builder.setAddress((Address) prefix);
351 return builder.build();
354 public static Eid toEid(Ipv6PrefixBinary prefix, InstanceIdType vni) {
355 EidBuilder builder = new EidBuilder();
356 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
357 builder.setVirtualNetworkId(vni);
358 builder.setAddress((Address) prefix);
359 return builder.build();
362 public static Eid toEid(Ipv4Address address, InstanceIdType vni) {
363 EidBuilder builder = new EidBuilder();
364 builder.setAddressType(Ipv4Afi.class);
365 builder.setVirtualNetworkId(vni);
366 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
367 return builder.build();
370 public static Eid toEid(Ipv4AddressBinary address, InstanceIdType vni) {
371 EidBuilder builder = new EidBuilder();
372 builder.setAddressType(Ipv4BinaryAfi.class);
373 builder.setVirtualNetworkId(vni);
374 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
375 return builder.build();
378 public static Eid toEid(IpPrefix prefix, InstanceIdType vni) {
379 EidBuilder builder = new EidBuilder();
380 builder.setAddress(addressFromIpPrefix(prefix));
381 builder.setAddressType(addressTypeFromIpPrefix(prefix));
382 builder.setVirtualNetworkId(vni);
383 return builder.build();
386 public static Eid toEid(Ipv6Address address, InstanceIdType vni) {
387 EidBuilder builder = new EidBuilder();
388 builder.setAddressType(Ipv6Afi.class);
389 builder.setVirtualNetworkId(vni);
390 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
391 return builder.build();
394 public static Eid toEid(Ipv6AddressBinary address, InstanceIdType vni) {
395 EidBuilder builder = new EidBuilder();
396 builder.setAddressType(Ipv6BinaryAfi.class);
397 builder.setVirtualNetworkId(vni);
398 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
399 return builder.build();
402 public static Eid toEid(DistinguishedNameType dn, InstanceIdType vni) {
403 EidBuilder builder = new EidBuilder();
404 builder.setAddressType(DistinguishedNameAfi.class);
405 builder.setVirtualNetworkId(vni);
406 builder.setAddress((Address) new DistinguishedNameBuilder().setDistinguishedName(dn).build());
407 return builder.build();
410 public static Eid toEid(MacAddress mac, InstanceIdType vni) {
411 EidBuilder builder = new EidBuilder();
412 builder.setAddressType(MacAfi.class);
413 builder.setVirtualNetworkId(vni);
414 builder.setAddress((Address) new MacBuilder().setMac(mac).build());
415 return builder.build();
418 public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) {
419 EidBuilder builder = new EidBuilder();
420 builder.setAddressType(Ipv6PrefixAfi.class);
421 builder.setVirtualNetworkId(vni);
422 builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
423 return builder.build();
426 // XXX getMapping rcp fails if VNI set to 0
427 public static Eid toEidNoVni(IpPrefix prefix) {
428 EidBuilder builder = new EidBuilder();
429 builder.setAddress(addressFromIpPrefix(prefix));
430 builder.setAddressType(addressTypeFromIpPrefix(prefix));
431 return builder.build();
434 public static Eid toIpPrefixEid(IpAddress addr, int vni) {
435 // If you touch this, be sure that sfclisp compiles!
436 int mask = addressTypeFromIpAddress(addr) == Ipv4Afi.class ? 32 : 128;
437 IpPrefix prefix = asIpPrefix(String.valueOf(addr.getValue()), mask);
438 // XXX getMapping rcp fails if VNI set to 0
439 return toEidNoVni(prefix);
442 public static Eid asEid(SimpleAddress address, InstanceIdType vni) {
443 EidBuilder builder = new EidBuilder();
444 builder.setAddressType(addressTypeFromSimpleAddress(address));
445 builder.setVirtualNetworkId(vni);
446 // XXX Not sure if the below actually works as expected... also, what happens to AFI?
447 builder.setAddress(addressFromSimpleAddress(address));
448 return builder.build();
451 public static Eid asIpv4PrefixEid(String prefix) {
452 return asIpv4PrefixEid(prefix, null);
455 public static Eid asIpv4PrefixEid(Ipv4Address addr, InstanceIdType vni) {
456 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(addr)), vni);
459 public static Eid asIpv4PrefixEid(final String prefix, final InstanceIdType iiType) {
460 return toEid(new Ipv4Prefix(prefix), iiType);
463 public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) {
464 EidBuilder builder = new EidBuilder();
465 builder.setAddressType(Ipv4PrefixAfi.class);
466 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
467 builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(
468 IetfInetUtil.INSTANCE.ipv4PrefixFor(address, mask)).build());
469 return builder.build();
472 public static Eid asIpv4PrefixBinaryEid(final String prefix) {
473 return asIpv4PrefixBinaryEid(prefix, null);
476 public static Eid asIpv4PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
477 String address = MaskUtil.getPrefixAddress(prefix);
478 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
479 byte[] ipv4 = InetAddresses.forString(address).getAddress();
480 return toEid(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(ipv4))
481 .setIpv4MaskLength(mask).build(), iiType);
484 public static Eid asIpv4PrefixBinaryEid(Eid eid, byte[] address, short mask) {
485 Preconditions.checkArgument(address.length == 4,
486 "asIpv4PrefixBinaryEid called with incorrect length byte array ({})", address.length);
487 EidBuilder builder = new EidBuilder();
488 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
489 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
490 builder.setAddress(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(address))
491 .setIpv4MaskLength(mask).build());
492 return builder.build();
495 public static Eid asIpv4Eid(String address) {
496 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), null);
499 public static Eid asIpv4Eid(String address, long vni) {
500 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
503 public static Eid asIpv6Eid(String address) {
504 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), null);
507 public static Eid asIpv6Eid(String address, long vni) {
508 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
511 public static Eid asIpv6PrefixEid(String prefix) {
512 return toEid(new Ipv6Prefix(prefix), null);
515 public static Eid asIpv6PrefixEid(Ipv6Address addr, InstanceIdType vni) {
516 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(addr)), vni);
519 public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) {
520 EidBuilder builder = new EidBuilder();
521 builder.setAddressType(Ipv6PrefixAfi.class);
522 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
523 builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(
524 IetfInetUtil.INSTANCE.ipv6PrefixFor(address, mask)).build());
525 return builder.build();
528 public static Eid asIpv6PrefixBinaryEid(final String prefix) {
529 return asIpv6PrefixBinaryEid(prefix, null);
532 public static Eid asIpv6PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
533 String address = MaskUtil.getPrefixAddress(prefix);
534 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
535 byte[] ipv6 = InetAddresses.forString(address).getAddress();
536 return toEid(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(ipv6))
537 .setIpv6MaskLength(mask).build(), iiType);
540 public static Eid asIpv6PrefixBinaryEid(Eid eid, byte[] address, short mask) {
541 Preconditions.checkArgument(address.length == 16,
542 "asIpv6PrefixBinaryEid called with incorrect length byte array ({})", address.length);
543 EidBuilder builder = new EidBuilder();
544 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
545 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
546 builder.setAddress(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(address))
547 .setIpv6MaskLength(mask).build());
548 return builder.build();
551 public static Eid asBinaryEid(SimpleAddress address, InstanceIdType iid) {
552 if (address.getIpPrefix() != null) {
553 if (address.getIpPrefix().getIpv4Prefix() != null) {
554 return LispAddressUtil.asIpv4PrefixBinaryEid(address.getIpPrefix().getIpv4Prefix().getValue(), iid);
555 } else if (address.getIpPrefix().getIpv6Prefix() != null) {
556 return LispAddressUtil.asIpv6PrefixBinaryEid(address.getIpPrefix().getIpv6Prefix().getValue(), iid);
558 } else if (address.getIpAddress() != null) {
559 if (address.getIpAddress().getIpv4Address() != null) {
560 LispAddressUtil.toEid(new Ipv4AddressBinary(InetAddresses.forString(
561 address.getIpAddress().getIpv4Address().getValue()).getAddress()), iid);
562 } else if (address.getIpAddress().getIpv6Address() != null) {
563 LispAddressUtil.toEid(new Ipv6AddressBinary(InetAddresses.forString(
564 address.getIpAddress().getIpv6Address().getValue()).getAddress()), iid);
567 return LispAddressUtil.asEid(address, iid);
570 public static Eid asIpPrefixBinaryEid(Eid eid) {
571 Address address = eid.getAddress();
572 if (address instanceof Ipv4Binary) {
573 return LispAddressUtil.asIpv4PrefixBinaryEid(eid, ((Ipv4Binary) address).getIpv4Binary().getValue(),
575 } else if (address instanceof Ipv6Binary) {
576 return LispAddressUtil.asIpv6PrefixBinaryEid(eid, ((Ipv6Binary) address).getIpv6Binary().getValue(),
578 } else if (address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
580 } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
581 .types.rev151105.lisp.address.address.Ipv4) {
582 return LispAddressUtil.asIpv4PrefixBinaryEid(((Ipv4) address).getIpv4().getValue() + "/32",
583 eid.getVirtualNetworkId());
584 } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
585 .types.rev151105.lisp.address.address.Ipv6) {
586 return LispAddressUtil.asIpv6PrefixBinaryEid(((Ipv6) address).getIpv6().getValue() + "/128",
587 eid.getVirtualNetworkId());
589 return convertToBinary(eid);
592 public static int ipVersionFromString(String ip) {
593 if (IP4_PATTERN.matcher(ip).matches()) {
595 } else if (IP6_PATTERN.matcher(ip).matches()) {
602 public static IpPrefix asIpPrefix(String addr, int mask) {
603 int version = ipVersionFromString(addr);
604 if (version == 4 && (mask >= 0 && mask <= 32)) {
605 return new IpPrefix(new Ipv4Prefix(addr + "/" + mask));
606 } else if (version == 6 && (mask >= 0 && mask <= 128)) {
607 return new IpPrefix(new Ipv6Prefix(addr + "/" + mask));
613 public static Eid asServicePathEid(long vni, long servicePathId, short serviceIndex) {
614 EidBuilder eb = new EidBuilder();
615 eb.setAddressType(ServicePathLcaf.class);
617 eb.setVirtualNetworkId(new InstanceIdType(vni));
619 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
620 .lisp.address.address.service.path.ServicePathBuilder spb =
621 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
622 .lisp.address.address.service.path.ServicePathBuilder();
623 spb.setServicePathId(new ServicePathIdType(servicePathId));
624 spb.setServiceIndex(serviceIndex);
625 return eb.setAddress(addressFromServicePath(spb.build())).build();
628 public static Eid asMacEid(String address, long vni) {
629 return toEid(new MacAddress(address), new InstanceIdType(vni));
632 public static Eid asMacEid(String address) {
633 return toEid(new MacAddress(address), null);
636 public static Eid asDistinguishedNameEid(String address, long vni) {
637 return toEid(new MacAddress(address), new InstanceIdType(vni));
640 public static Eid asDistinguishedNameEid(String address) {
641 return toEid(new DistinguishedNameType(address), null);
644 public static Eid asKeyValueAddressEid(SimpleAddress key, SimpleAddress value) {
645 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
647 kvab.setValue(value);
648 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
649 .rev151105.lisp.address.address.KeyValueAddressBuilder()
650 .setKeyValueAddress(kvab.build()).build();
651 EidBuilder builder = new EidBuilder();
652 builder.setAddressType(KeyValueAddressLcaf.class);
653 builder.setVirtualNetworkId(null);
654 builder.setAddress((Address) address);
655 return builder.build();
658 public static Rloc asKeyValueAddressRloc(SimpleAddress key, SimpleAddress value) {
659 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
661 kvab.setValue(value);
662 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
663 .rev151105.lisp.address.address.KeyValueAddressBuilder()
664 .setKeyValueAddress(kvab.build()).build();
665 RlocBuilder builder = new RlocBuilder();
666 builder.setAddressType(KeyValueAddressLcaf.class);
667 builder.setVirtualNetworkId(null);
668 builder.setAddress((Address) address);
669 return builder.build();
672 public static Rloc asKeyValueAddress(String key, SimpleAddress value) {
673 return asKeyValueAddressRloc(new SimpleAddress(new DistinguishedNameType(key)), value);
676 public static SourceDestKey asSrcDst(String src, String dst, int smask, int dmask) {
677 SourceDestKeyBuilder builder = new SourceDestKeyBuilder();
678 builder.setSource(new SimpleAddress(asIpPrefix(src, smask)));
679 builder.setDest(new SimpleAddress(asIpPrefix(dst, dmask)));
680 return builder.build();
683 public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, int vni) {
684 EidBuilder builder = new EidBuilder();
685 builder.setAddressType(SourceDestKeyLcaf.class);
686 builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
688 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
689 .lisp.address.address.SourceDestKeyBuilder()
690 .setSourceDestKey(asSrcDst(src, dst, smask, dmask)).build());
692 return builder.build();
695 public static Eid asSrcDstEid(SourceDestKey sd, InstanceIdType vni) {
696 EidBuilder builder = new EidBuilder();
697 builder.setAddressType(SourceDestKeyLcaf.class);
698 builder.setVirtualNetworkId(vni);
699 builder.setAddress(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
700 .rev151105.lisp.address.address.SourceDestKeyBuilder().setSourceDestKey(sd).build());
701 return builder.build();
704 public static Rloc asTeLcafRloc(List<IpAddress> hopList) {
705 ExplicitLocatorPathBuilder teAddrBuilder = new ExplicitLocatorPathBuilder();
706 teAddrBuilder.setHop(new ArrayList<Hop>());
707 for (IpAddress hop : hopList) {
708 HopBuilder hopBuilder = new HopBuilder();
709 hopBuilder.setAddress(new SimpleAddress(hop));
710 hopBuilder.setHopId("Hop " + teAddrBuilder.getHop().size());
711 hopBuilder.setLrsBits(new LrsBits(false, false, false));
712 teAddrBuilder.getHop().add(hopBuilder.build());
715 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
716 .lisp.address.address.ExplicitLocatorPathBuilder elpBuilder =
717 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
718 .lisp.address.address.ExplicitLocatorPathBuilder();
719 elpBuilder.setExplicitLocatorPath(teAddrBuilder.build());
721 RlocBuilder teBuilder = new RlocBuilder();
722 teBuilder.setAddress(elpBuilder.build());
723 teBuilder.setAddressType(ExplicitLocatorPathLcaf.class);
724 return teBuilder.build();
727 public static List<LocatorRecord> asLocatorRecords(List<Rloc> locators) {
728 List<LocatorRecord> locatorRecords = new ArrayList<LocatorRecord>();
729 for (Rloc locator : locators) {
730 LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder();
731 locatorBuilder.setLocalLocator(false).setRlocProbed(false).setWeight((short) 1).setPriority((short) 1)
732 .setMulticastWeight((short) 1).setMulticastPriority((short) 1).setRouted(true)
733 .setRloc(locator).setLocatorId("SFC_LISP").build();
734 locatorRecords.add(locatorBuilder.build());
736 return locatorRecords;
739 public static Eid getNoAddressEid() {
740 EidBuilder builder = new EidBuilder();
741 builder.setAddressType(NoAddressAfi.class);
742 builder.setVirtualNetworkId(null);
743 builder.setAddress(new NoAddressBuilder().setNoAddress(true).build());
744 return builder.build();
747 public static byte[] ipAddressToByteArray(Address addr) {
748 if (addr instanceof Ipv4) {
749 return InetAddresses.forString(((Ipv4) addr).getIpv4().getValue()).getAddress();
750 } else if (addr instanceof Ipv6) {
751 return InetAddresses.forString(((Ipv6) addr).getIpv6().getValue()).getAddress();
752 } else if (addr instanceof Ipv4Binary) {
753 return ((Ipv4Binary) addr).getIpv4Binary().getValue();
754 } else if (addr instanceof Ipv6Binary) {
755 return ((Ipv6Binary) addr).getIpv6Binary().getValue();
761 private static Ipv4PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
762 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix prefix) {
763 Ipv4PrefixBinaryBuilder pb = new Ipv4PrefixBinaryBuilder();
764 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv4Prefix(prefix)).getAddress();
765 pb.setIpv4AddressBinary(new Ipv4AddressBinary(address));
766 pb.setIpv4MaskLength(MaskUtil.getMaskForAddress(prefix));
770 private static Ipv6PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
771 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix prefix) {
772 Ipv6PrefixBinaryBuilder pb = new Ipv6PrefixBinaryBuilder();
773 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv6Prefix(prefix)).getAddress();
774 pb.setIpv6AddressBinary(new Ipv6AddressBinary(address));
775 pb.setIpv6MaskLength(MaskUtil.getMaskForAddress(prefix));
779 private static Ipv4Binary convertToBinary(Ipv4 address) {
780 byte[] addr = InetAddresses.forString(address.getIpv4().getValue()).getAddress();
781 return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(addr)).build();
784 private static Ipv6Binary convertToBinary(Ipv6 address) {
785 byte[] addr = InetAddresses.forString(address.getIpv6().getValue()).getAddress();
786 return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(addr)).build();
789 private static Pair<Class<? extends LispAddressFamily>, Address> convertToBinary(Address addr) {
790 Address convAddr = null;
791 Class<? extends LispAddressFamily> convType = null;
792 if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
793 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) {
794 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
795 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) addr);
796 convType = Ipv4PrefixBinaryAfi.class;
797 } else if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
798 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
799 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
800 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) addr);
801 convType = Ipv6PrefixBinaryAfi.class;
802 } else if (addr instanceof Ipv4) {
803 convAddr = convertToBinary((Ipv4) addr);
804 convType = Ipv4BinaryAfi.class;
805 } else if (addr instanceof Ipv6) {
806 convAddr = convertToBinary((Ipv6) addr);
807 convType = Ipv6BinaryAfi.class;
809 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
812 public static Eid convertToBinary(Eid eid) {
813 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(eid.getAddress());
814 if (converted.getRight() == null) {
817 EidBuilder eb = new EidBuilder(eid);
818 eb.setAddressType(converted.getLeft());
819 eb.setAddress(converted.getRight());
823 public static Rloc convertToBinary(Rloc rloc) {
824 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(rloc.getAddress());
825 if (converted.getRight() == null) {
828 RlocBuilder rb = new RlocBuilder(rloc);
829 rb.setAddressType(converted.getLeft());
830 rb.setAddress(converted.getRight());
835 * Converts the {@link InetAddress} into Ipv4 or Ipv6 {@link IpAddressBinary}. If null parameter is passed, method
836 * returns the Ipv4 loopback address (127.0.0.1).
838 * @param inetAddress Any Ipv4 or Ipv6 InetAddress.
839 * @return The converted Ipv4 or Ipv6 IpAddressBinary, or Ipv4 loopback address (127.0.0.1) if null is passed.
841 public static IpAddressBinary addressBinaryFromInet(InetAddress inetAddress) {
842 if (inetAddress == null) {
843 inetAddress = Inet4Address.getLoopbackAddress();
846 if (inetAddress instanceof Inet4Address) {
847 return new IpAddressBinary(new Ipv4AddressBinary(inetAddress.getAddress()));
848 } else if (inetAddress instanceof Inet6Address) {
849 return new IpAddressBinary(new Ipv6AddressBinary(inetAddress.getAddress()));
854 public static IpAddressBinary addressBinaryFromAddress(Address address) {
855 if (address instanceof Ipv4Binary) {
856 return new IpAddressBinary(((Ipv4Binary) address).getIpv4Binary());
857 } else if (address instanceof Ipv6Binary) {
858 return new IpAddressBinary(((Ipv6Binary) address).getIpv6Binary());
863 public static List<IpAddressBinary> addressBinariesFromItrRlocs(List<ItrRloc> itrRlocs) {
864 List<IpAddressBinary> ipAddressBinaryList = Lists.newArrayList();
865 for (ItrRloc itrRloc : itrRlocs) {
866 ipAddressBinaryList.add(addressBinaryFromAddress(itrRloc.getRloc().getAddress()));
868 return ipAddressBinaryList;
871 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
872 .lisp.address.address.Ipv4Prefix convertFromBinary(Ipv4PrefixBinary prefix) {
873 return new Ipv4PrefixBuilder().setIpv4Prefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(
874 prefix.getIpv4AddressBinary().getValue(),
875 prefix.getIpv4MaskLength())).build();
878 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
879 .lisp.address.address.Ipv6Prefix convertFromBinary(Ipv6PrefixBinary prefix) {
880 return new Ipv6PrefixBuilder().setIpv6Prefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(
881 prefix.getIpv6AddressBinary().getValue(),
882 prefix.getIpv6MaskLength())).build();
885 private static Ipv4 convertFromBinary(Ipv4Binary address) {
886 return new Ipv4Builder().setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address.getIpv4Binary().getValue()))
890 private static Ipv6 convertFromBinary(Ipv6Binary address) {
891 return new Ipv6Builder().setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address.getIpv6Binary().getValue()))
895 private static Pair<Class<? extends LispAddressFamily>, Address> convertFromBinary(Address addr) {
896 Address convAddr = null;
897 Class<? extends LispAddressFamily> convType = null;
898 if (addr instanceof Ipv4PrefixBinary) {
899 convAddr = convertFromBinary((Ipv4PrefixBinary) addr);
900 convType = Ipv4PrefixAfi.class;
901 } else if (addr instanceof Ipv6PrefixBinary) {
902 convAddr = convertFromBinary((Ipv6PrefixBinary) addr);
903 convType = Ipv6PrefixAfi.class;
904 } else if (addr instanceof Ipv4Binary) {
905 convAddr = convertFromBinary((Ipv4Binary) addr);
906 convType = Ipv4Afi.class;
907 } else if (addr instanceof Ipv6Binary) {
908 convAddr = convertFromBinary((Ipv6Binary) addr);
909 convType = Ipv6Afi.class;
911 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
914 public static Eid convertFromBinary(Eid eid) {
915 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(eid.getAddress());
916 if (converted.getRight() == null) {
919 EidBuilder eb = new EidBuilder(eid);
920 eb.setAddressType(converted.getLeft());
921 eb.setAddress(converted.getRight());
925 public static Rloc convertFromBinary(Rloc rloc) {
926 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(rloc.getAddress());
927 if (converted.getRight() == null) {
930 RlocBuilder rb = new RlocBuilder(rloc);
931 rb.setAddressType(converted.getLeft());
932 rb.setAddress(converted.getRight());
936 public static boolean addressNeedsConversionToBinary(Address address) {
937 if (address instanceof Ipv4 || address instanceof Ipv6
938 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
939 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix
940 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
941 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
947 public static boolean addressNeedsConversionFromBinary(Address address) {
948 if (address instanceof Ipv4Binary || address instanceof Ipv6Binary
949 || address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
955 public static int compareIpAddressByteArrays(byte[] one, byte[] two) {
956 if (one.length < two.length) {
958 } else if (one.length > two.length) {
960 } else if (one.length == 4 && two.length == 4) {
961 for (int i = 0; i < 4; i++) {
962 if (one[i] < two[i]) {
964 } else if (one[i] > two[i]) {
969 } else if (one.length == 16 && two.length == 16) {
970 for (int i = 0; i < 16; i++) {
971 if (one[i] < two[i]) {
973 } else if (one[i] > two[i]) {
982 public static short getIpPrefixMask(Eid eid) {
983 Address addr = eid.getAddress();
984 if (addr instanceof Ipv4PrefixBinary) {
985 return ((Ipv4PrefixBinary) addr).getIpv4MaskLength();
986 } else if (addr instanceof Ipv6PrefixBinary) {
987 return ((Ipv6PrefixBinary) addr).getIpv6MaskLength();