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.concurrent.TimeUnit;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.subscriber.address.grouping.SubscriberAddress;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.subscriber.address.grouping.SubscriberAddressBuilder;
18 * Request source RLOC in the mapping service with it's properties.
20 public class Subscriber {
21 // 1 day is default Cisco IOS mapping TTL
22 public static final int DEFAULT_SUBSCRIBER_TIMEOUT = (int) TimeUnit.DAYS.toMinutes(1);
23 // Subscriber timeout should be slightly higher than the mapping TTL. Arbitrary value is set to 10 minutes
24 private static final int SUBSCRIBER_TIMEOUT_CONSTANT = 10;
26 private SubscriberAddress address;
27 private Date lastRequestDate;
28 private int subscriberTimeout = DEFAULT_SUBSCRIBER_TIMEOUT;
33 * @param srcRloc A source RLOC.
34 * @param srcEid A source EID.
35 * @param subscriberTimeout Subscriber timeout in min(s).
37 public Subscriber(Rloc srcRloc, Eid srcEid, int subscriberTimeout) {
38 this(srcRloc, srcEid, subscriberTimeout, new Date(System.currentTimeMillis()));
44 * @param srcRloc A source RLOC.
45 * @param srcEid A source EID.
46 * @param subscriberTimeout Subscriber timeout in min(s).
47 * @param lastRequestDate Last request date for this subscriber.
49 public Subscriber(Rloc srcRloc, Eid srcEid, int subscriberTimeout, Date lastRequestDate) {
51 this.address = new SubscriberAddressBuilder().setRloc(srcRloc).setEid(srcEid).build();
52 this.lastRequestDate = lastRequestDate;
53 this.subscriberTimeout = subscriberTimeout;
56 public SubscriberAddress getSubscriberAddress() {
60 public Rloc getSrcRloc() {
61 return address.getRloc();
64 public Eid getSrcEid() {
65 return address.getEid();
68 public Date getLastRequestDate() {
69 return lastRequestDate;
72 public void setLastRequestDate(Date lastRequestDate) {
73 this.lastRequestDate = lastRequestDate;
76 public int getSubscriberTimeout() {
77 return subscriberTimeout;
80 public void setSubscriberTimeout(int subscriberTimeout) {
81 this.subscriberTimeout = subscriberTimeout;
84 // Only used in MapResolverTest
85 public void setSubscriberTimeoutByRecordTtl(Integer recordTtl) {
86 this.subscriberTimeout = recordTtlToSubscriberTime(recordTtl);
90 * Static method to calculate the subscriber timeout from a mapping record TTL. If a mapping record TTL is not
91 * provided, use the default 1 day TTL. The suscriber timeout is the TTL plus a constant value.
93 * @param recordTtl The time to live (TTL) value
94 * @return the subscriber timeout
96 public static int recordTtlToSubscriberTime(Integer recordTtl) {
97 if (recordTtl != null) {
98 return (recordTtl + SUBSCRIBER_TIMEOUT_CONSTANT);
100 return DEFAULT_SUBSCRIBER_TIMEOUT;
103 public boolean timedOut() {
104 return TimeUnit.MILLISECONDS
105 .toMinutes(System.currentTimeMillis() - lastRequestDate.getTime()) > subscriberTimeout;
109 public int hashCode() {
110 return address.hashCode();
114 public boolean equals(Object obj) {
121 if (getClass() != obj.getClass()) {
124 Subscriber other = (Subscriber) obj;
125 if (!address.equals(other.address)) {
132 public String toString() {
133 return "_rloc=" + address.getRloc().toString() + ", _eid=" + address.getEid().toString()
134 + ", last request @ " + lastRequestDate.toString();