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.net.InetAddresses;
12 import java.net.Inet4Address;
13 import java.net.Inet6Address;
14 import java.net.InetAddress;
15 import java.util.ArrayList;
16 import java.util.List;
17 import java.util.regex.Pattern;
18 import org.apache.commons.lang3.tuple.ImmutablePair;
19 import org.apache.commons.lang3.tuple.Pair;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AsNumberAfi;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathLcaf;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumberBuilder;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePathBuilder;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.ExplicitLocatorPathBuilder;
59 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;
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.LrsBits;
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.HopBuilder;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePath;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKey;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder;
66 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv6AddressBinary;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4BinaryAfi;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4PrefixBinaryAfi;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6BinaryAfi;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6PrefixBinaryAfi;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4BinaryBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinary;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinaryBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6BinaryBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinary;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinaryBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
88 import org.opendaylight.yangtools.yang.common.Empty;
89 import org.slf4j.Logger;
90 import org.slf4j.LoggerFactory;
92 public final class LispAddressUtil {
93 protected static final Logger LOG = LoggerFactory.getLogger(LispAddressUtil.class);
95 public static final short STARTING_SERVICE_INDEX = 255;
96 private static final Pattern IP4_PATTERN =
97 Pattern.compile("(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])",
98 Pattern.CASE_INSENSITIVE);
99 private static final Pattern IP6_PATTERN =
100 Pattern.compile("([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}", Pattern.CASE_INSENSITIVE);
102 // Utility class, should not be instantiated
103 private LispAddressUtil() {
106 public static Class<? extends LispAddressFamily> addressTypeFromSimpleAddress(SimpleAddress address) {
107 if (address.getIpAddress() != null) {
108 return binaryAddressTypeFromIpAddress(address.getIpAddress());
109 } else if (address.getIpPrefix() != null) {
110 return addressTypeFromIpPrefix(address.getIpPrefix());
111 } else if (address.getMacAddress() != null) {
113 } else if (address.getDistinguishedNameType() != null) {
114 return DistinguishedNameAfi.class;
115 } else if (address.getAsNumber() != null) {
116 return AsNumberAfi.class;
121 public static Address addressFromSimpleAddress(SimpleAddress address) {
122 if (address.getIpAddress() != null) {
123 return binaryAddressFromIpAddress(address.getIpAddress());
124 } else if (address.getIpPrefix() != null) {
125 return addressFromIpPrefix(address.getIpPrefix());
126 } else if (address.getMacAddress() != null) {
127 return addressFromMacAddress(address.getMacAddress());
128 } else if (address.getDistinguishedNameType() != null) {
129 return addressFromDistinguishedName(address.getDistinguishedNameType());
130 } else if (address.getAsNumber() != null) {
131 return addressFromAsNumber(address.getAsNumber());
136 public static Class<? extends LispAddressFamily> addressTypeFromInet(InetAddress address) {
137 if (address instanceof Inet4Address) {
138 return Ipv4Afi.class;
139 } else if (address instanceof Inet6Address) {
140 return Ipv6Afi.class;
145 public static Address addressFromInet(InetAddress address) {
146 if (address instanceof Inet4Address) {
147 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
148 .rev151105.lisp.address.address.Ipv4Builder()
149 .setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address)).build();
150 } else if (address instanceof Inet6Address) {
151 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
152 .rev151105.lisp.address.address.Ipv6Builder()
153 .setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address)).build();
158 public static Class<? extends LispAddressFamily> binaryAddressTypeFromInet(InetAddress address) {
159 if (address instanceof Inet4Address) {
160 return Ipv4BinaryAfi.class;
161 } else if (address instanceof Inet6Address) {
162 return Ipv6BinaryAfi.class;
167 public static Address binaryAddressFromInet(InetAddress address) {
168 if (address instanceof Inet4Address) {
169 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(address.getAddress())).build();
170 } else if (address instanceof Inet6Address) {
171 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(address.getAddress())).build();
176 public static Class<? extends LispAddressFamily> addressTypeFromIpAddress(IpAddress address) {
177 if (address == null) {
179 } else if (address.getIpv4Address() != null) {
180 return Ipv4Afi.class;
181 } else if (address.getIpv6Address() != null) {
182 return Ipv6Afi.class;
187 public static Class<? extends LispAddressFamily> binaryAddressTypeFromIpAddress(IpAddress address) {
188 if (address == null) {
190 } else if (address.getIpv4Address() != null) {
191 return Ipv4BinaryAfi.class;
192 } else if (address.getIpv6Address() != null) {
193 return Ipv6BinaryAfi.class;
198 public static Address addressFromIpAddress(IpAddress address) {
199 if (address == null) {
201 } else if (address.getIpv4Address() != null) {
202 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
203 .rev151105.lisp.address.address.Ipv4Builder().setIpv4(address.getIpv4Address()).build();
204 } else if (address.getIpv6Address() != null) {
205 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
206 .rev151105.lisp.address.address.Ipv6Builder().setIpv6(address.getIpv6Address()).build();
212 public static Address binaryAddressFromIpAddress(IpAddress address) {
213 if (address == null) {
215 } else if (address.getIpv4Address() != null) {
216 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(
217 InetAddresses.forString(address.getIpv4Address().getValue()).getAddress())).build();
218 } else if (address.getIpv6Address() != null) {
219 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(
220 InetAddresses.forString(address.getIpv6Address().getValue()).getAddress())).build();
225 public static Class<? extends LispAddressFamily> addressTypeFromIpPrefix(IpPrefix address) {
226 if (address == null) {
228 } else if (address.getIpv4Prefix() != null) {
229 return Ipv4PrefixAfi.class;
230 } else if (address.getIpv6Prefix() != null) {
231 return Ipv6PrefixAfi.class;
236 public static Address addressFromIpPrefix(IpPrefix address) {
237 if (address == null) {
239 } else if (address.getIpv4Prefix() != null) {
240 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
241 .rev151105.lisp.address.address.Ipv4PrefixBuilder().setIpv4Prefix(address.getIpv4Prefix()).build();
242 } else if (address.getIpv6Prefix() != null) {
243 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
244 .rev151105.lisp.address.address.Ipv6PrefixBuilder().setIpv6Prefix(address.getIpv6Prefix()).build();
249 public static Address addressFromMacAddress(MacAddress address) {
250 if (address == null) {
253 return (Address) new MacBuilder().setMac(address).build();
257 public static Address addressFromServicePath(ServicePath address) {
258 if (address == null) {
261 return (Address) new ServicePathBuilder().setServicePath(address).build();
265 public static Address addressFromDistinguishedName(DistinguishedNameType address) {
266 if (address == null) {
269 return (Address) new DistinguishedNameBuilder().setDistinguishedName(address).build();
273 public static Address addressFromAsNumber(AsNumber address) {
274 if (address == null) {
277 return (Address) new AsNumberBuilder().setAsNumber(address).build();
281 public static Rloc toRloc(SimpleAddress address) {
282 RlocBuilder builder = new RlocBuilder();
283 builder.setAddressType(addressTypeFromSimpleAddress(address));
284 builder.setVirtualNetworkId(null);
285 builder.setAddress(addressFromSimpleAddress(address));
286 return builder.build();
289 public static Rloc toRloc(InetAddress address) {
290 RlocBuilder builder = new RlocBuilder();
291 builder.setAddressType(binaryAddressTypeFromInet(address));
292 builder.setVirtualNetworkId(null);
293 builder.setAddress(binaryAddressFromInet(address));
294 return builder.build();
297 public static Rloc toRloc(Ipv4Address address) {
298 RlocBuilder builder = new RlocBuilder();
299 builder.setAddressType(Ipv4Afi.class);
300 builder.setVirtualNetworkId(null);
301 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
302 return builder.build();
305 public static Rloc toRloc(Ipv4AddressBinary address) {
306 RlocBuilder builder = new RlocBuilder();
307 builder.setAddressType(Ipv4BinaryAfi.class);
308 builder.setVirtualNetworkId(null);
309 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
310 return builder.build();
313 public static Rloc toRloc(Ipv6Address address) {
314 RlocBuilder builder = new RlocBuilder();
315 builder.setAddressType(Ipv6Afi.class);
316 builder.setVirtualNetworkId(null);
317 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
318 return builder.build();
321 public static Rloc toRloc(Ipv6AddressBinary address) {
322 RlocBuilder builder = new RlocBuilder();
323 builder.setAddressType(Ipv6BinaryAfi.class);
324 builder.setVirtualNetworkId(null);
325 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
326 return builder.build();
329 public static Rloc asIpv4Rloc(String address) {
330 return toRloc(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()));
333 public static Rloc asIpv6Rloc(String address) {
334 return toRloc(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()));
337 public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) {
338 EidBuilder builder = new EidBuilder();
339 builder.setAddressType(Ipv4PrefixAfi.class);
340 builder.setVirtualNetworkId(vni);
341 builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
342 return builder.build();
345 public static Eid toEid(Ipv4PrefixBinary prefix, InstanceIdType vni) {
346 EidBuilder builder = new EidBuilder();
347 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
348 builder.setVirtualNetworkId(vni);
349 builder.setAddress((Address) prefix);
350 return builder.build();
353 public static Eid toEid(Ipv6PrefixBinary prefix, InstanceIdType vni) {
354 EidBuilder builder = new EidBuilder();
355 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
356 builder.setVirtualNetworkId(vni);
357 builder.setAddress((Address) prefix);
358 return builder.build();
361 public static Eid toEid(Ipv4Address address, InstanceIdType vni) {
362 EidBuilder builder = new EidBuilder();
363 builder.setAddressType(Ipv4Afi.class);
364 builder.setVirtualNetworkId(vni);
365 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
366 return builder.build();
369 public static Eid toEid(Ipv4AddressBinary address, InstanceIdType vni) {
370 EidBuilder builder = new EidBuilder();
371 builder.setAddressType(Ipv4BinaryAfi.class);
372 builder.setVirtualNetworkId(vni);
373 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
374 return builder.build();
377 public static Eid toEid(IpPrefix prefix, InstanceIdType vni) {
378 EidBuilder builder = new EidBuilder();
379 builder.setAddress(addressFromIpPrefix(prefix));
380 builder.setAddressType(addressTypeFromIpPrefix(prefix));
381 builder.setVirtualNetworkId(vni);
382 return builder.build();
385 public static Eid toEid(Ipv6Address address, InstanceIdType vni) {
386 EidBuilder builder = new EidBuilder();
387 builder.setAddressType(Ipv6Afi.class);
388 builder.setVirtualNetworkId(vni);
389 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
390 return builder.build();
393 public static Eid toEid(Ipv6AddressBinary address, InstanceIdType vni) {
394 EidBuilder builder = new EidBuilder();
395 builder.setAddressType(Ipv6BinaryAfi.class);
396 builder.setVirtualNetworkId(vni);
397 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
398 return builder.build();
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 toEid(MacAddress mac, InstanceIdType vni) {
410 EidBuilder builder = new EidBuilder();
411 builder.setAddressType(MacAfi.class);
412 builder.setVirtualNetworkId(vni);
413 builder.setAddress((Address) new MacBuilder().setMac(mac).build());
414 return builder.build();
417 public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) {
418 EidBuilder builder = new EidBuilder();
419 builder.setAddressType(Ipv6PrefixAfi.class);
420 builder.setVirtualNetworkId(vni);
421 builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
422 return builder.build();
425 // XXX getMapping rcp fails if VNI set to 0
426 public static Eid toEidNoVni(IpPrefix prefix) {
427 EidBuilder builder = new EidBuilder();
428 builder.setAddress(addressFromIpPrefix(prefix));
429 builder.setAddressType(addressTypeFromIpPrefix(prefix));
430 return builder.build();
433 public static Eid toIpPrefixEid(IpAddress addr, int vni) {
434 // If you touch this, be sure that sfclisp compiles!
435 int mask = addressTypeFromIpAddress(addr) == Ipv4Afi.class ? 32 : 128;
436 IpPrefix prefix = asIpPrefix(addr.stringValue(), mask);
437 // XXX getMapping rcp fails if VNI set to 0
438 return toEidNoVni(prefix);
441 public static Eid asEid(SimpleAddress address, InstanceIdType vni) {
442 EidBuilder builder = new EidBuilder();
443 builder.setAddressType(addressTypeFromSimpleAddress(address));
444 builder.setVirtualNetworkId(vni);
445 // XXX Not sure if the below actually works as expected... also, what happens to AFI?
446 builder.setAddress(addressFromSimpleAddress(address));
447 return builder.build();
450 public static Eid asIpv4PrefixEid(String prefix) {
451 return asIpv4PrefixEid(prefix, null);
454 public static Eid asIpv4PrefixEid(Ipv4Address addr, InstanceIdType vni) {
455 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(addr)), vni);
458 public static Eid asIpv4PrefixEid(final String prefix, final InstanceIdType iiType) {
459 return toEid(new Ipv4Prefix(prefix), iiType);
462 public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) {
463 EidBuilder builder = new EidBuilder();
464 builder.setAddressType(Ipv4PrefixAfi.class);
465 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
466 builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(
467 IetfInetUtil.INSTANCE.ipv4PrefixFor(address, mask)).build());
468 return builder.build();
471 public static Eid asIpv4PrefixBinaryEid(final String prefix) {
472 return asIpv4PrefixBinaryEid(prefix, null);
475 public static Eid asIpv4PrefixBinaryEid(long vni, final String prefix) {
476 InstanceIdType iid = new InstanceIdType(vni);
477 return asIpv4PrefixBinaryEid(prefix, iid);
480 public static Eid asIpv4PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
481 String address = MaskUtil.getPrefixAddress(prefix);
482 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
483 byte[] ipv4 = InetAddresses.forString(address).getAddress();
484 return toEid(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(ipv4))
485 .setIpv4MaskLength(mask).build(), iiType);
488 public static Eid asIpv4PrefixBinaryEid(Eid eid, byte[] address, short mask) {
489 return asIpv4PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
492 public static Eid asIpv4PrefixBinaryEid(long vni, byte[] address, short mask) {
493 return asIpv4PrefixBinaryEid(new InstanceIdType(vni), address, mask);
496 public static Eid asIpv4PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
497 Preconditions.checkArgument(address.length == 4,
498 "asIpv4PrefixBinaryEid called with incorrect length byte array ({})", address.length);
499 EidBuilder builder = new EidBuilder();
500 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
501 builder.setVirtualNetworkId(vni);
502 builder.setAddress(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(address))
503 .setIpv4MaskLength(mask).build());
504 return builder.build();
507 public static Eid asIpv4Eid(String address) {
508 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), null);
511 public static Eid asIpv4Eid(String address, long vni) {
512 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
515 public static Eid asIpv6Eid(String address) {
516 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), null);
519 public static Eid asIpv6Eid(String address, long vni) {
520 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
523 public static Eid asIpv6PrefixEid(String prefix) {
524 return toEid(new Ipv6Prefix(prefix), null);
527 public static Eid asIpv6PrefixEid(Ipv6Address addr, InstanceIdType vni) {
528 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(addr)), vni);
531 public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) {
532 EidBuilder builder = new EidBuilder();
533 builder.setAddressType(Ipv6PrefixAfi.class);
534 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
535 builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(
536 IetfInetUtil.INSTANCE.ipv6PrefixFor(address, mask)).build());
537 return builder.build();
540 public static Eid asIpv6PrefixBinaryEid(final String prefix) {
541 return asIpv6PrefixBinaryEid(prefix, null);
544 public static Eid asIpv6PrefixBinaryEid(long vni, final String prefix) {
545 InstanceIdType iid = new InstanceIdType(vni);
546 return asIpv6PrefixBinaryEid(prefix, iid);
549 public static Eid asIpv6PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
550 String address = MaskUtil.getPrefixAddress(prefix);
551 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
552 byte[] ipv6 = InetAddresses.forString(address).getAddress();
553 return toEid(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(ipv6))
554 .setIpv6MaskLength(mask).build(), iiType);
557 public static Eid asIpv6PrefixBinaryEid(Eid eid, byte[] address, short mask) {
558 return asIpv6PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
561 public static Eid asIpv6PrefixBinaryEid(long vni, byte[] address, short mask) {
562 return asIpv6PrefixBinaryEid(new InstanceIdType(vni), address, mask);
565 public static Eid asIpv6PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
566 Preconditions.checkArgument(address.length == 16,
567 "asIpv6PrefixBinaryEid called with incorrect length byte array ({})", address.length);
568 EidBuilder builder = new EidBuilder();
569 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
570 builder.setVirtualNetworkId(vni);
571 builder.setAddress(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(address))
572 .setIpv6MaskLength(mask).build());
573 return builder.build();
576 public static Eid asBinaryEid(SimpleAddress address, InstanceIdType iid) {
577 if (address.getIpPrefix() != null) {
578 if (address.getIpPrefix().getIpv4Prefix() != null) {
579 return LispAddressUtil.asIpv4PrefixBinaryEid(address.getIpPrefix().getIpv4Prefix().getValue(), iid);
580 } else if (address.getIpPrefix().getIpv6Prefix() != null) {
581 return LispAddressUtil.asIpv6PrefixBinaryEid(address.getIpPrefix().getIpv6Prefix().getValue(), iid);
583 } else if (address.getIpAddress() != null) {
584 if (address.getIpAddress().getIpv4Address() != null) {
585 LispAddressUtil.toEid(new Ipv4AddressBinary(InetAddresses.forString(
586 address.getIpAddress().getIpv4Address().getValue()).getAddress()), iid);
587 } else if (address.getIpAddress().getIpv6Address() != null) {
588 LispAddressUtil.toEid(new Ipv6AddressBinary(InetAddresses.forString(
589 address.getIpAddress().getIpv6Address().getValue()).getAddress()), iid);
592 return LispAddressUtil.asEid(address, iid);
595 public static Eid asIpPrefixBinaryEid(Eid eid) {
596 Address address = eid.getAddress();
597 if (address instanceof Ipv4Binary) {
598 return LispAddressUtil.asIpv4PrefixBinaryEid(eid, ((Ipv4Binary) address).getIpv4Binary().getValue(),
600 } else if (address instanceof Ipv6Binary) {
601 return LispAddressUtil.asIpv6PrefixBinaryEid(eid, ((Ipv6Binary) address).getIpv6Binary().getValue(),
603 } else if (address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
605 } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
606 .types.rev151105.lisp.address.address.Ipv4) {
607 return LispAddressUtil.asIpv4PrefixBinaryEid(((Ipv4) address).getIpv4().getValue() + "/32",
608 eid.getVirtualNetworkId());
609 } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
610 .types.rev151105.lisp.address.address.Ipv6) {
611 return LispAddressUtil.asIpv6PrefixBinaryEid(((Ipv6) address).getIpv6().getValue() + "/128",
612 eid.getVirtualNetworkId());
614 return convertToBinary(eid);
617 public static int ipVersionFromString(String ip) {
618 if (IP4_PATTERN.matcher(ip).matches()) {
620 } else if (IP6_PATTERN.matcher(ip).matches()) {
627 public static IpPrefix asIpPrefix(String addr, int mask) {
628 int version = ipVersionFromString(addr);
629 if (version == 4 && (mask >= 0 && mask <= 32)) {
630 return new IpPrefix(new Ipv4Prefix(addr + "/" + mask));
631 } else if (version == 6 && (mask >= 0 && mask <= 128)) {
632 return new IpPrefix(new Ipv6Prefix(addr + "/" + mask));
638 public static Eid asServicePathEid(long vni, long servicePathId, short serviceIndex) {
639 EidBuilder eb = new EidBuilder();
640 eb.setAddressType(ServicePathLcaf.class);
642 eb.setVirtualNetworkId(new InstanceIdType(vni));
644 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
645 .lisp.address.address.service.path.ServicePathBuilder spb =
646 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
647 .lisp.address.address.service.path.ServicePathBuilder();
648 spb.setServicePathId(new ServicePathIdType(servicePathId));
649 spb.setServiceIndex(serviceIndex);
650 return eb.setAddress(addressFromServicePath(spb.build())).build();
653 public static Eid asMacEid(String address, long vni) {
654 return toEid(new MacAddress(address), new InstanceIdType(vni));
657 public static Eid asMacEid(String address) {
658 return toEid(new MacAddress(address), null);
661 public static Eid asDistinguishedNameEid(String address, long vni) {
662 return toEid(new MacAddress(address), new InstanceIdType(vni));
665 public static Eid asDistinguishedNameEid(String address) {
666 return toEid(new DistinguishedNameType(address), null);
669 public static Eid asKeyValueAddressEid(SimpleAddress key, SimpleAddress value) {
670 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
672 kvab.setValue(value);
673 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
674 .rev151105.lisp.address.address.KeyValueAddressBuilder()
675 .setKeyValueAddress(kvab.build()).build();
676 EidBuilder builder = new EidBuilder();
677 builder.setAddressType(KeyValueAddressLcaf.class);
678 builder.setVirtualNetworkId(null);
679 builder.setAddress((Address) address);
680 return builder.build();
683 public static Rloc asKeyValueAddressRloc(SimpleAddress key, SimpleAddress value) {
684 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
686 kvab.setValue(value);
687 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
688 .rev151105.lisp.address.address.KeyValueAddressBuilder()
689 .setKeyValueAddress(kvab.build()).build();
690 RlocBuilder builder = new RlocBuilder();
691 builder.setAddressType(KeyValueAddressLcaf.class);
692 builder.setVirtualNetworkId(null);
693 builder.setAddress((Address) address);
694 return builder.build();
697 public static Rloc asKeyValueAddress(String key, SimpleAddress value) {
698 return asKeyValueAddressRloc(new SimpleAddress(new DistinguishedNameType(key)), value);
701 public static SourceDestKey asSrcDst(String src, String dst, int smask, int dmask) {
702 SourceDestKeyBuilder builder = new SourceDestKeyBuilder();
703 builder.setSource(new SimpleAddress(asIpPrefix(src, smask)));
704 builder.setDest(new SimpleAddress(asIpPrefix(dst, dmask)));
705 return builder.build();
708 public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, long vni) {
709 EidBuilder builder = new EidBuilder();
710 builder.setAddressType(SourceDestKeyLcaf.class);
711 builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
713 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
714 .lisp.address.address.SourceDestKeyBuilder()
715 .setSourceDestKey(asSrcDst(src, dst, smask, dmask)).build());
717 return builder.build();
720 public static Eid asSrcDstEid(SourceDestKey sd, InstanceIdType vni) {
721 EidBuilder builder = new EidBuilder();
722 builder.setAddressType(SourceDestKeyLcaf.class);
723 builder.setVirtualNetworkId(vni);
724 builder.setAddress(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
725 .rev151105.lisp.address.address.SourceDestKeyBuilder().setSourceDestKey(sd).build());
726 return builder.build();
729 public static Rloc asTeLcafRloc(List<IpAddress> hopList) {
730 ExplicitLocatorPathBuilder teAddrBuilder = new ExplicitLocatorPathBuilder();
731 teAddrBuilder.setHop(new ArrayList<Hop>());
732 for (IpAddress hop : hopList) {
733 HopBuilder hopBuilder = new HopBuilder();
734 hopBuilder.setAddress(new SimpleAddress(hop));
735 hopBuilder.setHopId("Hop " + teAddrBuilder.getHop().size());
736 hopBuilder.setLrsBits(new LrsBits(false, false, false));
737 teAddrBuilder.getHop().add(hopBuilder.build());
740 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
741 .lisp.address.address.ExplicitLocatorPathBuilder elpBuilder =
742 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
743 .lisp.address.address.ExplicitLocatorPathBuilder();
744 elpBuilder.setExplicitLocatorPath(teAddrBuilder.build());
746 RlocBuilder teBuilder = new RlocBuilder();
747 teBuilder.setAddress(elpBuilder.build());
748 teBuilder.setAddressType(ExplicitLocatorPathLcaf.class);
749 return teBuilder.build();
752 public static List<LocatorRecord> asLocatorRecords(List<Rloc> locators) {
753 List<LocatorRecord> locatorRecords = new ArrayList<LocatorRecord>();
754 for (Rloc locator : locators) {
755 LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder();
756 locatorBuilder.setLocalLocator(false).setRlocProbed(false).setWeight((short) 1).setPriority((short) 1)
757 .setMulticastWeight((short) 1).setMulticastPriority((short) 1).setRouted(true)
758 .setRloc(locator).setLocatorId("SFC_LISP").build();
759 locatorRecords.add(locatorBuilder.build());
761 return locatorRecords;
764 public static Eid getNoAddressEid() {
765 EidBuilder builder = new EidBuilder();
766 builder.setAddressType(NoAddressAfi.class);
767 builder.setVirtualNetworkId(null);
768 builder.setAddress(new NoAddressBuilder().setNoAddress(Empty.getInstance()).build());
769 return builder.build();
772 public static byte[] ipAddressToByteArray(Address addr) {
773 if (addr instanceof Ipv4) {
774 return InetAddresses.forString(((Ipv4) addr).getIpv4().getValue()).getAddress();
775 } else if (addr instanceof Ipv6) {
776 return InetAddresses.forString(((Ipv6) addr).getIpv6().getValue()).getAddress();
777 } else if (addr instanceof Ipv4Binary) {
778 return ((Ipv4Binary) addr).getIpv4Binary().getValue();
779 } else if (addr instanceof Ipv6Binary) {
780 return ((Ipv6Binary) addr).getIpv6Binary().getValue();
786 private static Ipv4PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
787 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix prefix) {
788 Ipv4PrefixBinaryBuilder pb = new Ipv4PrefixBinaryBuilder();
789 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv4Prefix(prefix)).getAddress();
790 pb.setIpv4AddressBinary(new Ipv4AddressBinary(address));
791 pb.setIpv4MaskLength(MaskUtil.getMaskForAddress(prefix));
795 private static Ipv6PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
796 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix prefix) {
797 Ipv6PrefixBinaryBuilder pb = new Ipv6PrefixBinaryBuilder();
798 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv6Prefix(prefix)).getAddress();
799 pb.setIpv6AddressBinary(new Ipv6AddressBinary(address));
800 pb.setIpv6MaskLength(MaskUtil.getMaskForAddress(prefix));
804 private static Ipv4Binary convertToBinary(Ipv4 address) {
805 byte[] addr = InetAddresses.forString(address.getIpv4().getValue()).getAddress();
806 return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(addr)).build();
809 private static Ipv6Binary convertToBinary(Ipv6 address) {
810 byte[] addr = InetAddresses.forString(address.getIpv6().getValue()).getAddress();
811 return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(addr)).build();
814 private static Pair<Class<? extends LispAddressFamily>, Address> convertToBinary(Address addr) {
815 Address convAddr = null;
816 Class<? extends LispAddressFamily> convType = null;
817 if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
818 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) {
819 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
820 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) addr);
821 convType = Ipv4PrefixBinaryAfi.class;
822 } else if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
823 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
824 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
825 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) addr);
826 convType = Ipv6PrefixBinaryAfi.class;
827 } else if (addr instanceof Ipv4) {
828 convAddr = convertToBinary((Ipv4) addr);
829 convType = Ipv4BinaryAfi.class;
830 } else if (addr instanceof Ipv6) {
831 convAddr = convertToBinary((Ipv6) addr);
832 convType = Ipv6BinaryAfi.class;
834 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
837 public static Eid convertToBinary(Eid eid) {
838 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(eid.getAddress());
839 if (converted.getRight() == null) {
842 EidBuilder eb = new EidBuilder(eid);
843 eb.setAddressType(converted.getLeft());
844 eb.setAddress(converted.getRight());
848 public static Rloc convertToBinary(Rloc rloc) {
849 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(rloc.getAddress());
850 if (converted.getRight() == null) {
853 RlocBuilder rb = new RlocBuilder(rloc);
854 rb.setAddressType(converted.getLeft());
855 rb.setAddress(converted.getRight());
860 * Converts the {@link InetAddress} into Ipv4 or Ipv6 {@link IpAddressBinary}. If null parameter is passed, method
861 * returns the Ipv4 loopback address (127.0.0.1).
863 * @param inetAddress Any Ipv4 or Ipv6 InetAddress.
864 * @return The converted Ipv4 or Ipv6 IpAddressBinary, or Ipv4 loopback address (127.0.0.1) if null is passed.
866 public static IpAddressBinary addressBinaryFromInet(InetAddress inetAddress) {
867 if (inetAddress == null) {
868 inetAddress = Inet4Address.getLoopbackAddress();
871 if (inetAddress instanceof Inet4Address) {
872 return new IpAddressBinary(new Ipv4AddressBinary(inetAddress.getAddress()));
873 } else if (inetAddress instanceof Inet6Address) {
874 return new IpAddressBinary(new Ipv6AddressBinary(inetAddress.getAddress()));
879 public static IpAddressBinary addressBinaryFromAddress(Address address) {
880 if (address instanceof Ipv4Binary) {
881 return new IpAddressBinary(((Ipv4Binary) address).getIpv4Binary());
882 } else if (address instanceof Ipv6Binary) {
883 return new IpAddressBinary(((Ipv6Binary) address).getIpv6Binary());
888 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
889 .lisp.address.address.Ipv4Prefix convertFromBinary(Ipv4PrefixBinary prefix) {
890 return new Ipv4PrefixBuilder().setIpv4Prefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(
891 prefix.getIpv4AddressBinary().getValue(),
892 prefix.getIpv4MaskLength())).build();
895 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
896 .lisp.address.address.Ipv6Prefix convertFromBinary(Ipv6PrefixBinary prefix) {
897 return new Ipv6PrefixBuilder().setIpv6Prefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(
898 prefix.getIpv6AddressBinary().getValue(),
899 prefix.getIpv6MaskLength())).build();
902 private static Ipv4 convertFromBinary(Ipv4Binary address) {
903 return new Ipv4Builder().setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address.getIpv4Binary().getValue()))
907 private static Ipv6 convertFromBinary(Ipv6Binary address) {
908 return new Ipv6Builder().setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address.getIpv6Binary().getValue()))
912 private static Pair<Class<? extends LispAddressFamily>, Address> convertFromBinary(Address addr) {
913 Address convAddr = null;
914 Class<? extends LispAddressFamily> convType = null;
915 if (addr instanceof Ipv4PrefixBinary) {
916 convAddr = convertFromBinary((Ipv4PrefixBinary) addr);
917 convType = Ipv4PrefixAfi.class;
918 } else if (addr instanceof Ipv6PrefixBinary) {
919 convAddr = convertFromBinary((Ipv6PrefixBinary) addr);
920 convType = Ipv6PrefixAfi.class;
921 } else if (addr instanceof Ipv4Binary) {
922 convAddr = convertFromBinary((Ipv4Binary) addr);
923 convType = Ipv4Afi.class;
924 } else if (addr instanceof Ipv6Binary) {
925 convAddr = convertFromBinary((Ipv6Binary) addr);
926 convType = Ipv6Afi.class;
928 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
931 public static Eid convertFromBinary(Eid eid) {
932 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(eid.getAddress());
933 if (converted.getRight() == null) {
936 EidBuilder eb = new EidBuilder(eid);
937 eb.setAddressType(converted.getLeft());
938 eb.setAddress(converted.getRight());
942 public static Rloc convertFromBinary(Rloc rloc) {
943 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(rloc.getAddress());
944 if (converted.getRight() == null) {
947 RlocBuilder rb = new RlocBuilder(rloc);
948 rb.setAddressType(converted.getLeft());
949 rb.setAddress(converted.getRight());
953 public static boolean addressNeedsConversionToBinary(Address address) {
954 if (address instanceof Ipv4 || address instanceof Ipv6
955 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
956 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix
957 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
958 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
964 public static boolean addressNeedsConversionFromBinary(Address address) {
965 if (address instanceof Ipv4Binary || address instanceof Ipv6Binary
966 || address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
972 public static int compareIpAddressByteArrays(byte[] one, byte[] two) {
973 if (one.length < two.length) {
975 } else if (one.length > two.length) {
977 } else if (one.length == 4 && two.length == 4) {
978 for (int i = 0; i < 4; i++) {
979 if (one[i] < two[i]) {
981 } else if (one[i] > two[i]) {
986 } else if (one.length == 16 && two.length == 16) {
987 for (int i = 0; i < 16; i++) {
988 if (one[i] < two[i]) {
990 } else if (one[i] > two[i]) {
999 public static short getIpPrefixMask(Eid eid) {
1000 Address addr = eid.getAddress();
1001 if (addr instanceof Ipv4PrefixBinary) {
1002 return ((Ipv4PrefixBinary) addr).getIpv4MaskLength();
1003 } else if (addr instanceof Ipv6PrefixBinary) {
1004 return ((Ipv6PrefixBinary) addr).getIpv6MaskLength();