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 static org.opendaylight.yangtools.yang.common.UintConversions.fromJava;
12 import com.google.common.base.Preconditions;
13 import com.google.common.net.InetAddresses;
14 import java.net.Inet4Address;
15 import java.net.Inet6Address;
16 import java.net.InetAddress;
17 import java.util.ArrayList;
18 import java.util.List;
19 import java.util.regex.Pattern;
20 import org.apache.commons.lang3.tuple.ImmutablePair;
21 import org.apache.commons.lang3.tuple.Pair;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AsNumberAfi;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathLcaf;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumberBuilder;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePathBuilder;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.ExplicitLocatorPathBuilder;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop.LrsBits;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.HopBuilder;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder;
65 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePath;
66 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKey;
67 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.source.dest.key.SourceDestKeyBuilder;
68 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv6AddressBinary;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4BinaryAfi;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4PrefixBinaryAfi;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6BinaryAfi;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6PrefixBinaryAfi;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4BinaryBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinary;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinaryBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6BinaryBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinary;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinaryBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
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.opendaylight.yangtools.yang.common.Empty;
91 import org.slf4j.Logger;
92 import org.slf4j.LoggerFactory;
94 public final class LispAddressUtil {
95 protected static final Logger LOG = LoggerFactory.getLogger(LispAddressUtil.class);
97 public static final short STARTING_SERVICE_INDEX = 255;
98 private static final Pattern IP4_PATTERN =
99 Pattern.compile("(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])",
100 Pattern.CASE_INSENSITIVE);
101 private static final Pattern IP6_PATTERN =
102 Pattern.compile("([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}", Pattern.CASE_INSENSITIVE);
104 // Utility class, should not be instantiated
105 private LispAddressUtil() {
108 public static Class<? extends LispAddressFamily> addressTypeFromSimpleAddress(SimpleAddress address) {
109 if (address.getIpAddress() != null) {
110 return binaryAddressTypeFromIpAddress(address.getIpAddress());
111 } else if (address.getIpPrefix() != null) {
112 return addressTypeFromIpPrefix(address.getIpPrefix());
113 } else if (address.getMacAddress() != null) {
115 } else if (address.getDistinguishedNameType() != null) {
116 return DistinguishedNameAfi.class;
117 } else if (address.getAsNumber() != null) {
118 return AsNumberAfi.class;
123 public static Address addressFromSimpleAddress(SimpleAddress address) {
124 if (address.getIpAddress() != null) {
125 return binaryAddressFromIpAddress(address.getIpAddress());
126 } else if (address.getIpPrefix() != null) {
127 return addressFromIpPrefix(address.getIpPrefix());
128 } else if (address.getMacAddress() != null) {
129 return addressFromMacAddress(address.getMacAddress());
130 } else if (address.getDistinguishedNameType() != null) {
131 return addressFromDistinguishedName(address.getDistinguishedNameType());
132 } else if (address.getAsNumber() != null) {
133 return addressFromAsNumber(address.getAsNumber());
138 public static Class<? extends LispAddressFamily> addressTypeFromInet(InetAddress address) {
139 if (address instanceof Inet4Address) {
140 return Ipv4Afi.class;
141 } else if (address instanceof Inet6Address) {
142 return Ipv6Afi.class;
147 public static Address addressFromInet(InetAddress address) {
148 if (address instanceof Inet4Address) {
149 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
150 .rev151105.lisp.address.address.Ipv4Builder()
151 .setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address)).build();
152 } else if (address instanceof Inet6Address) {
153 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
154 .rev151105.lisp.address.address.Ipv6Builder()
155 .setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address)).build();
160 public static Class<? extends LispAddressFamily> binaryAddressTypeFromInet(InetAddress address) {
161 if (address instanceof Inet4Address) {
162 return Ipv4BinaryAfi.class;
163 } else if (address instanceof Inet6Address) {
164 return Ipv6BinaryAfi.class;
169 public static Address binaryAddressFromInet(InetAddress address) {
170 if (address instanceof Inet4Address) {
171 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(address.getAddress())).build();
172 } else if (address instanceof Inet6Address) {
173 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(address.getAddress())).build();
178 public static Class<? extends LispAddressFamily> addressTypeFromIpAddress(IpAddress address) {
179 if (address == null) {
181 } else if (address.getIpv4Address() != null) {
182 return Ipv4Afi.class;
183 } else if (address.getIpv6Address() != null) {
184 return Ipv6Afi.class;
189 public static Class<? extends LispAddressFamily> binaryAddressTypeFromIpAddress(IpAddress address) {
190 if (address == null) {
192 } else if (address.getIpv4Address() != null) {
193 return Ipv4BinaryAfi.class;
194 } else if (address.getIpv6Address() != null) {
195 return Ipv6BinaryAfi.class;
200 public static Address addressFromIpAddress(IpAddress address) {
201 if (address == null) {
203 } else if (address.getIpv4Address() != 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.Ipv4Builder().setIpv4(address.getIpv4Address()).build();
206 } else if (address.getIpv6Address() != null) {
207 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
208 .rev151105.lisp.address.address.Ipv6Builder().setIpv6(address.getIpv6Address()).build();
214 public static Address binaryAddressFromIpAddress(IpAddress address) {
215 if (address == null) {
217 } else if (address.getIpv4Address() != null) {
218 return (Address) new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(
219 InetAddresses.forString(address.getIpv4Address().getValue()).getAddress())).build();
220 } else if (address.getIpv6Address() != null) {
221 return (Address) new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(
222 InetAddresses.forString(address.getIpv6Address().getValue()).getAddress())).build();
227 public static Class<? extends LispAddressFamily> addressTypeFromIpPrefix(IpPrefix address) {
228 if (address == null) {
230 } else if (address.getIpv4Prefix() != null) {
231 return Ipv4PrefixAfi.class;
232 } else if (address.getIpv6Prefix() != null) {
233 return Ipv6PrefixAfi.class;
238 public static Address addressFromIpPrefix(IpPrefix address) {
239 if (address == null) {
241 } else if (address.getIpv4Prefix() != 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.Ipv4PrefixBuilder().setIpv4Prefix(address.getIpv4Prefix()).build();
244 } else if (address.getIpv6Prefix() != null) {
245 return (Address) new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
246 .rev151105.lisp.address.address.Ipv6PrefixBuilder().setIpv6Prefix(address.getIpv6Prefix()).build();
251 public static Address addressFromMacAddress(MacAddress address) {
252 if (address == null) {
255 return (Address) new MacBuilder().setMac(address).build();
259 public static Address addressFromServicePath(ServicePath address) {
260 if (address == null) {
263 return (Address) new ServicePathBuilder().setServicePath(address).build();
267 public static Address addressFromDistinguishedName(DistinguishedNameType address) {
268 if (address == null) {
271 return (Address) new DistinguishedNameBuilder().setDistinguishedName(address).build();
275 public static Address addressFromAsNumber(AsNumber address) {
276 if (address == null) {
279 return (Address) new AsNumberBuilder().setAsNumber(address).build();
283 public static Rloc toRloc(SimpleAddress address) {
284 RlocBuilder builder = new RlocBuilder();
285 builder.setAddressType(addressTypeFromSimpleAddress(address));
286 builder.setVirtualNetworkId(null);
287 builder.setAddress(addressFromSimpleAddress(address));
288 return builder.build();
291 public static Rloc toRloc(InetAddress address) {
292 RlocBuilder builder = new RlocBuilder();
293 builder.setAddressType(binaryAddressTypeFromInet(address));
294 builder.setVirtualNetworkId(null);
295 builder.setAddress(binaryAddressFromInet(address));
296 return builder.build();
299 public static Rloc toRloc(Ipv4Address address) {
300 RlocBuilder builder = new RlocBuilder();
301 builder.setAddressType(Ipv4Afi.class);
302 builder.setVirtualNetworkId(null);
303 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
304 return builder.build();
307 public static Rloc toRloc(Ipv4AddressBinary address) {
308 RlocBuilder builder = new RlocBuilder();
309 builder.setAddressType(Ipv4BinaryAfi.class);
310 builder.setVirtualNetworkId(null);
311 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
312 return builder.build();
315 public static Rloc toRloc(Ipv6Address address) {
316 RlocBuilder builder = new RlocBuilder();
317 builder.setAddressType(Ipv6Afi.class);
318 builder.setVirtualNetworkId(null);
319 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
320 return builder.build();
323 public static Rloc toRloc(Ipv6AddressBinary address) {
324 RlocBuilder builder = new RlocBuilder();
325 builder.setAddressType(Ipv6BinaryAfi.class);
326 builder.setVirtualNetworkId(null);
327 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
328 return builder.build();
331 public static Rloc asIpv4Rloc(String address) {
332 return toRloc(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()));
335 public static Rloc asIpv6Rloc(String address) {
336 return toRloc(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()));
339 public static Eid toEid(Ipv4Prefix prefix, InstanceIdType vni) {
340 EidBuilder builder = new EidBuilder();
341 builder.setAddressType(Ipv4PrefixAfi.class);
342 builder.setVirtualNetworkId(vni);
343 builder.setAddress((Address) new Ipv4PrefixBuilder().setIpv4Prefix(prefix).build());
344 return builder.build();
347 public static Eid toEid(Ipv4PrefixBinary prefix, InstanceIdType vni) {
348 EidBuilder builder = new EidBuilder();
349 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
350 builder.setVirtualNetworkId(vni);
351 builder.setAddress((Address) prefix);
352 return builder.build();
355 public static Eid toEid(Ipv6PrefixBinary prefix, InstanceIdType vni) {
356 EidBuilder builder = new EidBuilder();
357 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
358 builder.setVirtualNetworkId(vni);
359 builder.setAddress((Address) prefix);
360 return builder.build();
363 public static Eid toEid(Ipv4Address address, InstanceIdType vni) {
364 EidBuilder builder = new EidBuilder();
365 builder.setAddressType(Ipv4Afi.class);
366 builder.setVirtualNetworkId(vni);
367 builder.setAddress((Address) new Ipv4Builder().setIpv4(address).build());
368 return builder.build();
371 public static Eid toEid(Ipv4AddressBinary address, InstanceIdType vni) {
372 EidBuilder builder = new EidBuilder();
373 builder.setAddressType(Ipv4BinaryAfi.class);
374 builder.setVirtualNetworkId(vni);
375 builder.setAddress((Address) new Ipv4BinaryBuilder().setIpv4Binary(address).build());
376 return builder.build();
379 public static Eid toEid(IpPrefix prefix, InstanceIdType vni) {
380 EidBuilder builder = new EidBuilder();
381 builder.setAddress(addressFromIpPrefix(prefix));
382 builder.setAddressType(addressTypeFromIpPrefix(prefix));
383 builder.setVirtualNetworkId(vni);
384 return builder.build();
387 public static Eid toEid(Ipv6Address address, InstanceIdType vni) {
388 EidBuilder builder = new EidBuilder();
389 builder.setAddressType(Ipv6Afi.class);
390 builder.setVirtualNetworkId(vni);
391 builder.setAddress((Address) new Ipv6Builder().setIpv6(address).build());
392 return builder.build();
395 public static Eid toEid(Ipv6AddressBinary address, InstanceIdType vni) {
396 EidBuilder builder = new EidBuilder();
397 builder.setAddressType(Ipv6BinaryAfi.class);
398 builder.setVirtualNetworkId(vni);
399 builder.setAddress((Address) new Ipv6BinaryBuilder().setIpv6Binary(address).build());
400 return builder.build();
403 public static Eid toEid(DistinguishedNameType dn, InstanceIdType vni) {
404 EidBuilder builder = new EidBuilder();
405 builder.setAddressType(DistinguishedNameAfi.class);
406 builder.setVirtualNetworkId(vni);
407 builder.setAddress((Address) new DistinguishedNameBuilder().setDistinguishedName(dn).build());
408 return builder.build();
411 public static Eid toEid(MacAddress mac, InstanceIdType vni) {
412 EidBuilder builder = new EidBuilder();
413 builder.setAddressType(MacAfi.class);
414 builder.setVirtualNetworkId(vni);
415 builder.setAddress((Address) new MacBuilder().setMac(mac).build());
416 return builder.build();
419 public static Eid toEid(Ipv6Prefix prefix, InstanceIdType vni) {
420 EidBuilder builder = new EidBuilder();
421 builder.setAddressType(Ipv6PrefixAfi.class);
422 builder.setVirtualNetworkId(vni);
423 builder.setAddress((Address) new Ipv6PrefixBuilder().setIpv6Prefix(prefix).build());
424 return builder.build();
427 // XXX getMapping rcp fails if VNI set to 0
428 public static Eid toEidNoVni(IpPrefix prefix) {
429 EidBuilder builder = new EidBuilder();
430 builder.setAddress(addressFromIpPrefix(prefix));
431 builder.setAddressType(addressTypeFromIpPrefix(prefix));
432 return builder.build();
435 public static Eid toIpPrefixEid(IpAddress addr, int vni) {
436 // If you touch this, be sure that sfclisp compiles!
437 int mask = addressTypeFromIpAddress(addr) == Ipv4Afi.class ? 32 : 128;
438 IpPrefix prefix = asIpPrefix(addr.stringValue(), mask);
439 // XXX getMapping rcp fails if VNI set to 0
440 return toEidNoVni(prefix);
443 public static Eid asEid(SimpleAddress address, InstanceIdType vni) {
444 EidBuilder builder = new EidBuilder();
445 builder.setAddressType(addressTypeFromSimpleAddress(address));
446 builder.setVirtualNetworkId(vni);
447 // XXX Not sure if the below actually works as expected... also, what happens to AFI?
448 builder.setAddress(addressFromSimpleAddress(address));
449 return builder.build();
452 public static Eid asIpv4PrefixEid(String prefix) {
453 return asIpv4PrefixEid(prefix, null);
456 public static Eid asIpv4PrefixEid(Ipv4Address addr, InstanceIdType vni) {
457 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(addr)), vni);
460 public static Eid asIpv4PrefixEid(final String prefix, final InstanceIdType iiType) {
461 return toEid(new Ipv4Prefix(prefix), iiType);
464 public static Eid asIpv4PrefixEid(Eid eid, Inet4Address address, short mask) {
465 EidBuilder builder = new EidBuilder();
466 builder.setAddressType(Ipv4PrefixAfi.class);
467 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
468 builder.setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(
469 IetfInetUtil.INSTANCE.ipv4PrefixFor(address, mask)).build());
470 return builder.build();
473 public static Eid asIpv4PrefixBinaryEid(final String prefix) {
474 return asIpv4PrefixBinaryEid(prefix, null);
477 public static Eid asIpv4PrefixBinaryEid(long vni, final String prefix) {
478 InstanceIdType iid = new InstanceIdType(fromJava(vni));
479 return asIpv4PrefixBinaryEid(prefix, iid);
482 public static Eid asIpv4PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
483 String address = MaskUtil.getPrefixAddress(prefix);
484 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
485 byte[] ipv4 = InetAddresses.forString(address).getAddress();
486 return toEid(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(ipv4))
487 .setIpv4MaskLength(fromJava(mask)).build(), iiType);
490 public static Eid asIpv4PrefixBinaryEid(Eid eid, byte[] address, short mask) {
491 return asIpv4PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
494 public static Eid asIpv4PrefixBinaryEid(long vni, byte[] address, short mask) {
495 return asIpv4PrefixBinaryEid(new InstanceIdType(fromJava(vni)), address, mask);
498 public static Eid asIpv4PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
499 Preconditions.checkArgument(address.length == 4,
500 "asIpv4PrefixBinaryEid called with incorrect length byte array ({})", address.length);
501 EidBuilder builder = new EidBuilder();
502 builder.setAddressType(Ipv4PrefixBinaryAfi.class);
503 builder.setVirtualNetworkId(vni);
504 builder.setAddress(new Ipv4PrefixBinaryBuilder().setIpv4AddressBinary(new Ipv4AddressBinary(address))
505 .setIpv4MaskLength(fromJava(mask)).build());
506 return builder.build();
509 public static Eid asIpv4Eid(String address) {
510 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()), null);
513 public static Eid asIpv4Eid(String address, long vni) {
514 return toEid(new Ipv4AddressBinary(InetAddresses.forString(address).getAddress()),
515 new InstanceIdType(fromJava(vni)));
518 public static Eid asIpv6Eid(String address) {
519 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()), null);
522 public static Eid asIpv6Eid(String address, long vni) {
523 return toEid(new Ipv6AddressBinary(InetAddresses.forString(address).getAddress()),
524 new InstanceIdType(fromJava(vni)));
527 public static Eid asIpv6PrefixEid(String prefix) {
528 return toEid(new Ipv6Prefix(prefix), null);
531 public static Eid asIpv6PrefixEid(Ipv6Address addr, InstanceIdType vni) {
532 return toEid(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(addr)), vni);
535 public static Eid asIpv6PrefixEid(Eid eid, Inet6Address address, short mask) {
536 EidBuilder builder = new EidBuilder();
537 builder.setAddressType(Ipv6PrefixAfi.class);
538 builder.setVirtualNetworkId(eid.getVirtualNetworkId());
539 builder.setAddress(new Ipv6PrefixBuilder().setIpv6Prefix(
540 IetfInetUtil.INSTANCE.ipv6PrefixFor(address, mask)).build());
541 return builder.build();
544 public static Eid asIpv6PrefixBinaryEid(final String prefix) {
545 return asIpv6PrefixBinaryEid(prefix, null);
548 public static Eid asIpv6PrefixBinaryEid(long vni, final String prefix) {
549 InstanceIdType iid = new InstanceIdType(fromJava(vni));
550 return asIpv6PrefixBinaryEid(prefix, iid);
553 public static Eid asIpv6PrefixBinaryEid(final String prefix, final InstanceIdType iiType) {
554 String address = MaskUtil.getPrefixAddress(prefix);
555 short mask = Short.valueOf(MaskUtil.getPrefixMask(prefix));
556 byte[] ipv6 = InetAddresses.forString(address).getAddress();
557 return toEid(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(ipv6))
558 .setIpv6MaskLength(fromJava(mask)).build(), iiType);
561 public static Eid asIpv6PrefixBinaryEid(Eid eid, byte[] address, short mask) {
562 return asIpv6PrefixBinaryEid(eid.getVirtualNetworkId(), address, mask);
565 public static Eid asIpv6PrefixBinaryEid(long vni, byte[] address, short mask) {
566 return asIpv6PrefixBinaryEid(new InstanceIdType(fromJava(vni)), address, mask);
569 public static Eid asIpv6PrefixBinaryEid(InstanceIdType vni, byte[] address, short mask) {
570 Preconditions.checkArgument(address.length == 16,
571 "asIpv6PrefixBinaryEid called with incorrect length byte array ({})", address.length);
572 EidBuilder builder = new EidBuilder();
573 builder.setAddressType(Ipv6PrefixBinaryAfi.class);
574 builder.setVirtualNetworkId(vni);
575 builder.setAddress(new Ipv6PrefixBinaryBuilder().setIpv6AddressBinary(new Ipv6AddressBinary(address))
576 .setIpv6MaskLength(fromJava(mask)).build());
577 return builder.build();
580 public static Eid asBinaryEid(SimpleAddress address, InstanceIdType iid) {
581 if (address.getIpPrefix() != null) {
582 if (address.getIpPrefix().getIpv4Prefix() != null) {
583 return LispAddressUtil.asIpv4PrefixBinaryEid(address.getIpPrefix().getIpv4Prefix().getValue(), iid);
584 } else if (address.getIpPrefix().getIpv6Prefix() != null) {
585 return LispAddressUtil.asIpv6PrefixBinaryEid(address.getIpPrefix().getIpv6Prefix().getValue(), iid);
587 } else if (address.getIpAddress() != null) {
588 if (address.getIpAddress().getIpv4Address() != null) {
589 LispAddressUtil.toEid(new Ipv4AddressBinary(InetAddresses.forString(
590 address.getIpAddress().getIpv4Address().getValue()).getAddress()), iid);
591 } else if (address.getIpAddress().getIpv6Address() != null) {
592 LispAddressUtil.toEid(new Ipv6AddressBinary(InetAddresses.forString(
593 address.getIpAddress().getIpv6Address().getValue()).getAddress()), iid);
596 return LispAddressUtil.asEid(address, iid);
599 public static Eid asIpPrefixBinaryEid(Eid eid) {
600 Address address = eid.getAddress();
601 if (address instanceof Ipv4Binary) {
602 return LispAddressUtil.asIpv4PrefixBinaryEid(eid, ((Ipv4Binary) address).getIpv4Binary().getValue(),
604 } else if (address instanceof Ipv6Binary) {
605 return LispAddressUtil.asIpv6PrefixBinaryEid(eid, ((Ipv6Binary) address).getIpv6Binary().getValue(),
607 } else if (address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
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.Ipv4) {
611 return LispAddressUtil.asIpv4PrefixBinaryEid(((Ipv4) address).getIpv4().getValue() + "/32",
612 eid.getVirtualNetworkId());
613 } else if (address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
614 .types.rev151105.lisp.address.address.Ipv6) {
615 return LispAddressUtil.asIpv6PrefixBinaryEid(((Ipv6) address).getIpv6().getValue() + "/128",
616 eid.getVirtualNetworkId());
618 return convertToBinary(eid);
621 public static int ipVersionFromString(String ip) {
622 if (IP4_PATTERN.matcher(ip).matches()) {
624 } else if (IP6_PATTERN.matcher(ip).matches()) {
631 public static IpPrefix asIpPrefix(String addr, int mask) {
632 int version = ipVersionFromString(addr);
633 if (version == 4 && (mask >= 0 && mask <= 32)) {
634 return new IpPrefix(new Ipv4Prefix(addr + "/" + mask));
635 } else if (version == 6 && (mask >= 0 && mask <= 128)) {
636 return new IpPrefix(new Ipv6Prefix(addr + "/" + mask));
642 public static Eid asServicePathEid(long vni, long servicePathId, short serviceIndex) {
643 EidBuilder eb = new EidBuilder();
644 eb.setAddressType(ServicePathLcaf.class);
646 eb.setVirtualNetworkId(new InstanceIdType(fromJava(vni)));
648 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
649 .lisp.address.address.service.path.ServicePathBuilder spb =
650 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
651 .lisp.address.address.service.path.ServicePathBuilder();
652 spb.setServicePathId(new ServicePathIdType(fromJava(servicePathId)));
653 spb.setServiceIndex(fromJava(serviceIndex));
654 return eb.setAddress(addressFromServicePath(spb.build())).build();
657 public static Eid asMacEid(String address, long vni) {
658 return toEid(new MacAddress(address), new InstanceIdType(fromJava(vni)));
661 public static Eid asMacEid(String address) {
662 return toEid(new MacAddress(address), null);
665 public static Eid asDistinguishedNameEid(String address, long vni) {
666 return toEid(new MacAddress(address), new InstanceIdType(fromJava(vni)));
669 public static Eid asDistinguishedNameEid(String address) {
670 return toEid(new DistinguishedNameType(address), null);
673 public static Eid asKeyValueAddressEid(SimpleAddress key, SimpleAddress value) {
674 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
676 kvab.setValue(value);
677 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
678 .rev151105.lisp.address.address.KeyValueAddressBuilder()
679 .setKeyValueAddress(kvab.build()).build();
680 EidBuilder builder = new EidBuilder();
681 builder.setAddressType(KeyValueAddressLcaf.class);
682 builder.setVirtualNetworkId(null);
683 builder.setAddress((Address) address);
684 return builder.build();
687 public static Rloc asKeyValueAddressRloc(SimpleAddress key, SimpleAddress value) {
688 KeyValueAddressBuilder kvab = new KeyValueAddressBuilder();
690 kvab.setValue(value);
691 KeyValueAddress address = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
692 .rev151105.lisp.address.address.KeyValueAddressBuilder()
693 .setKeyValueAddress(kvab.build()).build();
694 RlocBuilder builder = new RlocBuilder();
695 builder.setAddressType(KeyValueAddressLcaf.class);
696 builder.setVirtualNetworkId(null);
697 builder.setAddress((Address) address);
698 return builder.build();
701 public static Rloc asKeyValueAddress(String key, SimpleAddress value) {
702 return asKeyValueAddressRloc(new SimpleAddress(new DistinguishedNameType(key)), value);
705 public static SourceDestKey asSrcDst(String src, String dst, int smask, int dmask) {
706 SourceDestKeyBuilder builder = new SourceDestKeyBuilder();
707 builder.setSource(new SimpleAddress(asIpPrefix(src, smask)));
708 builder.setDest(new SimpleAddress(asIpPrefix(dst, dmask)));
709 return builder.build();
712 public static Eid asSrcDstEid(String src, String dst, int smask, int dmask, long vni) {
713 EidBuilder builder = new EidBuilder();
714 builder.setAddressType(SourceDestKeyLcaf.class);
715 builder.setVirtualNetworkId(new InstanceIdType(fromJava(Long.valueOf(vni))));
717 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
718 .lisp.address.address.SourceDestKeyBuilder()
719 .setSourceDestKey(asSrcDst(src, dst, smask, dmask)).build());
721 return builder.build();
724 public static Eid asSrcDstEid(SourceDestKey sd, InstanceIdType vni) {
725 EidBuilder builder = new EidBuilder();
726 builder.setAddressType(SourceDestKeyLcaf.class);
727 builder.setVirtualNetworkId(vni);
728 builder.setAddress(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
729 .rev151105.lisp.address.address.SourceDestKeyBuilder().setSourceDestKey(sd).build());
730 return builder.build();
733 public static Rloc asTeLcafRloc(List<IpAddress> hopList) {
734 ExplicitLocatorPathBuilder teAddrBuilder = new ExplicitLocatorPathBuilder();
735 teAddrBuilder.setHop(new ArrayList<Hop>());
736 for (IpAddress hop : hopList) {
737 HopBuilder hopBuilder = new HopBuilder();
738 hopBuilder.setAddress(new SimpleAddress(hop));
739 hopBuilder.setHopId("Hop " + teAddrBuilder.getHop().size());
740 hopBuilder.setLrsBits(new LrsBits(false, false, false));
741 teAddrBuilder.getHop().add(hopBuilder.build());
744 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
745 .lisp.address.address.ExplicitLocatorPathBuilder elpBuilder =
746 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
747 .lisp.address.address.ExplicitLocatorPathBuilder();
748 elpBuilder.setExplicitLocatorPath(teAddrBuilder.build());
750 RlocBuilder teBuilder = new RlocBuilder();
751 teBuilder.setAddress(elpBuilder.build());
752 teBuilder.setAddressType(ExplicitLocatorPathLcaf.class);
753 return teBuilder.build();
756 public static List<LocatorRecord> asLocatorRecords(List<Rloc> locators) {
757 List<LocatorRecord> locatorRecords = new ArrayList<LocatorRecord>();
758 for (Rloc locator : locators) {
759 LocatorRecordBuilder locatorBuilder = new LocatorRecordBuilder();
760 locatorBuilder.setLocalLocator(false).setRlocProbed(false)
761 .setWeight(fromJava((short) 1)).setPriority(fromJava((short) 1))
762 .setMulticastWeight(fromJava((short) 1)).setMulticastPriority(fromJava((short) 1)).setRouted(true)
763 .setRloc(locator).setLocatorId("SFC_LISP").build();
764 locatorRecords.add(locatorBuilder.build());
766 return locatorRecords;
769 public static Eid getNoAddressEid() {
770 EidBuilder builder = new EidBuilder();
771 builder.setAddressType(NoAddressAfi.class);
772 builder.setVirtualNetworkId(null);
773 builder.setAddress(new NoAddressBuilder().setNoAddress(Empty.value()).build());
774 return builder.build();
777 public static byte[] ipAddressToByteArray(Address addr) {
778 if (addr instanceof Ipv4) {
779 return InetAddresses.forString(((Ipv4) addr).getIpv4().getValue()).getAddress();
780 } else if (addr instanceof Ipv6) {
781 return InetAddresses.forString(((Ipv6) addr).getIpv6().getValue()).getAddress();
782 } else if (addr instanceof Ipv4Binary) {
783 return ((Ipv4Binary) addr).getIpv4Binary().getValue();
784 } else if (addr instanceof Ipv6Binary) {
785 return ((Ipv6Binary) addr).getIpv6Binary().getValue();
791 private static Ipv4PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
792 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix prefix) {
793 Ipv4PrefixBinaryBuilder pb = new Ipv4PrefixBinaryBuilder();
794 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv4Prefix(prefix)).getAddress();
795 pb.setIpv4AddressBinary(new Ipv4AddressBinary(address));
796 pb.setIpv4MaskLength(fromJava(MaskUtil.getMaskForAddress(prefix)));
800 private static Ipv6PrefixBinary convertToBinary(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
801 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix prefix) {
802 Ipv6PrefixBinaryBuilder pb = new Ipv6PrefixBinaryBuilder();
803 byte[] address = InetAddresses.forString(MaskUtil.getAddressStringForIpv6Prefix(prefix)).getAddress();
804 pb.setIpv6AddressBinary(new Ipv6AddressBinary(address));
805 pb.setIpv6MaskLength(fromJava(MaskUtil.getMaskForAddress(prefix)));
809 private static Ipv4Binary convertToBinary(Ipv4 address) {
810 byte[] addr = InetAddresses.forString(address.getIpv4().getValue()).getAddress();
811 return new Ipv4BinaryBuilder().setIpv4Binary(new Ipv4AddressBinary(addr)).build();
814 private static Ipv6Binary convertToBinary(Ipv6 address) {
815 byte[] addr = InetAddresses.forString(address.getIpv6().getValue()).getAddress();
816 return new Ipv6BinaryBuilder().setIpv6Binary(new Ipv6AddressBinary(addr)).build();
819 private static Pair<Class<? extends LispAddressFamily>, Address> convertToBinary(Address addr) {
820 Address convAddr = null;
821 Class<? extends LispAddressFamily> convType = null;
822 if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
823 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) {
824 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
825 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix) addr);
826 convType = Ipv4PrefixBinaryAfi.class;
827 } else if (addr instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
828 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
829 convAddr = convertToBinary((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
830 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) addr);
831 convType = Ipv6PrefixBinaryAfi.class;
832 } else if (addr instanceof Ipv4) {
833 convAddr = convertToBinary((Ipv4) addr);
834 convType = Ipv4BinaryAfi.class;
835 } else if (addr instanceof Ipv6) {
836 convAddr = convertToBinary((Ipv6) addr);
837 convType = Ipv6BinaryAfi.class;
839 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
842 public static Eid convertToBinary(Eid eid) {
843 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(eid.getAddress());
844 if (converted.getRight() == null) {
847 EidBuilder eb = new EidBuilder(eid);
848 eb.setAddressType(converted.getLeft());
849 eb.setAddress(converted.getRight());
853 public static Rloc convertToBinary(Rloc rloc) {
854 Pair<Class<? extends LispAddressFamily>, Address> converted = convertToBinary(rloc.getAddress());
855 if (converted.getRight() == null) {
858 RlocBuilder rb = new RlocBuilder(rloc);
859 rb.setAddressType(converted.getLeft());
860 rb.setAddress(converted.getRight());
865 * Converts the {@link InetAddress} into Ipv4 or Ipv6 {@link IpAddressBinary}. If null parameter is passed, method
866 * returns the Ipv4 loopback address (127.0.0.1).
868 * @param inetAddress Any Ipv4 or Ipv6 InetAddress.
869 * @return The converted Ipv4 or Ipv6 IpAddressBinary, or Ipv4 loopback address (127.0.0.1) if null is passed.
871 public static IpAddressBinary addressBinaryFromInet(InetAddress inetAddress) {
872 if (inetAddress == null) {
873 inetAddress = Inet4Address.getLoopbackAddress();
876 if (inetAddress instanceof Inet4Address) {
877 return new IpAddressBinary(new Ipv4AddressBinary(inetAddress.getAddress()));
878 } else if (inetAddress instanceof Inet6Address) {
879 return new IpAddressBinary(new Ipv6AddressBinary(inetAddress.getAddress()));
884 public static IpAddressBinary addressBinaryFromAddress(Address address) {
885 if (address instanceof Ipv4Binary) {
886 return new IpAddressBinary(((Ipv4Binary) address).getIpv4Binary());
887 } else if (address instanceof Ipv6Binary) {
888 return new IpAddressBinary(((Ipv6Binary) address).getIpv6Binary());
893 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
894 .lisp.address.address.Ipv4Prefix convertFromBinary(Ipv4PrefixBinary prefix) {
895 return new Ipv4PrefixBuilder().setIpv4Prefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(
896 prefix.getIpv4AddressBinary().getValue(),
897 prefix.getIpv4MaskLength().toJava())).build();
900 private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
901 .lisp.address.address.Ipv6Prefix convertFromBinary(Ipv6PrefixBinary prefix) {
902 return new Ipv6PrefixBuilder().setIpv6Prefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(
903 prefix.getIpv6AddressBinary().getValue(),
904 prefix.getIpv6MaskLength().toJava())).build();
907 private static Ipv4 convertFromBinary(Ipv4Binary address) {
908 return new Ipv4Builder().setIpv4(IetfInetUtil.INSTANCE.ipv4AddressFor(address.getIpv4Binary().getValue()))
912 private static Ipv6 convertFromBinary(Ipv6Binary address) {
913 return new Ipv6Builder().setIpv6(IetfInetUtil.INSTANCE.ipv6AddressFor(address.getIpv6Binary().getValue()))
917 private static Pair<Class<? extends LispAddressFamily>, Address> convertFromBinary(Address addr) {
918 Address convAddr = null;
919 Class<? extends LispAddressFamily> convType = null;
920 if (addr instanceof Ipv4PrefixBinary) {
921 convAddr = convertFromBinary((Ipv4PrefixBinary) addr);
922 convType = Ipv4PrefixAfi.class;
923 } else if (addr instanceof Ipv6PrefixBinary) {
924 convAddr = convertFromBinary((Ipv6PrefixBinary) addr);
925 convType = Ipv6PrefixAfi.class;
926 } else if (addr instanceof Ipv4Binary) {
927 convAddr = convertFromBinary((Ipv4Binary) addr);
928 convType = Ipv4Afi.class;
929 } else if (addr instanceof Ipv6Binary) {
930 convAddr = convertFromBinary((Ipv6Binary) addr);
931 convType = Ipv6Afi.class;
933 return new ImmutablePair<Class<? extends LispAddressFamily>, Address>(convType, convAddr);
936 public static Eid convertFromBinary(Eid eid) {
937 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(eid.getAddress());
938 if (converted.getRight() == null) {
941 EidBuilder eb = new EidBuilder(eid);
942 eb.setAddressType(converted.getLeft());
943 eb.setAddress(converted.getRight());
947 public static Rloc convertFromBinary(Rloc rloc) {
948 Pair<Class<? extends LispAddressFamily>, Address> converted = convertFromBinary(rloc.getAddress());
949 if (converted.getRight() == null) {
952 RlocBuilder rb = new RlocBuilder(rloc);
953 rb.setAddressType(converted.getLeft());
954 rb.setAddress(converted.getRight());
958 public static boolean addressNeedsConversionToBinary(Address address) {
959 if (address instanceof Ipv4 || address instanceof Ipv6
960 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
961 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix
962 || address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
963 .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) {
969 public static boolean addressNeedsConversionFromBinary(Address address) {
970 if (address instanceof Ipv4Binary || address instanceof Ipv6Binary
971 || address instanceof Ipv4PrefixBinary || address instanceof Ipv6PrefixBinary) {
977 public static int compareIpAddressByteArrays(byte[] one, byte[] two) {
978 if (one.length < two.length) {
980 } else if (one.length > two.length) {
982 } else if (one.length == 4 && two.length == 4) {
983 for (int i = 0; i < 4; i++) {
984 if (one[i] < two[i]) {
986 } else if (one[i] > two[i]) {
991 } else if (one.length == 16 && two.length == 16) {
992 for (int i = 0; i < 16; i++) {
993 if (one[i] < two[i]) {
995 } else if (one[i] > two[i]) {
1004 public static short getIpPrefixMask(Eid eid) {
1005 Address addr = eid.getAddress();
1006 if (addr instanceof Ipv4PrefixBinary) {
1007 return ((Ipv4PrefixBinary) addr).getIpv4MaskLength().toJava();
1008 } else if (addr instanceof Ipv6PrefixBinary) {
1009 return ((Ipv6PrefixBinary) addr).getIpv6MaskLength().toJava();