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.slf4j.Logger;
89 import org.slf4j.LoggerFactory;
91 public final class LispAddressUtil {
92 protected static final Logger LOG = LoggerFactory.getLogger(LispAddressUtil.class);
94 public static final short STARTING_SERVICE_INDEX = 255;
95 private static final Pattern IP4_PATTERN =
96 Pattern.compile("(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])",
97 Pattern.CASE_INSENSITIVE);
98 private static final Pattern IP6_PATTERN =
99 Pattern.compile("([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}", Pattern.CASE_INSENSITIVE);
101 // Utility class, should not be instantiated
102 private LispAddressUtil() {
105 public static Class<? extends LispAddressFamily> addressTypeFromSimpleAddress(SimpleAddress address) {
106 if (address.getIpAddress() != null) {
107 return binaryAddressTypeFromIpAddress(address.getIpAddress());
108 } else if (address.getIpPrefix() != null) {
109 return addressTypeFromIpPrefix(address.getIpPrefix());
110 } else if (address.getMacAddress() != null) {
112 } else if (address.getDistinguishedNameType() != null) {
113 return DistinguishedNameAfi.class;
114 } else if (address.getAsNumber() != null) {
115 return AsNumberAfi.class;
120 public static Address addressFromSimpleAddress(SimpleAddress address) {
121 if (address.getIpAddress() != null) {
122 return binaryAddressFromIpAddress(address.getIpAddress());
123 } else if (address.getIpPrefix() != null) {
124 return addressFromIpPrefix(address.getIpPrefix());
125 } else if (address.getMacAddress() != null) {
126 return addressFromMacAddress(address.getMacAddress());
127 } else if (address.getDistinguishedNameType() != null) {
128 return addressFromDistinguishedName(address.getDistinguishedNameType());
129 } else if (address.getAsNumber() != null) {
130 return addressFromAsNumber(address.getAsNumber());
135 public static Class<? extends LispAddressFamily> addressTypeFromInet(InetAddress address) {
136 if (address instanceof Inet4Address) {
137 return Ipv4Afi.class;
138 } else if (address instanceof Inet6Address) {
139 return Ipv6Afi.class;
144 public static Address addressFromInet(InetAddress address) {
145 if (address instanceof Inet4Address) {
146 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
147 .rev151105.lisp.address.address.Ipv4Builder()
148 .setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address)).build();
149 } else if (address instanceof Inet6Address) {
150 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
151 .rev151105.lisp.address.address.Ipv6Builder()
152 .setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address)).build();
157 public static Class<? extends LispAddressFamily> binaryAddressTypeFromInet(InetAddress address) {
158 if (address instanceof Inet4Address) {
159 return Ipv4BinaryAfi.class;
160 } else if (address instanceof Inet6Address) {
161 return Ipv6BinaryAfi.class;
166 public static Address binaryAddressFromInet(InetAddress address) {
167 if (address instanceof Inet4Address) {
168 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(address.getAddress())).build();
169 } else if (address instanceof Inet6Address) {
170 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(address.getAddress())).build();
175 public static Class<? extends LispAddressFamily> addressTypeFromIpAddress(IpAddress address) {
176 if (address == null) {
178 } else if (address.getIpv4Address() != null) {
179 return Ipv4Afi.class;
180 } else if (address.getIpv6Address() != null) {
181 return Ipv6Afi.class;
186 public static Class<? extends LispAddressFamily> binaryAddressTypeFromIpAddress(IpAddress address) {
187 if (address == null) {
189 } else if (address.getIpv4Address() != null) {
190 return Ipv4BinaryAfi.class;
191 } else if (address.getIpv6Address() != null) {
192 return Ipv6BinaryAfi.class;
197 public static Address addressFromIpAddress(IpAddress address) {
198 if (address == null) {
200 } else if (address.getIpv4Address() != null) {
201 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
202 .rev151105.lisp.address.address.Ipv4Builder().setIpv4(address.getIpv4Address()).build();
203 } else if (address.getIpv6Address() != null) {
204 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
205 .rev151105.lisp.address.address.Ipv6Builder().setIpv6(address.getIpv6Address()).build();
211 public static Address binaryAddressFromIpAddress(IpAddress address) {
212 if (address == null) {
214 } else if (address.getIpv4Address() != null) {
215 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(
216 InetAddresses.forString(address.getIpv4Address().getValue()).getAddress())).build();
217 } else if (address.getIpv6Address() != null) {
218 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(
219 InetAddresses.forString(address.getIpv6Address().getValue()).getAddress())).build();
224 public static Class<? extends LispAddressFamily> addressTypeFromIpPrefix(IpPrefix address) {
225 if (address == null) {
227 } else if (address.getIpv4Prefix() != null) {
228 return Ipv4PrefixAfi.class;
229 } else if (address.getIpv6Prefix() != null) {
230 return Ipv6PrefixAfi.class;
235 public static Address addressFromIpPrefix(IpPrefix address) {
236 if (address == null) {
238 } else if (address.getIpv4Prefix() != null) {
239 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
240 .rev151105.lisp.address.address.Ipv4PrefixBuilder().setIpv4Prefix(address.getIpv4Prefix()).build();
241 } else if (address.getIpv6Prefix() != null) {
242 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
243 .rev151105.lisp.address.address.Ipv6PrefixBuilder().setIpv6Prefix(address.getIpv6Prefix()).build();
248 public static Address addressFromMacAddress(MacAddress address) {
249 if (address == null) {
252 return (Address) new MacBuilder().setMac(address).build();
256 public static Address addressFromServicePath(ServicePath address) {
257 if (address == null) {
260 return (Address) new ServicePathBuilder().setServicePath(address).build();
264 public static Address addressFromDistinguishedName(DistinguishedNameType address) {
265 if (address == null) {
268 return (Address) new DistinguishedNameBuilder().setDistinguishedName(address).build();
272 public static Address addressFromAsNumber(AsNumber address) {
273 if (address == null) {
276 return (Address) new AsNumberBuilder().setAsNumber(address).build();
280 public static Rloc toRloc(SimpleAddress address) {
281 RlocBuilder builder = new RlocBuilder();
282 builder.setAddressType(addressTypeFromSimpleAddress(address));
283 builder.setVirtualNetworkId(null);
284 builder.setAddress(addressFromSimpleAddress(address));
285 return builder.build();
288 public static Rloc toRloc(InetAddress address) {
289 RlocBuilder builder = new RlocBuilder();
290 builder.setAddressType(binaryAddressTypeFromInet(address));
291 builder.setVirtualNetworkId(null);
292 builder.setAddress(binaryAddressFromInet(address));
293 return builder.build();
296 public static Rloc toRloc(Ipv4Address address) {
297 RlocBuilder builder = new RlocBuilder();
298 builder.setAddressType(Ipv4Afi.class);
299 builder.setVirtualNetworkId(null);
300 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
301 return builder.build();
304 public static Rloc toRloc(Ipv4AddressBinary address) {
305 RlocBuilder builder = new RlocBuilder();
306 builder.setAddressType(Ipv4BinaryAfi.class);
307 builder.setVirtualNetworkId(null);
308 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
309 return builder.build();
312 public static Rloc toRloc(Ipv6Address address) {
313 RlocBuilder builder = new RlocBuilder();
314 builder.setAddressType(Ipv6Afi.class);
315 builder.setVirtualNetworkId(null);
316 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
317 return builder.build();
320 public static Rloc toRloc(Ipv6AddressBinary address) {
321 RlocBuilder builder = new RlocBuilder();
322 builder.setAddressType(Ipv6BinaryAfi.class);
323 builder.setVirtualNetworkId(null);
324 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
325 return builder.build();
328 public static Rloc asIpv4Rloc(String address) {
329 return toRloc(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()));
332 public static Rloc asIpv6Rloc(String address) {
333 return toRloc(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()));
336 public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) {
337 EidBuilder builder = new EidBuilder();
338 builder.setAddressType(Ipv4PrefixAfi.class);
339 builder.setVirtualNetworkId(vni);
340 builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
341 return builder.build();
344 public static Eid toEid(Ipv4PrefixBinary prefix, InstanceIdType vni) {
345 EidBuilder builder = new EidBuilder();
346 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
347 builder.setVirtualNetworkId(vni);
348 builder.setAddress((Address) prefix);
349 return builder.build();
352 public static Eid toEid(Ipv6PrefixBinary prefix, InstanceIdType vni) {
353 EidBuilder builder = new EidBuilder();
354 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
355 builder.setVirtualNetworkId(vni);
356 builder.setAddress((Address) prefix);
357 return builder.build();
360 public static Eid toEid(Ipv4Address address, InstanceIdType vni) {
361 EidBuilder builder = new EidBuilder();
362 builder.setAddressType(Ipv4Afi.class);
363 builder.setVirtualNetworkId(vni);
364 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
365 return builder.build();
368 public static Eid toEid(Ipv4AddressBinary address, InstanceIdType vni) {
369 EidBuilder builder = new EidBuilder();
370 builder.setAddressType(Ipv4BinaryAfi.class);
371 builder.setVirtualNetworkId(vni);
372 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
373 return builder.build();
376 public static Eid toEid(IpPrefix prefix, InstanceIdType vni) {
377 EidBuilder builder = new EidBuilder();
378 builder.setAddress(addressFromIpPrefix(prefix));
379 builder.setAddressType(addressTypeFromIpPrefix(prefix));
380 builder.setVirtualNetworkId(vni);
381 return builder.build();
384 public static Eid toEid(Ipv6Address address, InstanceIdType vni) {
385 EidBuilder builder = new EidBuilder();
386 builder.setAddressType(Ipv6Afi.class);
387 builder.setVirtualNetworkId(vni);
388 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
389 return builder.build();
392 public static Eid toEid(Ipv6AddressBinary address, InstanceIdType vni) {
393 EidBuilder builder = new EidBuilder();
394 builder.setAddressType(Ipv6BinaryAfi.class);
395 builder.setVirtualNetworkId(vni);
396 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
397 return builder.build();
400 public static Eid toEid(DistinguishedNameType dn, InstanceIdType vni) {
401 EidBuilder builder = new EidBuilder();
402 builder.setAddressType(DistinguishedNameAfi.class);
403 builder.setVirtualNetworkId(vni);
404 builder.setAddress((Address) new DistinguishedNameBuilder().setDistinguishedName(dn).build());
405 return builder.build();
408 public static Eid toEid(MacAddress mac, InstanceIdType vni) {
409 EidBuilder builder = new EidBuilder();
410 builder.setAddressType(MacAfi.class);
411 builder.setVirtualNetworkId(vni);
412 builder.setAddress((Address) new MacBuilder().setMac(mac).build());
413 return builder.build();
416 public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) {
417 EidBuilder builder = new EidBuilder();
418 builder.setAddressType(Ipv6PrefixAfi.class);
419 builder.setVirtualNetworkId(vni);
420 builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
421 return builder.build();
424 // XXX getMapping rcp fails if VNI set to 0
425 public static Eid toEidNoVni(IpPrefix prefix) {
426 EidBuilder builder = new EidBuilder();
427 builder.setAddress(addressFromIpPrefix(prefix));
428 builder.setAddressType(addressTypeFromIpPrefix(prefix));
429 return builder.build();
432 public static Eid toIpPrefixEid(IpAddress addr, int vni) {
433 // If you touch this, be sure that sfclisp compiles!
434 int mask = addressTypeFromIpAddress(addr) == Ipv4Afi.class ? 32 : 128;
435 IpPrefix prefix = asIpPrefix(String.valueOf(addr.getValue()), mask);
436 // XXX getMapping rcp fails if VNI set to 0
437 return toEidNoVni(prefix);
440 public static Eid asEid(SimpleAddress address, InstanceIdType vni) {
441 EidBuilder builder = new EidBuilder();
442 builder.setAddressType(addressTypeFromSimpleAddress(address));
443 builder.setVirtualNetworkId(vni);
444 // XXX Not sure if the below actually works as expected... also, what happens to AFI?
445 builder.setAddress(addressFromSimpleAddress(address));
446 return builder.build();
449 public static Eid asIpv4PrefixEid(String prefix) {
450 return asIpv4PrefixEid(prefix, null);
453 public static Eid asIpv4PrefixEid(Ipv4Address addr, InstanceIdType vni) {
454 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(addr)), vni);
457 public static Eid asIpv4PrefixEid(final String prefix, final InstanceIdType iiType) {
458 return toEid(new Ipv4Prefix(prefix), iiType);
461 public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) {
462 EidBuilder builder = new EidBuilder();
463 builder.setAddressType(Ipv4PrefixAfi.class);
464 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
465 builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(
466 IetfInetUtil.INSTANCE.ipv4PrefixFor(address, mask)).build());
467 return builder.build();
470 public static Eid asIpv4PrefixBinaryEid(final String prefix) {
471 return asIpv4PrefixBinaryEid(prefix, null);
474 public static Eid asIpv4PrefixBinaryEid(long vni, final String prefix) {
475 InstanceIdType iid = new InstanceIdType(vni);
476 return asIpv4PrefixBinaryEid(prefix, iid);
479 public static Eid asIpv4PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
480 String address = MaskUtil.getPrefixAddress(prefix);
481 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
482 byte[] ipv4 = InetAddresses.forString(address).getAddress();
483 return toEid(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(ipv4))
484 .setIpv4MaskLength(mask).build(), iiType);
487 public static Eid asIpv4PrefixBinaryEid(Eid eid, byte[] address, short mask) {
488 return asIpv4PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
491 public static Eid asIpv4PrefixBinaryEid(long vni, byte[] address, short mask) {
492 return asIpv4PrefixBinaryEid(new InstanceIdType(vni), address, mask);
495 public static Eid asIpv4PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
496 Preconditions.checkArgument(address.length == 4,
497 "asIpv4PrefixBinaryEid called with incorrect length byte array ({})", address.length);
498 EidBuilder builder = new EidBuilder();
499 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
500 builder.setVirtualNetworkId(vni);
501 builder.setAddress(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(address))
502 .setIpv4MaskLength(mask).build());
503 return builder.build();
506 public static Eid asIpv4Eid(String address) {
507 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), null);
510 public static Eid asIpv4Eid(String address, long vni) {
511 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
514 public static Eid asIpv6Eid(String address) {
515 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), null);
518 public static Eid asIpv6Eid(String address, long vni) {
519 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), new InstanceIdType(vni));
522 public static Eid asIpv6PrefixEid(String prefix) {
523 return toEid(new Ipv6Prefix(prefix), null);
526 public static Eid asIpv6PrefixEid(Ipv6Address addr, InstanceIdType vni) {
527 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(addr)), vni);
530 public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) {
531 EidBuilder builder = new EidBuilder();
532 builder.setAddressType(Ipv6PrefixAfi.class);
533 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
534 builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(
535 IetfInetUtil.INSTANCE.ipv6PrefixFor(address, mask)).build());
536 return builder.build();
539 public static Eid asIpv6PrefixBinaryEid(final String prefix) {
540 return asIpv6PrefixBinaryEid(prefix, null);
543 public static Eid asIpv6PrefixBinaryEid(long vni, final String prefix) {
544 InstanceIdType iid = new InstanceIdType(vni);
545 return asIpv6PrefixBinaryEid(prefix, iid);
548 public static Eid asIpv6PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
549 String address = MaskUtil.getPrefixAddress(prefix);
550 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
551 byte[] ipv6 = InetAddresses.forString(address).getAddress();
552 return toEid(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(ipv6))
553 .setIpv6MaskLength(mask).build(), iiType);
556 public static Eid asIpv6PrefixBinaryEid(Eid eid, byte[] address, short mask) {
557 return asIpv6PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
560 public static Eid asIpv6PrefixBinaryEid(long vni, byte[] address, short mask) {
561 return asIpv6PrefixBinaryEid(new InstanceIdType(vni), address, mask);
564 public static Eid asIpv6PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
565 Preconditions.checkArgument(address.length == 16,
566 "asIpv6PrefixBinaryEid called with incorrect length byte array ({})", address.length);
567 EidBuilder builder = new EidBuilder();
568 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
569 builder.setVirtualNetworkId(vni);
570 builder.setAddress(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(address))
571 .setIpv6MaskLength(mask).build());
572 return builder.build();
575 public static Eid asBinaryEid(SimpleAddress address, InstanceIdType iid) {
576 if (address.getIpPrefix() != null) {
577 if (address.getIpPrefix().getIpv4Prefix() != null) {
578 return LispAddressUtil.asIpv4PrefixBinaryEid(address.getIpPrefix().getIpv4Prefix().getValue(), iid);
579 } else if (address.getIpPrefix().getIpv6Prefix() != null) {
580 return LispAddressUtil.asIpv6PrefixBinaryEid(address.getIpPrefix().getIpv6Prefix().getValue(), iid);
582 } else if (address.getIpAddress() != null) {
583 if (address.getIpAddress().getIpv4Address() != null) {
584 LispAddressUtil.toEid(new Ipv4AddressBinary(InetAddresses.forString(
585 address.getIpAddress().getIpv4Address().getValue()).getAddress()), iid);
586 } else if (address.getIpAddress().getIpv6Address() != null) {
587 LispAddressUtil.toEid(new Ipv6AddressBinary(InetAddresses.forString(
588 address.getIpAddress().getIpv6Address().getValue()).getAddress()), iid);
591 return LispAddressUtil.asEid(address, iid);
594 public static Eid asIpPrefixBinaryEid(Eid eid) {
595 Address address = eid.getAddress();
596 if (address instanceof Ipv4Binary) {
597 return LispAddressUtil.asIpv4PrefixBinaryEid(eid, ((Ipv4Binary) address).getIpv4Binary().getValue(),
599 } else if (address instanceof Ipv6Binary) {
600 return LispAddressUtil.asIpv6PrefixBinaryEid(eid, ((Ipv6Binary) address).getIpv6Binary().getValue(),
602 } else if (address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
604 } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
605 .types.rev151105.lisp.address.address.Ipv4) {
606 return LispAddressUtil.asIpv4PrefixBinaryEid(((Ipv4) address).getIpv4().getValue() + "/32",
607 eid.getVirtualNetworkId());
608 } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
609 .types.rev151105.lisp.address.address.Ipv6) {
610 return LispAddressUtil.asIpv6PrefixBinaryEid(((Ipv6) address).getIpv6().getValue() + "/128",
611 eid.getVirtualNetworkId());
613 return convertToBinary(eid);
616 public static int ipVersionFromString(String ip) {
617 if (IP4_PATTERN.matcher(ip).matches()) {
619 } else if (IP6_PATTERN.matcher(ip).matches()) {
626 public static IpPrefix asIpPrefix(String addr, int mask) {
627 int version = ipVersionFromString(addr);
628 if (version == 4 && (mask >= 0 && mask <= 32)) {
629 return new IpPrefix(new Ipv4Prefix(addr + "/" + mask));
630 } else if (version == 6 && (mask >= 0 && mask <= 128)) {
631 return new IpPrefix(new Ipv6Prefix(addr + "/" + mask));
637 public static Eid asServicePathEid(long vni, long servicePathId, short serviceIndex) {
638 EidBuilder eb = new EidBuilder();
639 eb.setAddressType(ServicePathLcaf.class);
641 eb.setVirtualNetworkId(new InstanceIdType(vni));
643 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
644 .lisp.address.address.service.path.ServicePathBuilder spb =
645 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
646 .lisp.address.address.service.path.ServicePathBuilder();
647 spb.setServicePathId(new ServicePathIdType(servicePathId));
648 spb.setServiceIndex(serviceIndex);
649 return eb.setAddress(addressFromServicePath(spb.build())).build();
652 public static Eid asMacEid(String address, long vni) {
653 return toEid(new MacAddress(address), new InstanceIdType(vni));
656 public static Eid asMacEid(String address) {
657 return toEid(new MacAddress(address), null);
660 public static Eid asDistinguishedNameEid(String address, long vni) {
661 return toEid(new MacAddress(address), new InstanceIdType(vni));
664 public static Eid asDistinguishedNameEid(String address) {
665 return toEid(new DistinguishedNameType(address), null);
668 public static Eid asKeyValueAddressEid(SimpleAddress key, SimpleAddress value) {
669 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
671 kvab.setValue(value);
672 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
673 .rev151105.lisp.address.address.KeyValueAddressBuilder()
674 .setKeyValueAddress(kvab.build()).build();
675 EidBuilder builder = new EidBuilder();
676 builder.setAddressType(KeyValueAddressLcaf.class);
677 builder.setVirtualNetworkId(null);
678 builder.setAddress((Address) address);
679 return builder.build();
682 public static Rloc asKeyValueAddressRloc(SimpleAddress key, SimpleAddress value) {
683 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
685 kvab.setValue(value);
686 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
687 .rev151105.lisp.address.address.KeyValueAddressBuilder()
688 .setKeyValueAddress(kvab.build()).build();
689 RlocBuilder builder = new RlocBuilder();
690 builder.setAddressType(KeyValueAddressLcaf.class);
691 builder.setVirtualNetworkId(null);
692 builder.setAddress((Address) address);
693 return builder.build();
696 public static Rloc asKeyValueAddress(String key, SimpleAddress value) {
697 return asKeyValueAddressRloc(new SimpleAddress(new DistinguishedNameType(key)), value);
700 public static SourceDestKey asSrcDst(String src, String dst, int smask, int dmask) {
701 SourceDestKeyBuilder builder = new SourceDestKeyBuilder();
702 builder.setSource(new SimpleAddress(asIpPrefix(src, smask)));
703 builder.setDest(new SimpleAddress(asIpPrefix(dst, dmask)));
704 return builder.build();
707 public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, long vni) {
708 EidBuilder builder = new EidBuilder();
709 builder.setAddressType(SourceDestKeyLcaf.class);
710 builder.setVirtualNetworkId(new InstanceIdType(Long.valueOf(vni)));
712 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
713 .lisp.address.address.SourceDestKeyBuilder()
714 .setSourceDestKey(asSrcDst(src, dst, smask, dmask)).build());
716 return builder.build();
719 public static Eid asSrcDstEid(SourceDestKey sd, InstanceIdType vni) {
720 EidBuilder builder = new EidBuilder();
721 builder.setAddressType(SourceDestKeyLcaf.class);
722 builder.setVirtualNetworkId(vni);
723 builder.setAddress(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
724 .rev151105.lisp.address.address.SourceDestKeyBuilder().setSourceDestKey(sd).build());
725 return builder.build();
728 public static Rloc asTeLcafRloc(List<IpAddress> hopList) {
729 ExplicitLocatorPathBuilder teAddrBuilder = new ExplicitLocatorPathBuilder();
730 teAddrBuilder.setHop(new ArrayList<Hop>());
731 for (IpAddress hop : hopList) {
732 HopBuilder hopBuilder = new HopBuilder();
733 hopBuilder.setAddress(new SimpleAddress(hop));
734 hopBuilder.setHopId("Hop " + teAddrBuilder.getHop().size());
735 hopBuilder.setLrsBits(new LrsBits(false, false, false));
736 teAddrBuilder.getHop().add(hopBuilder.build());
739 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
740 .lisp.address.address.ExplicitLocatorPathBuilder elpBuilder =
741 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
742 .lisp.address.address.ExplicitLocatorPathBuilder();
743 elpBuilder.setExplicitLocatorPath(teAddrBuilder.build());
745 RlocBuilder teBuilder = new RlocBuilder();
746 teBuilder.setAddress(elpBuilder.build());
747 teBuilder.setAddressType(ExplicitLocatorPathLcaf.class);
748 return teBuilder.build();
751 public static List<LocatorRecord> asLocatorRecords(List<Rloc> locators) {
752 List<LocatorRecord> locatorRecords = new ArrayList<LocatorRecord>();
753 for (Rloc locator : locators) {
754 LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder();
755 locatorBuilder.setLocalLocator(false).setRlocProbed(false).setWeight((short) 1).setPriority((short) 1)
756 .setMulticastWeight((short) 1).setMulticastPriority((short) 1).setRouted(true)
757 .setRloc(locator).setLocatorId("SFC_LISP").build();
758 locatorRecords.add(locatorBuilder.build());
760 return locatorRecords;
763 public static Eid getNoAddressEid() {
764 EidBuilder builder = new EidBuilder();
765 builder.setAddressType(NoAddressAfi.class);
766 builder.setVirtualNetworkId(null);
767 builder.setAddress(new NoAddressBuilder().setNoAddress(true).build());
768 return builder.build();
771 public static byte[] ipAddressToByteArray(Address addr) {
772 if (addr instanceof Ipv4) {
773 return InetAddresses.forString(((Ipv4) addr).getIpv4().getValue()).getAddress();
774 } else if (addr instanceof Ipv6) {
775 return InetAddresses.forString(((Ipv6) addr).getIpv6().getValue()).getAddress();
776 } else if (addr instanceof Ipv4Binary) {
777 return ((Ipv4Binary) addr).getIpv4Binary().getValue();
778 } else if (addr instanceof Ipv6Binary) {
779 return ((Ipv6Binary) addr).getIpv6Binary().getValue();
785 private static Ipv4PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
786 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix prefix) {
787 Ipv4PrefixBinaryBuilder pb = new Ipv4PrefixBinaryBuilder();
788 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv4Prefix(prefix)).getAddress();
789 pb.setIpv4AddressBinary(new Ipv4AddressBinary(address));
790 pb.setIpv4MaskLength(MaskUtil.getMaskForAddress(prefix));
794 private static Ipv6PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
795 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix prefix) {
796 Ipv6PrefixBinaryBuilder pb = new Ipv6PrefixBinaryBuilder();
797 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv6Prefix(prefix)).getAddress();
798 pb.setIpv6AddressBinary(new Ipv6AddressBinary(address));
799 pb.setIpv6MaskLength(MaskUtil.getMaskForAddress(prefix));
803 private static Ipv4Binary convertToBinary(Ipv4 address) {
804 byte[] addr = InetAddresses.forString(address.getIpv4().getValue()).getAddress();
805 return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(addr)).build();
808 private static Ipv6Binary convertToBinary(Ipv6 address) {
809 byte[] addr = InetAddresses.forString(address.getIpv6().getValue()).getAddress();
810 return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(addr)).build();
813 private static Pair<Class<? extends LispAddressFamily>, Address> convertToBinary(Address addr) {
814 Address convAddr = null;
815 Class<? extends LispAddressFamily> convType = null;
816 if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
817 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) {
818 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
819 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) addr);
820 convType = Ipv4PrefixBinaryAfi.class;
821 } else if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
822 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
823 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
824 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) addr);
825 convType = Ipv6PrefixBinaryAfi.class;
826 } else if (addr instanceof Ipv4) {
827 convAddr = convertToBinary((Ipv4) addr);
828 convType = Ipv4BinaryAfi.class;
829 } else if (addr instanceof Ipv6) {
830 convAddr = convertToBinary((Ipv6) addr);
831 convType = Ipv6BinaryAfi.class;
833 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
836 public static Eid convertToBinary(Eid eid) {
837 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(eid.getAddress());
838 if (converted.getRight() == null) {
841 EidBuilder eb = new EidBuilder(eid);
842 eb.setAddressType(converted.getLeft());
843 eb.setAddress(converted.getRight());
847 public static Rloc convertToBinary(Rloc rloc) {
848 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(rloc.getAddress());
849 if (converted.getRight() == null) {
852 RlocBuilder rb = new RlocBuilder(rloc);
853 rb.setAddressType(converted.getLeft());
854 rb.setAddress(converted.getRight());
859 * Converts the {@link InetAddress} into Ipv4 or Ipv6 {@link IpAddressBinary}. If null parameter is passed, method
860 * returns the Ipv4 loopback address (127.0.0.1).
862 * @param inetAddress Any Ipv4 or Ipv6 InetAddress.
863 * @return The converted Ipv4 or Ipv6 IpAddressBinary, or Ipv4 loopback address (127.0.0.1) if null is passed.
865 public static IpAddressBinary addressBinaryFromInet(InetAddress inetAddress) {
866 if (inetAddress == null) {
867 inetAddress = Inet4Address.getLoopbackAddress();
870 if (inetAddress instanceof Inet4Address) {
871 return new IpAddressBinary(new Ipv4AddressBinary(inetAddress.getAddress()));
872 } else if (inetAddress instanceof Inet6Address) {
873 return new IpAddressBinary(new Ipv6AddressBinary(inetAddress.getAddress()));
878 public static IpAddressBinary addressBinaryFromAddress(Address address) {
879 if (address instanceof Ipv4Binary) {
880 return new IpAddressBinary(((Ipv4Binary) address).getIpv4Binary());
881 } else if (address instanceof Ipv6Binary) {
882 return new IpAddressBinary(((Ipv6Binary) address).getIpv6Binary());
887 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
888 .lisp.address.address.Ipv4Prefix convertFromBinary(Ipv4PrefixBinary prefix) {
889 return new Ipv4PrefixBuilder().setIpv4Prefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(
890 prefix.getIpv4AddressBinary().getValue(),
891 prefix.getIpv4MaskLength())).build();
894 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
895 .lisp.address.address.Ipv6Prefix convertFromBinary(Ipv6PrefixBinary prefix) {
896 return new Ipv6PrefixBuilder().setIpv6Prefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(
897 prefix.getIpv6AddressBinary().getValue(),
898 prefix.getIpv6MaskLength())).build();
901 private static Ipv4 convertFromBinary(Ipv4Binary address) {
902 return new Ipv4Builder().setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address.getIpv4Binary().getValue()))
906 private static Ipv6 convertFromBinary(Ipv6Binary address) {
907 return new Ipv6Builder().setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address.getIpv6Binary().getValue()))
911 private static Pair<Class<? extends LispAddressFamily>, Address> convertFromBinary(Address addr) {
912 Address convAddr = null;
913 Class<? extends LispAddressFamily> convType = null;
914 if (addr instanceof Ipv4PrefixBinary) {
915 convAddr = convertFromBinary((Ipv4PrefixBinary) addr);
916 convType = Ipv4PrefixAfi.class;
917 } else if (addr instanceof Ipv6PrefixBinary) {
918 convAddr = convertFromBinary((Ipv6PrefixBinary) addr);
919 convType = Ipv6PrefixAfi.class;
920 } else if (addr instanceof Ipv4Binary) {
921 convAddr = convertFromBinary((Ipv4Binary) addr);
922 convType = Ipv4Afi.class;
923 } else if (addr instanceof Ipv6Binary) {
924 convAddr = convertFromBinary((Ipv6Binary) addr);
925 convType = Ipv6Afi.class;
927 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
930 public static Eid convertFromBinary(Eid eid) {
931 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(eid.getAddress());
932 if (converted.getRight() == null) {
935 EidBuilder eb = new EidBuilder(eid);
936 eb.setAddressType(converted.getLeft());
937 eb.setAddress(converted.getRight());
941 public static Rloc convertFromBinary(Rloc rloc) {
942 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(rloc.getAddress());
943 if (converted.getRight() == null) {
946 RlocBuilder rb = new RlocBuilder(rloc);
947 rb.setAddressType(converted.getLeft());
948 rb.setAddress(converted.getRight());
952 public static boolean addressNeedsConversionToBinary(Address address) {
953 if (address instanceof Ipv4 || address instanceof Ipv6
954 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
955 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix
956 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
957 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
963 public static boolean addressNeedsConversionFromBinary(Address address) {
964 if (address instanceof Ipv4Binary || address instanceof Ipv6Binary
965 || address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
971 public static int compareIpAddressByteArrays(byte[] one, byte[] two) {
972 if (one.length < two.length) {
974 } else if (one.length > two.length) {
976 } else if (one.length == 4 && two.length == 4) {
977 for (int i = 0; i < 4; i++) {
978 if (one[i] < two[i]) {
980 } else if (one[i] > two[i]) {
985 } else if (one.length == 16 && two.length == 16) {
986 for (int i = 0; i < 16; i++) {
987 if (one[i] < two[i]) {
989 } else if (one[i] > two[i]) {
998 public static short getIpPrefixMask(Eid eid) {
999 Address addr = eid.getAddress();
1000 if (addr instanceof Ipv4PrefixBinary) {
1001 return ((Ipv4PrefixBinary) addr).getIpv4MaskLength();
1002 } else if (addr instanceof Ipv6PrefixBinary) {
1003 return ((Ipv6PrefixBinary) addr).getIpv6MaskLength();