2 * Copyright (c) 2014, 2017 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.interfaces.dao;
10 import java.util.Date;
11 import java.util.Objects;
12 import java.util.concurrent.TimeUnit;
13 import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.subscriber.data.grouping.SubscriberData;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.subscriber.data.grouping.SubscriberDataBuilder;
20 * Request source RLOC in the mapping service with it's properties.
22 public class Subscriber {
23 // 1 day is default Cisco IOS mapping TTL
24 public static final int DEFAULT_SUBSCRIBER_TIMEOUT = (int) TimeUnit.DAYS.toMinutes(1);
25 // Subscriber TTL should be slightly higher than the mapping TTL. Arbitrary value is set to 10 minutes
26 private static final int SUBSCRIBER_TIMEOUT_CONSTANT = 10;
28 private SubscriberData data;
29 private Date lastRequestDate;
34 * @param subscriberData YANG modeled SubscriberData object.
36 public Subscriber(SubscriberData subscriberData) {
38 this.data = subscriberData;
39 this.lastRequestDate = new Date(System.currentTimeMillis());
45 * @param srcRloc A source RLOC.
46 * @param srcEid A source EID.
47 * @param subscriberTtl Subscriber TTL in min(s).
49 public Subscriber(Rloc srcRloc, Eid srcEid, int subscriberTtl) {
50 this(srcRloc, srcEid, subscriberTtl, new Date(System.currentTimeMillis()));
56 * @param srcRloc A source RLOC.
57 * @param srcEid A source EID.
58 * @param subscriberTtl Subscriber TTL in min(s).
59 * @param lastRequestDate Last request date for this subscriber.
61 public Subscriber(Rloc srcRloc, Eid srcEid, int subscriberTtl, Date lastRequestDate) {
63 this.data = new SubscriberDataBuilder().setRloc(srcRloc).setEid(srcEid).setTtl(subscriberTtl).build();
64 this.lastRequestDate = new Date(lastRequestDate.getTime());
67 public SubscriberData getSubscriberData() {
71 public Rloc getSrcRloc() {
72 return data.getRloc();
75 public Eid getSrcEid() {
79 public Date getLastRequestDate() {
80 return new Date(lastRequestDate.getTime());
83 public void setLastRequestDate(Date lastRequestDate) {
84 this.lastRequestDate = new Date(lastRequestDate.getTime());
87 public int getSubscriberTtl() {
91 // Only used in MapResolverTest
92 public void setSubscriberTtlByRecordTtl(Integer recordTtl) {
93 SubscriberDataBuilder sdb = new SubscriberDataBuilder(this.data);
94 sdb.setTtl(recordTtlToSubscriberTime(recordTtl));
95 this.data = sdb.build();
99 * Static method to calculate the subscriber TTL from a mapping record TTL. If a mapping record TTL is not
100 * provided, use the default 1 day TTL. The subscriber TTL is the TTL plus a constant value.
102 * @param recordTtl The time to live (TTL) value
103 * @return the subscriber TTL
105 public static int recordTtlToSubscriberTime(Integer recordTtl) {
106 if (recordTtl != null) {
107 return (recordTtl + SUBSCRIBER_TIMEOUT_CONSTANT);
109 return DEFAULT_SUBSCRIBER_TIMEOUT;
112 public boolean timedOut() {
113 return TimeUnit.MILLISECONDS
114 .toMinutes(System.currentTimeMillis() - lastRequestDate.getTime()) > data.getTtl();
118 public int hashCode() {
119 final int prime = 31;
121 result = prime * result + Objects.hashCode(data.getRloc());
122 result = prime * result + Objects.hashCode(data.getEid());
127 public boolean equals(Object obj) {
134 if (getClass() != obj.getClass()) {
137 Subscriber other = (Subscriber) obj;
138 if (!Objects.equals(data.getEid(), other.getSrcEid())) {
141 if (!Objects.equals(data.getRloc(), other.getSrcRloc())) {
148 public String toString() {
149 return "_rloc=" + data.getRloc().toString() + ", _eid=" + data.getEid().toString()
150 + ", _ttl=" + data.getTtl().toString() + ", last request @ " + lastRequestDate.toString();
153 public String getString() {
154 return "[" + LispAddressStringifier.getString(data.getRloc())
155 + ", " + LispAddressStringifier.getString(data.getEid()) + "]";