blob: a770e97f8ada9368bbfbf561fd22a9faad0833ab [file] [log] [blame]
Thomas Vachuska83e090e2014-10-22 14:25:35 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2014-present Open Networking Laboratory
Thomas Vachuska83e090e2014-10-22 14:25:35 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska83e090e2014-10-22 14:25:35 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska83e090e2014-10-22 14:25:35 -070015 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net.flow;
alshabibca5706c2014-10-04 20:29:41 -070017
18import static com.google.common.base.MoreObjects.toStringHelper;
Thiago Santos877914d2016-07-20 18:29:29 -030019import static java.util.concurrent.TimeUnit.NANOSECONDS;
20import static java.util.concurrent.TimeUnit.SECONDS;
alshabibca5706c2014-10-04 20:29:41 -070021import static org.slf4j.LoggerFactory.getLogger;
22
alshabibca5706c2014-10-04 20:29:41 -070023import org.slf4j.Logger;
24
Thiago Santos877914d2016-07-20 18:29:29 -030025import java.util.concurrent.TimeUnit;
26
Yuta HIGUCHIf6f50a62014-10-19 15:58:49 -070027public class DefaultFlowEntry extends DefaultFlowRule
Madan Jampani54d34992015-03-06 17:27:52 -080028 implements StoredFlowEntry {
alshabibca5706c2014-10-04 20:29:41 -070029
Yuta HIGUCHI3498aab2014-10-17 21:05:40 -070030 private static final Logger log = getLogger(DefaultFlowEntry.class);
alshabibca5706c2014-10-04 20:29:41 -070031
Thiago Santos877914d2016-07-20 18:29:29 -030032 /* Stored in nanoseconds (allows for 292 years) */
alshabibca5706c2014-10-04 20:29:41 -070033 private long life;
Thiago Santos877914d2016-07-20 18:29:29 -030034
alshabibca5706c2014-10-04 20:29:41 -070035 private long packets;
36 private long bytes;
37 private FlowEntryState state;
38
39 private long lastSeen = -1;
40
alshabib193525b2014-10-08 18:58:03 -070041 private final int errType;
42
43 private final int errCode;
44
alshabibca5706c2014-10-04 20:29:41 -070045 public DefaultFlowEntry(FlowRule rule, FlowEntryState state,
Thiago Santos877914d2016-07-20 18:29:29 -030046 long life, TimeUnit lifeTimeUnit, long packets, long bytes) {
alshabibca5706c2014-10-04 20:29:41 -070047 super(rule);
48 this.state = state;
Thiago Santos877914d2016-07-20 18:29:29 -030049 this.life = lifeTimeUnit.toNanos(life);
alshabibca5706c2014-10-04 20:29:41 -070050 this.packets = packets;
51 this.bytes = bytes;
alshabib193525b2014-10-08 18:58:03 -070052 this.errCode = -1;
53 this.errType = -1;
alshabibca5706c2014-10-04 20:29:41 -070054 this.lastSeen = System.currentTimeMillis();
55 }
56
Thiago Santos877914d2016-07-20 18:29:29 -030057 public DefaultFlowEntry(FlowRule rule, FlowEntryState state,
58 long lifeSecs, long packets, long bytes) {
59 this(rule, state, lifeSecs, SECONDS, packets, bytes);
60 }
61
alshabibca5706c2014-10-04 20:29:41 -070062 public DefaultFlowEntry(FlowRule rule) {
Thiago Santos877914d2016-07-20 18:29:29 -030063 this(rule, FlowEntryState.PENDING_ADD, 0, 0, 0);
alshabibca5706c2014-10-04 20:29:41 -070064 }
65
alshabib193525b2014-10-08 18:58:03 -070066 public DefaultFlowEntry(FlowRule rule, int errType, int errCode) {
67 super(rule);
68 this.state = FlowEntryState.FAILED;
69 this.errType = errType;
70 this.errCode = errCode;
Ray Milkey930fc662014-11-11 16:07:45 -080071 this.lastSeen = System.currentTimeMillis();
alshabib193525b2014-10-08 18:58:03 -070072 }
73
alshabibca5706c2014-10-04 20:29:41 -070074 @Override
75 public long life() {
Thiago Santos877914d2016-07-20 18:29:29 -030076 return life(SECONDS);
77 }
78
79 @Override
80 public long life(TimeUnit timeUnit) {
81 return timeUnit.convert(life, NANOSECONDS);
alshabibca5706c2014-10-04 20:29:41 -070082 }
83
84 @Override
85 public long packets() {
86 return packets;
87 }
88
89 @Override
90 public long bytes() {
91 return bytes;
92 }
93
94 @Override
95 public FlowEntryState state() {
96 return this.state;
97 }
98
99 @Override
100 public long lastSeen() {
101 return lastSeen;
102 }
103
104 @Override
105 public void setLastSeen() {
106 this.lastSeen = System.currentTimeMillis();
107 }
108
109 @Override
110 public void setState(FlowEntryState newState) {
111 this.state = newState;
112 }
113
114 @Override
115 public void setLife(long life) {
Thiago Santos877914d2016-07-20 18:29:29 -0300116 setLife(life, SECONDS);
117 }
118
119 @Override
120 public void setLife(long life, TimeUnit timeUnit) {
121 this.life = timeUnit.toNanos(life);
alshabibca5706c2014-10-04 20:29:41 -0700122 }
123
124 @Override
125 public void setPackets(long packets) {
126 this.packets = packets;
127 }
128
129 @Override
130 public void setBytes(long bytes) {
131 this.bytes = bytes;
132 }
133
134 @Override
alshabib193525b2014-10-08 18:58:03 -0700135 public int errType() {
136 return this.errType;
137 }
138
139 @Override
140 public int errCode() {
141 return this.errCode;
142 }
143
144 @Override
alshabibca5706c2014-10-04 20:29:41 -0700145 public String toString() {
146 return toStringHelper(this)
147 .add("rule", super.toString())
148 .add("state", state)
149 .toString();
150 }
alshabibca5706c2014-10-04 20:29:41 -0700151}