Neon MRI changes
[lispflowmapping.git] / mappingservice / lisp-proto / src / main / java / org / opendaylight / lispflowmapping / lisp / util / MapRequestUtil.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.lispflowmapping.lisp.util;
9
10 import com.google.common.net.InetAddresses;
11
12 import java.net.InetAddress;
13 import java.net.UnknownHostException;
14 import java.util.ArrayList;
15 import java.util.Random;
16
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;
31
32 public final class MapRequestUtil {
33     protected static final Logger LOG = LoggerFactory.getLogger(MapRequestUtil.class);
34
35     // Utility class, should not be instantiated
36     private MapRequestUtil() {
37     }
38
39     public static InetAddress selectItrRloc(MapRequest request) {
40         if (request.getItrRloc() == null) {
41             return null;
42         }
43         InetAddress selectedItrRloc = null;
44         for (ItrRloc itr : request.getItrRloc()) {
45             Address addr = itr.getRloc().getAddress();
46             if (addr instanceof Ipv4Binary) {
47                 try {
48                     selectedItrRloc = InetAddress.getByAddress(((Ipv4Binary) addr).getIpv4Binary().getValue());
49                 } catch (UnknownHostException e) {
50                     LOG.debug("Cannot convert Ipv6Binary to InetAddress", e);
51                 }
52                 break;
53             }
54             if (addr instanceof Ipv6Binary) {
55                 try {
56                     selectedItrRloc = InetAddress.getByAddress(((Ipv6Binary) addr).getIpv6Binary().getValue());
57                 } catch (UnknownHostException e) {
58                     LOG.debug("Cannot convert Ipv6Binary to InetAddress", e);
59                 }
60                 break;
61             }
62             if (addr instanceof Ipv4) {
63                 selectedItrRloc = InetAddresses.forString(((Ipv4) addr).getIpv4().getValue());
64                 break;
65             }
66             if (addr instanceof Ipv6) {
67                 selectedItrRloc = InetAddresses.forString(((Ipv6) addr).getIpv6().getValue());
68                 break;
69             }
70         }
71         return selectedItrRloc;
72     }
73
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);
80         builder.setSmr(true);
81         builder.setSmrInvoked(false);
82
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());
88
89         return builder;
90     }
91
92 }