2 * Copyright (c) 2014 Cisco Systems, 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.net.InetAddresses;
12 import java.net.InetAddress;
13 import java.net.UnknownHostException;
14 import java.util.ArrayList;
15 import java.util.Random;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRequest;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRloc;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRlocBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.SourceEidBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequestBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
32 public final class MapRequestUtil {
33 protected static final Logger LOG = LoggerFactory.getLogger(MapRequestUtil.class);
35 // Utility class, should not be instantiated
36 private MapRequestUtil() {
39 public static InetAddress selectItrRloc(MapRequest request) {
40 if (request.getItrRloc() == null) {
43 InetAddress selectedItrRloc = null;
44 for (ItrRloc itr : request.getItrRloc()) {
45 Address addr = itr.getRloc().getAddress();
46 if (addr instanceof Ipv4Binary) {
48 selectedItrRloc = InetAddress.getByAddress(((Ipv4Binary) addr).getIpv4Binary().getValue());
49 } catch (UnknownHostException e) {
50 LOG.debug("Cannot convert Ipv6Binary to InetAddress", e);
54 if (addr instanceof Ipv6Binary) {
56 selectedItrRloc = InetAddress.getByAddress(((Ipv6Binary) addr).getIpv6Binary().getValue());
57 } catch (UnknownHostException e) {
58 LOG.debug("Cannot convert Ipv6Binary to InetAddress", e);
62 if (addr instanceof Ipv4) {
63 selectedItrRloc = InetAddresses.forString(((Ipv4) addr).getIpv4().getValue());
66 if (addr instanceof Ipv6) {
67 selectedItrRloc = InetAddresses.forString(((Ipv6) addr).getIpv6().getValue());
71 return selectedItrRloc;
74 public static MapRequestBuilder prepareSMR(Eid srcEid, Rloc itrRloc) {
75 MapRequestBuilder builder = new MapRequestBuilder();
76 builder.setAuthoritative(false);
77 builder.setMapDataPresent(false);
78 builder.setPitr(false);
79 builder.setProbe(false);
81 builder.setSmrInvoked(false);
83 builder.setSourceEid(new SourceEidBuilder().setEid(srcEid).build());
84 builder.setItrRloc(new ArrayList<ItrRloc>());
85 builder.getItrRloc().add(new ItrRlocBuilder().setRloc(itrRloc).build());
86 builder.setMapReply(null);
87 builder.setNonce(new Random().nextLong());