Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
Showing
18 changed files
with
287 additions
and
33 deletions
1 | package org.onlab.onos.cli.net; | 1 | package org.onlab.onos.cli.net; |
2 | 2 | ||
3 | -import com.google.common.collect.Maps; | 3 | +import static com.google.common.collect.Lists.newArrayList; |
4 | + | ||
5 | +import java.util.Collections; | ||
6 | +import java.util.List; | ||
7 | +import java.util.Map; | ||
8 | + | ||
9 | +import org.apache.karaf.shell.commands.Argument; | ||
4 | import org.apache.karaf.shell.commands.Command; | 10 | import org.apache.karaf.shell.commands.Command; |
5 | import org.onlab.onos.cli.AbstractShellCommand; | 11 | import org.onlab.onos.cli.AbstractShellCommand; |
6 | import org.onlab.onos.net.Device; | 12 | import org.onlab.onos.net.Device; |
13 | +import org.onlab.onos.net.DeviceId; | ||
7 | import org.onlab.onos.net.device.DeviceService; | 14 | import org.onlab.onos.net.device.DeviceService; |
8 | import org.onlab.onos.net.flow.FlowRule; | 15 | import org.onlab.onos.net.flow.FlowRule; |
9 | import org.onlab.onos.net.flow.FlowRuleService; | 16 | import org.onlab.onos.net.flow.FlowRuleService; |
10 | 17 | ||
11 | -import java.util.Collections; | 18 | +import com.google.common.collect.Maps; |
12 | -import java.util.List; | ||
13 | -import java.util.Map; | ||
14 | - | ||
15 | -import static com.google.common.collect.Lists.newArrayList; | ||
16 | 19 | ||
17 | /** | 20 | /** |
18 | * Lists all currently-known hosts. | 21 | * Lists all currently-known hosts. |
... | @@ -22,14 +25,20 @@ description = "Lists all currently-known flows.") | ... | @@ -22,14 +25,20 @@ description = "Lists all currently-known flows.") |
22 | public class FlowsListCommand extends AbstractShellCommand { | 25 | public class FlowsListCommand extends AbstractShellCommand { |
23 | 26 | ||
24 | private static final String FMT = | 27 | private static final String FMT = |
25 | - " id=%s, selector=%s, treatment=%s, state=%s"; | 28 | + " id=%s, state=%s, bytes=%s, packets=%s, duration=%s, priority=%s"; |
29 | + private static final String TFMT = " treatment=%s"; | ||
30 | + private static final String SFMT = " selector=%s"; | ||
31 | + | ||
32 | + @Argument(index = 0, name = "uri", description = "Device ID", | ||
33 | + required = false, multiValued = false) | ||
34 | + String uri = null; | ||
26 | 35 | ||
27 | @Override | 36 | @Override |
28 | protected void execute() { | 37 | protected void execute() { |
29 | DeviceService deviceService = get(DeviceService.class); | 38 | DeviceService deviceService = get(DeviceService.class); |
30 | FlowRuleService service = get(FlowRuleService.class); | 39 | FlowRuleService service = get(FlowRuleService.class); |
31 | Map<Device, List<FlowRule>> flows = getSortedFlows(deviceService, service); | 40 | Map<Device, List<FlowRule>> flows = getSortedFlows(deviceService, service); |
32 | - for (Device d : deviceService.getDevices()) { | 41 | + for (Device d : flows.keySet()) { |
33 | printFlows(d, flows.get(d)); | 42 | printFlows(d, flows.get(d)); |
34 | } | 43 | } |
35 | } | 44 | } |
... | @@ -42,8 +51,10 @@ public class FlowsListCommand extends AbstractShellCommand { | ... | @@ -42,8 +51,10 @@ public class FlowsListCommand extends AbstractShellCommand { |
42 | */ | 51 | */ |
43 | protected Map<Device, List<FlowRule>> getSortedFlows(DeviceService deviceService, FlowRuleService service) { | 52 | protected Map<Device, List<FlowRule>> getSortedFlows(DeviceService deviceService, FlowRuleService service) { |
44 | Map<Device, List<FlowRule>> flows = Maps.newHashMap(); | 53 | Map<Device, List<FlowRule>> flows = Maps.newHashMap(); |
45 | - List<FlowRule> rules; | 54 | + List<FlowRule> rules = newArrayList(); |
46 | - for (Device d : deviceService.getDevices()) { | 55 | + Iterable<Device> devices = uri == null ? deviceService.getDevices() : |
56 | + Collections.singletonList(deviceService.getDevice(DeviceId.deviceId(uri))); | ||
57 | + for (Device d : devices) { | ||
47 | rules = newArrayList(service.getFlowEntries(d.id())); | 58 | rules = newArrayList(service.getFlowEntries(d.id())); |
48 | Collections.sort(rules, Comparators.FLOW_RULE_COMPARATOR); | 59 | Collections.sort(rules, Comparators.FLOW_RULE_COMPARATOR); |
49 | flows.put(d, rules); | 60 | flows.put(d, rules); |
... | @@ -58,8 +69,15 @@ public class FlowsListCommand extends AbstractShellCommand { | ... | @@ -58,8 +69,15 @@ public class FlowsListCommand extends AbstractShellCommand { |
58 | */ | 69 | */ |
59 | protected void printFlows(Device d, List<FlowRule> flows) { | 70 | protected void printFlows(Device d, List<FlowRule> flows) { |
60 | print("Device: " + d.id()); | 71 | print("Device: " + d.id()); |
72 | + if (flows == null | flows.isEmpty()) { | ||
73 | + print(" %s", "No flows installed."); | ||
74 | + return; | ||
75 | + } | ||
61 | for (FlowRule f : flows) { | 76 | for (FlowRule f : flows) { |
62 | - print(FMT, f.id().value(), f.selector(), f.treatment(), f.state()); | 77 | + print(FMT, Long.toHexString(f.id().value()), f.state(), f.bytes(), |
78 | + f.packets(), f.lifeMillis(), f.priority()); | ||
79 | + print(SFMT, f.selector().criteria()); | ||
80 | + print(TFMT, f.treatment().instructions()); | ||
63 | } | 81 | } |
64 | 82 | ||
65 | } | 83 | } | ... | ... |
1 | package org.onlab.onos.cli.net; | 1 | package org.onlab.onos.cli.net; |
2 | 2 | ||
3 | +import java.util.Iterator; | ||
4 | +import java.util.List; | ||
5 | +import java.util.SortedSet; | ||
6 | + | ||
3 | import org.apache.karaf.shell.console.Completer; | 7 | import org.apache.karaf.shell.console.Completer; |
4 | import org.apache.karaf.shell.console.completer.StringsCompleter; | 8 | import org.apache.karaf.shell.console.completer.StringsCompleter; |
5 | import org.onlab.onos.cli.AbstractShellCommand; | 9 | import org.onlab.onos.cli.AbstractShellCommand; |
6 | import org.onlab.onos.net.Host; | 10 | import org.onlab.onos.net.Host; |
7 | import org.onlab.onos.net.host.HostService; | 11 | import org.onlab.onos.net.host.HostService; |
8 | 12 | ||
9 | -import java.util.Iterator; | ||
10 | -import java.util.List; | ||
11 | -import java.util.SortedSet; | ||
12 | - | ||
13 | public class HostIdCompleter implements Completer { | 13 | public class HostIdCompleter implements Completer { |
14 | 14 | ||
15 | @Override | 15 | @Override | ... | ... |
... | @@ -72,6 +72,9 @@ | ... | @@ -72,6 +72,9 @@ |
72 | 72 | ||
73 | <command> | 73 | <command> |
74 | <action class="org.onlab.onos.cli.net.FlowsListCommand"/> | 74 | <action class="org.onlab.onos.cli.net.FlowsListCommand"/> |
75 | + <completers> | ||
76 | + <ref component-id="deviceIdCompleter"/> | ||
77 | + </completers> | ||
75 | </command> | 78 | </command> |
76 | 79 | ||
77 | <command> | 80 | <command> | ... | ... |
1 | package org.onlab.onos.net.flow.criteria; | 1 | package org.onlab.onos.net.flow.criteria; |
2 | 2 | ||
3 | +import static com.google.common.base.MoreObjects.toStringHelper; | ||
4 | + | ||
3 | import org.onlab.onos.net.PortNumber; | 5 | import org.onlab.onos.net.PortNumber; |
4 | import org.onlab.onos.net.flow.criteria.Criterion.Type; | 6 | import org.onlab.onos.net.flow.criteria.Criterion.Type; |
5 | import org.onlab.packet.IpPrefix; | 7 | import org.onlab.packet.IpPrefix; |
... | @@ -129,6 +131,12 @@ public final class Criteria { | ... | @@ -129,6 +131,12 @@ public final class Criteria { |
129 | public PortNumber port() { | 131 | public PortNumber port() { |
130 | return this.port; | 132 | return this.port; |
131 | } | 133 | } |
134 | + | ||
135 | + @Override | ||
136 | + public String toString() { | ||
137 | + return toStringHelper(type().toString()) | ||
138 | + .add("port", port).toString(); | ||
139 | + } | ||
132 | } | 140 | } |
133 | 141 | ||
134 | 142 | ||
... | @@ -149,6 +157,13 @@ public final class Criteria { | ... | @@ -149,6 +157,13 @@ public final class Criteria { |
149 | public MacAddress mac() { | 157 | public MacAddress mac() { |
150 | return this.mac; | 158 | return this.mac; |
151 | } | 159 | } |
160 | + | ||
161 | + @Override | ||
162 | + public String toString() { | ||
163 | + return toStringHelper(type().toString()) | ||
164 | + .add("mac", mac).toString(); | ||
165 | + } | ||
166 | + | ||
152 | } | 167 | } |
153 | 168 | ||
154 | public static final class EthTypeCriterion implements Criterion { | 169 | public static final class EthTypeCriterion implements Criterion { |
... | @@ -168,6 +183,12 @@ public final class Criteria { | ... | @@ -168,6 +183,12 @@ public final class Criteria { |
168 | return ethType; | 183 | return ethType; |
169 | } | 184 | } |
170 | 185 | ||
186 | + @Override | ||
187 | + public String toString() { | ||
188 | + return toStringHelper(type().toString()) | ||
189 | + .add("ethType", Long.toHexString(ethType)).toString(); | ||
190 | + } | ||
191 | + | ||
171 | } | 192 | } |
172 | 193 | ||
173 | 194 | ||
... | @@ -190,6 +211,11 @@ public final class Criteria { | ... | @@ -190,6 +211,11 @@ public final class Criteria { |
190 | return this.ip; | 211 | return this.ip; |
191 | } | 212 | } |
192 | 213 | ||
214 | + @Override | ||
215 | + public String toString() { | ||
216 | + return toStringHelper(type().toString()) | ||
217 | + .add("ip", ip).toString(); | ||
218 | + } | ||
193 | 219 | ||
194 | } | 220 | } |
195 | 221 | ||
... | @@ -211,6 +237,12 @@ public final class Criteria { | ... | @@ -211,6 +237,12 @@ public final class Criteria { |
211 | return proto; | 237 | return proto; |
212 | } | 238 | } |
213 | 239 | ||
240 | + @Override | ||
241 | + public String toString() { | ||
242 | + return toStringHelper(type().toString()) | ||
243 | + .add("protocol", Long.toHexString(proto)).toString(); | ||
244 | + } | ||
245 | + | ||
214 | } | 246 | } |
215 | 247 | ||
216 | 248 | ||
... | @@ -231,6 +263,12 @@ public final class Criteria { | ... | @@ -231,6 +263,12 @@ public final class Criteria { |
231 | return vlanPcp; | 263 | return vlanPcp; |
232 | } | 264 | } |
233 | 265 | ||
266 | + @Override | ||
267 | + public String toString() { | ||
268 | + return toStringHelper(type().toString()) | ||
269 | + .add("pcp", Long.toHexString(vlanPcp)).toString(); | ||
270 | + } | ||
271 | + | ||
234 | } | 272 | } |
235 | 273 | ||
236 | 274 | ||
... | @@ -252,6 +290,12 @@ public final class Criteria { | ... | @@ -252,6 +290,12 @@ public final class Criteria { |
252 | return vlanId; | 290 | return vlanId; |
253 | } | 291 | } |
254 | 292 | ||
293 | + @Override | ||
294 | + public String toString() { | ||
295 | + return toStringHelper(type().toString()) | ||
296 | + .add("id", vlanId).toString(); | ||
297 | + } | ||
298 | + | ||
255 | } | 299 | } |
256 | 300 | ||
257 | 301 | ... | ... |
1 | package org.onlab.onos.net.flow.instructions; | 1 | package org.onlab.onos.net.flow.instructions; |
2 | 2 | ||
3 | +import static com.google.common.base.MoreObjects.toStringHelper; | ||
3 | import static com.google.common.base.Preconditions.checkNotNull; | 4 | import static com.google.common.base.Preconditions.checkNotNull; |
4 | 5 | ||
5 | import org.onlab.onos.net.PortNumber; | 6 | import org.onlab.onos.net.PortNumber; |
... | @@ -47,7 +48,7 @@ public final class Instructions { | ... | @@ -47,7 +48,7 @@ public final class Instructions { |
47 | */ | 48 | */ |
48 | public static L2ModificationInstruction modL2Src(MacAddress addr) { | 49 | public static L2ModificationInstruction modL2Src(MacAddress addr) { |
49 | checkNotNull(addr, "Src l2 address cannot be null"); | 50 | checkNotNull(addr, "Src l2 address cannot be null"); |
50 | - return new ModEtherInstruction(L2SubType.L2_SRC, addr); | 51 | + return new ModEtherInstruction(L2SubType.ETH_SRC, addr); |
51 | } | 52 | } |
52 | 53 | ||
53 | /** | 54 | /** |
... | @@ -57,7 +58,7 @@ public final class Instructions { | ... | @@ -57,7 +58,7 @@ public final class Instructions { |
57 | */ | 58 | */ |
58 | public static L2ModificationInstruction modL2Dst(MacAddress addr) { | 59 | public static L2ModificationInstruction modL2Dst(MacAddress addr) { |
59 | checkNotNull(addr, "Dst l2 address cannot be null"); | 60 | checkNotNull(addr, "Dst l2 address cannot be null"); |
60 | - return new L2ModificationInstruction.ModEtherInstruction(L2SubType.L2_DST, addr); | 61 | + return new L2ModificationInstruction.ModEtherInstruction(L2SubType.ETH_DST, addr); |
61 | } | 62 | } |
62 | 63 | ||
63 | /** | 64 | /** |
... | @@ -87,7 +88,7 @@ public final class Instructions { | ... | @@ -87,7 +88,7 @@ public final class Instructions { |
87 | */ | 88 | */ |
88 | public static L3ModificationInstruction modL3Src(IpPrefix addr) { | 89 | public static L3ModificationInstruction modL3Src(IpPrefix addr) { |
89 | checkNotNull(addr, "Src l3 address cannot be null"); | 90 | checkNotNull(addr, "Src l3 address cannot be null"); |
90 | - return new ModIPInstruction(L3SubType.L3_SRC, addr); | 91 | + return new ModIPInstruction(L3SubType.IP_SRC, addr); |
91 | } | 92 | } |
92 | 93 | ||
93 | /** | 94 | /** |
... | @@ -97,7 +98,7 @@ public final class Instructions { | ... | @@ -97,7 +98,7 @@ public final class Instructions { |
97 | */ | 98 | */ |
98 | public static L3ModificationInstruction modL3Dst(IpPrefix addr) { | 99 | public static L3ModificationInstruction modL3Dst(IpPrefix addr) { |
99 | checkNotNull(addr, "Dst l3 address cannot be null"); | 100 | checkNotNull(addr, "Dst l3 address cannot be null"); |
100 | - return new ModIPInstruction(L3SubType.L3_DST, addr); | 101 | + return new ModIPInstruction(L3SubType.IP_DST, addr); |
101 | } | 102 | } |
102 | 103 | ||
103 | 104 | ||
... | @@ -110,6 +111,12 @@ public final class Instructions { | ... | @@ -110,6 +111,12 @@ public final class Instructions { |
110 | public Type type() { | 111 | public Type type() { |
111 | return Type.DROP; | 112 | return Type.DROP; |
112 | } | 113 | } |
114 | + | ||
115 | + @Override | ||
116 | + public String toString() { | ||
117 | + return toStringHelper(type()).toString(); | ||
118 | + | ||
119 | + } | ||
113 | } | 120 | } |
114 | 121 | ||
115 | 122 | ||
... | @@ -128,6 +135,11 @@ public final class Instructions { | ... | @@ -128,6 +135,11 @@ public final class Instructions { |
128 | public Type type() { | 135 | public Type type() { |
129 | return Type.OUTPUT; | 136 | return Type.OUTPUT; |
130 | } | 137 | } |
138 | + @Override | ||
139 | + public String toString() { | ||
140 | + return toStringHelper(type().toString()) | ||
141 | + .add("port", port).toString(); | ||
142 | + } | ||
131 | } | 143 | } |
132 | 144 | ||
133 | } | 145 | } | ... | ... |
1 | package org.onlab.onos.net.flow.instructions; | 1 | package org.onlab.onos.net.flow.instructions; |
2 | 2 | ||
3 | +import static com.google.common.base.MoreObjects.toStringHelper; | ||
4 | + | ||
3 | import org.onlab.packet.MacAddress; | 5 | import org.onlab.packet.MacAddress; |
4 | import org.onlab.packet.VlanId; | 6 | import org.onlab.packet.VlanId; |
5 | 7 | ||
... | @@ -15,12 +17,12 @@ public abstract class L2ModificationInstruction implements Instruction { | ... | @@ -15,12 +17,12 @@ public abstract class L2ModificationInstruction implements Instruction { |
15 | /** | 17 | /** |
16 | * Ether src modification. | 18 | * Ether src modification. |
17 | */ | 19 | */ |
18 | - L2_SRC, | 20 | + ETH_SRC, |
19 | 21 | ||
20 | /** | 22 | /** |
21 | * Ether dst modification. | 23 | * Ether dst modification. |
22 | */ | 24 | */ |
23 | - L2_DST, | 25 | + ETH_DST, |
24 | 26 | ||
25 | /** | 27 | /** |
26 | * VLAN id modification. | 28 | * VLAN id modification. |
... | @@ -66,6 +68,13 @@ public abstract class L2ModificationInstruction implements Instruction { | ... | @@ -66,6 +68,13 @@ public abstract class L2ModificationInstruction implements Instruction { |
66 | return this.mac; | 68 | return this.mac; |
67 | } | 69 | } |
68 | 70 | ||
71 | + @Override | ||
72 | + public String toString() { | ||
73 | + return toStringHelper(subtype().toString()) | ||
74 | + .add("mac", mac).toString(); | ||
75 | + } | ||
76 | + | ||
77 | + | ||
69 | } | 78 | } |
70 | 79 | ||
71 | /** | 80 | /** |
... | @@ -88,6 +97,12 @@ public abstract class L2ModificationInstruction implements Instruction { | ... | @@ -88,6 +97,12 @@ public abstract class L2ModificationInstruction implements Instruction { |
88 | return this.vlanId; | 97 | return this.vlanId; |
89 | } | 98 | } |
90 | 99 | ||
100 | + @Override | ||
101 | + public String toString() { | ||
102 | + return toStringHelper(subtype().toString()) | ||
103 | + .add("id", vlanId).toString(); | ||
104 | + } | ||
105 | + | ||
91 | } | 106 | } |
92 | 107 | ||
93 | /** | 108 | /** |
... | @@ -110,6 +125,12 @@ public abstract class L2ModificationInstruction implements Instruction { | ... | @@ -110,6 +125,12 @@ public abstract class L2ModificationInstruction implements Instruction { |
110 | return this.vlanPcp; | 125 | return this.vlanPcp; |
111 | } | 126 | } |
112 | 127 | ||
128 | + @Override | ||
129 | + public String toString() { | ||
130 | + return toStringHelper(subtype().toString()) | ||
131 | + .add("pcp", Long.toHexString(vlanPcp)).toString(); | ||
132 | + } | ||
133 | + | ||
113 | } | 134 | } |
114 | 135 | ||
115 | 136 | ... | ... |
1 | package org.onlab.onos.net.flow.instructions; | 1 | package org.onlab.onos.net.flow.instructions; |
2 | 2 | ||
3 | +import static com.google.common.base.MoreObjects.toStringHelper; | ||
4 | + | ||
3 | import org.onlab.packet.IpPrefix; | 5 | import org.onlab.packet.IpPrefix; |
4 | 6 | ||
5 | /** | 7 | /** |
... | @@ -14,12 +16,12 @@ public abstract class L3ModificationInstruction implements Instruction { | ... | @@ -14,12 +16,12 @@ public abstract class L3ModificationInstruction implements Instruction { |
14 | /** | 16 | /** |
15 | * Ether src modification. | 17 | * Ether src modification. |
16 | */ | 18 | */ |
17 | - L3_SRC, | 19 | + IP_SRC, |
18 | 20 | ||
19 | /** | 21 | /** |
20 | * Ether dst modification. | 22 | * Ether dst modification. |
21 | */ | 23 | */ |
22 | - L3_DST | 24 | + IP_DST |
23 | 25 | ||
24 | //TODO: remaining types | 26 | //TODO: remaining types |
25 | } | 27 | } |
... | @@ -58,5 +60,11 @@ public abstract class L3ModificationInstruction implements Instruction { | ... | @@ -58,5 +60,11 @@ public abstract class L3ModificationInstruction implements Instruction { |
58 | return this.ip; | 60 | return this.ip; |
59 | } | 61 | } |
60 | 62 | ||
63 | + @Override | ||
64 | + public String toString() { | ||
65 | + return toStringHelper(subtype().toString()) | ||
66 | + .add("ip", ip).toString(); | ||
67 | + } | ||
68 | + | ||
61 | } | 69 | } |
62 | } | 70 | } | ... | ... |
... | @@ -252,7 +252,6 @@ implements FlowRuleService, FlowRuleProviderRegistry { | ... | @@ -252,7 +252,6 @@ implements FlowRuleService, FlowRuleProviderRegistry { |
252 | } | 252 | } |
253 | } | 253 | } |
254 | for (FlowRule rule : storedRules) { | 254 | for (FlowRule rule : storedRules) { |
255 | - log.info("missing rule is {}", rule); | ||
256 | // there are rules in the store that aren't on the switch | 255 | // there are rules in the store that aren't on the switch |
257 | flowMissing(rule); | 256 | flowMissing(rule); |
258 | 257 | ... | ... |
1 | +package org.onlab.onos.store.impl; | ||
2 | + | ||
3 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
4 | +import static com.google.common.base.Preconditions.checkArgument; | ||
5 | + | ||
6 | +import java.util.Objects; | ||
7 | + | ||
8 | +import org.onlab.onos.net.ElementId; | ||
9 | +import org.onlab.onos.store.Timestamp; | ||
10 | + | ||
11 | +import com.google.common.base.MoreObjects; | ||
12 | +import com.google.common.collect.ComparisonChain; | ||
13 | + | ||
14 | +// If it is store specific, implement serializable interfaces? | ||
15 | +/** | ||
16 | + * Default implementation of Timestamp. | ||
17 | + */ | ||
18 | +public final class OnosTimestamp implements Timestamp { | ||
19 | + | ||
20 | + private final ElementId id; | ||
21 | + private final int termNumber; | ||
22 | + private final int sequenceNumber; | ||
23 | + | ||
24 | + /** | ||
25 | + * Default version tuple. | ||
26 | + * | ||
27 | + * @param id identifier of the element | ||
28 | + * @param termNumber the mastership termNumber | ||
29 | + * @param sequenceNumber the sequenceNumber number within the termNumber | ||
30 | + */ | ||
31 | + public OnosTimestamp(ElementId id, int termNumber, int sequenceNumber) { | ||
32 | + this.id = checkNotNull(id); | ||
33 | + this.termNumber = termNumber; | ||
34 | + this.sequenceNumber = sequenceNumber; | ||
35 | + } | ||
36 | + | ||
37 | + @Override | ||
38 | + public int compareTo(Timestamp o) { | ||
39 | + checkArgument(o instanceof OnosTimestamp, "Must be OnosTimestamp", o); | ||
40 | + OnosTimestamp that = (OnosTimestamp) o; | ||
41 | + checkArgument(this.id.equals(that.id), | ||
42 | + "Cannot compare version for different element this:%s, that:%s", | ||
43 | + this, that); | ||
44 | + | ||
45 | + return ComparisonChain.start() | ||
46 | + .compare(this.termNumber, that.termNumber) | ||
47 | + .compare(this.sequenceNumber, that.sequenceNumber) | ||
48 | + .result(); | ||
49 | + } | ||
50 | + | ||
51 | + @Override | ||
52 | + public int hashCode() { | ||
53 | + return Objects.hash(id, termNumber, sequenceNumber); | ||
54 | + } | ||
55 | + | ||
56 | + @Override | ||
57 | + public boolean equals(Object obj) { | ||
58 | + if (this == obj) { | ||
59 | + return true; | ||
60 | + } | ||
61 | + if (!(obj instanceof OnosTimestamp)) { | ||
62 | + return false; | ||
63 | + } | ||
64 | + OnosTimestamp that = (OnosTimestamp) obj; | ||
65 | + return Objects.equals(this.id, that.id) && | ||
66 | + Objects.equals(this.termNumber, that.termNumber) && | ||
67 | + Objects.equals(this.sequenceNumber, that.sequenceNumber); | ||
68 | + } | ||
69 | + | ||
70 | + @Override | ||
71 | + public String toString() { | ||
72 | + return MoreObjects.toStringHelper(getClass()) | ||
73 | + .add("id", id) | ||
74 | + .add("termNumber", termNumber) | ||
75 | + .add("sequenceNumber", sequenceNumber) | ||
76 | + .toString(); | ||
77 | + } | ||
78 | + | ||
79 | + /** | ||
80 | + * Returns the element. | ||
81 | + * | ||
82 | + * @return element identifier | ||
83 | + */ | ||
84 | + public ElementId id() { | ||
85 | + return id; | ||
86 | + } | ||
87 | + | ||
88 | + /** | ||
89 | + * Returns the termNumber. | ||
90 | + * | ||
91 | + * @return termNumber | ||
92 | + */ | ||
93 | + public int termNumber() { | ||
94 | + return termNumber; | ||
95 | + } | ||
96 | + | ||
97 | + /** | ||
98 | + * Returns the sequenceNumber number. | ||
99 | + * | ||
100 | + * @return sequenceNumber | ||
101 | + */ | ||
102 | + public int sequenceNumber() { | ||
103 | + return sequenceNumber; | ||
104 | + } | ||
105 | +} |
... | @@ -4,7 +4,9 @@ import com.hazelcast.config.Config; | ... | @@ -4,7 +4,9 @@ import com.hazelcast.config.Config; |
4 | import com.hazelcast.config.FileSystemXmlConfig; | 4 | import com.hazelcast.config.FileSystemXmlConfig; |
5 | import com.hazelcast.core.Hazelcast; | 5 | import com.hazelcast.core.Hazelcast; |
6 | import com.hazelcast.core.HazelcastInstance; | 6 | import com.hazelcast.core.HazelcastInstance; |
7 | + | ||
7 | import de.javakaffee.kryoserializers.URISerializer; | 8 | import de.javakaffee.kryoserializers.URISerializer; |
9 | + | ||
8 | import org.apache.felix.scr.annotations.Activate; | 10 | import org.apache.felix.scr.annotations.Activate; |
9 | import org.apache.felix.scr.annotations.Component; | 11 | import org.apache.felix.scr.annotations.Component; |
10 | import org.apache.felix.scr.annotations.Deactivate; | 12 | import org.apache.felix.scr.annotations.Deactivate; |
... | @@ -26,6 +28,7 @@ import org.onlab.onos.store.serializers.DefaultPortSerializer; | ... | @@ -26,6 +28,7 @@ import org.onlab.onos.store.serializers.DefaultPortSerializer; |
26 | import org.onlab.onos.store.serializers.DeviceIdSerializer; | 28 | import org.onlab.onos.store.serializers.DeviceIdSerializer; |
27 | import org.onlab.onos.store.serializers.IpPrefixSerializer; | 29 | import org.onlab.onos.store.serializers.IpPrefixSerializer; |
28 | import org.onlab.onos.store.serializers.NodeIdSerializer; | 30 | import org.onlab.onos.store.serializers.NodeIdSerializer; |
31 | +import org.onlab.onos.store.serializers.OnosTimestampSerializer; | ||
29 | import org.onlab.onos.store.serializers.PortNumberSerializer; | 32 | import org.onlab.onos.store.serializers.PortNumberSerializer; |
30 | import org.onlab.onos.store.serializers.ProviderIdSerializer; | 33 | import org.onlab.onos.store.serializers.ProviderIdSerializer; |
31 | import org.onlab.packet.IpPrefix; | 34 | import org.onlab.packet.IpPrefix; |
... | @@ -90,6 +93,7 @@ public class StoreManager implements StoreService { | ... | @@ -90,6 +93,7 @@ public class StoreManager implements StoreService { |
90 | .register(DeviceId.class, new DeviceIdSerializer()) | 93 | .register(DeviceId.class, new DeviceIdSerializer()) |
91 | .register(PortNumber.class, new PortNumberSerializer()) | 94 | .register(PortNumber.class, new PortNumberSerializer()) |
92 | .register(DefaultPort.class, new DefaultPortSerializer()) | 95 | .register(DefaultPort.class, new DefaultPortSerializer()) |
96 | + .register(OnosTimestamp.class, new OnosTimestampSerializer()) | ||
93 | .build() | 97 | .build() |
94 | .populate(10); | 98 | .populate(10); |
95 | } | 99 | } | ... | ... |
... | @@ -9,7 +9,6 @@ import com.esotericsoftware.kryo.Serializer; | ... | @@ -9,7 +9,6 @@ import com.esotericsoftware.kryo.Serializer; |
9 | import com.esotericsoftware.kryo.io.Input; | 9 | import com.esotericsoftware.kryo.io.Input; |
10 | import com.esotericsoftware.kryo.io.Output; | 10 | import com.esotericsoftware.kryo.io.Output; |
11 | 11 | ||
12 | -// TODO move to util, etc. | ||
13 | /** | 12 | /** |
14 | * Kryo Serializer for {@link DefaultPort}. | 13 | * Kryo Serializer for {@link DefaultPort}. |
15 | */ | 14 | */ | ... | ... |
... | @@ -9,7 +9,6 @@ import com.esotericsoftware.kryo.Serializer; | ... | @@ -9,7 +9,6 @@ import com.esotericsoftware.kryo.Serializer; |
9 | import com.esotericsoftware.kryo.io.Input; | 9 | import com.esotericsoftware.kryo.io.Input; |
10 | import com.esotericsoftware.kryo.io.Output; | 10 | import com.esotericsoftware.kryo.io.Output; |
11 | 11 | ||
12 | -//TODO move to util, etc. | ||
13 | /** | 12 | /** |
14 | * Kryo Serializer for {@link DeviceId}. | 13 | * Kryo Serializer for {@link DeviceId}. |
15 | */ | 14 | */ | ... | ... |
... | @@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer; | ... | @@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer; |
7 | import com.esotericsoftware.kryo.io.Input; | 7 | import com.esotericsoftware.kryo.io.Input; |
8 | import com.esotericsoftware.kryo.io.Output; | 8 | import com.esotericsoftware.kryo.io.Output; |
9 | 9 | ||
10 | -// TODO move to util, etc. | ||
11 | /** | 10 | /** |
12 | * Kryo Serializer for {@link IpPrefix}. | 11 | * Kryo Serializer for {@link IpPrefix}. |
13 | */ | 12 | */ | ... | ... |
1 | +package org.onlab.onos.store.serializers; | ||
2 | + | ||
3 | +import org.onlab.onos.net.ElementId; | ||
4 | +import org.onlab.onos.store.impl.OnosTimestamp; | ||
5 | + | ||
6 | +import com.esotericsoftware.kryo.Kryo; | ||
7 | +import com.esotericsoftware.kryo.Serializer; | ||
8 | +import com.esotericsoftware.kryo.io.Input; | ||
9 | +import com.esotericsoftware.kryo.io.Output; | ||
10 | + | ||
11 | +/** | ||
12 | + * Kryo Serializer for {@link OnosTimestamp}. | ||
13 | + */ | ||
14 | +public class OnosTimestampSerializer extends Serializer<OnosTimestamp> { | ||
15 | + | ||
16 | + /** | ||
17 | + * Default constructor. | ||
18 | + */ | ||
19 | + public OnosTimestampSerializer() { | ||
20 | + // non-null, immutable | ||
21 | + super(false, true); | ||
22 | + } | ||
23 | + @Override | ||
24 | + public void write(Kryo kryo, Output output, OnosTimestamp object) { | ||
25 | + kryo.writeClassAndObject(output, object.id()); | ||
26 | + output.writeInt(object.termNumber()); | ||
27 | + output.writeInt(object.sequenceNumber()); | ||
28 | + } | ||
29 | + | ||
30 | + @Override | ||
31 | + public OnosTimestamp read(Kryo kryo, Input input, Class<OnosTimestamp> type) { | ||
32 | + ElementId id = (ElementId) kryo.readClassAndObject(input); | ||
33 | + final int term = input.readInt(); | ||
34 | + final int sequence = input.readInt(); | ||
35 | + return new OnosTimestamp(id, term, sequence); | ||
36 | + } | ||
37 | +} |
... | @@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer; | ... | @@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer; |
7 | import com.esotericsoftware.kryo.io.Input; | 7 | import com.esotericsoftware.kryo.io.Input; |
8 | import com.esotericsoftware.kryo.io.Output; | 8 | import com.esotericsoftware.kryo.io.Output; |
9 | 9 | ||
10 | -// TODO move to util, etc. | ||
11 | /** | 10 | /** |
12 | * Serializer for {@link PortNumber}. | 11 | * Serializer for {@link PortNumber}. |
13 | */ | 12 | */ | ... | ... |
... | @@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer; | ... | @@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer; |
7 | import com.esotericsoftware.kryo.io.Input; | 7 | import com.esotericsoftware.kryo.io.Input; |
8 | import com.esotericsoftware.kryo.io.Output; | 8 | import com.esotericsoftware.kryo.io.Output; |
9 | 9 | ||
10 | -//TODO move to util, etc. | ||
11 | /** | 10 | /** |
12 | * Serializer for {@link ProviderId}. | 11 | * Serializer for {@link ProviderId}. |
13 | */ | 12 | */ | ... | ... |
... | @@ -133,10 +133,10 @@ public class FlowModBuilder { | ... | @@ -133,10 +133,10 @@ public class FlowModBuilder { |
133 | L3ModificationInstruction l3m = (L3ModificationInstruction) i; | 133 | L3ModificationInstruction l3m = (L3ModificationInstruction) i; |
134 | ModIPInstruction ip; | 134 | ModIPInstruction ip; |
135 | switch (l3m.subtype()) { | 135 | switch (l3m.subtype()) { |
136 | - case L3_DST: | 136 | + case IP_DST: |
137 | ip = (ModIPInstruction) i; | 137 | ip = (ModIPInstruction) i; |
138 | return factory.actions().setNwDst(IPv4Address.of(ip.ip().toInt())); | 138 | return factory.actions().setNwDst(IPv4Address.of(ip.ip().toInt())); |
139 | - case L3_SRC: | 139 | + case IP_SRC: |
140 | ip = (ModIPInstruction) i; | 140 | ip = (ModIPInstruction) i; |
141 | return factory.actions().setNwSrc(IPv4Address.of(ip.ip().toInt())); | 141 | return factory.actions().setNwSrc(IPv4Address.of(ip.ip().toInt())); |
142 | default: | 142 | default: |
... | @@ -150,10 +150,10 @@ public class FlowModBuilder { | ... | @@ -150,10 +150,10 @@ public class FlowModBuilder { |
150 | L2ModificationInstruction l2m = (L2ModificationInstruction) i; | 150 | L2ModificationInstruction l2m = (L2ModificationInstruction) i; |
151 | ModEtherInstruction eth; | 151 | ModEtherInstruction eth; |
152 | switch (l2m.subtype()) { | 152 | switch (l2m.subtype()) { |
153 | - case L2_DST: | 153 | + case ETH_DST: |
154 | eth = (ModEtherInstruction) l2m; | 154 | eth = (ModEtherInstruction) l2m; |
155 | return factory.actions().setDlDst(MacAddress.of(eth.mac().toLong())); | 155 | return factory.actions().setDlDst(MacAddress.of(eth.mac().toLong())); |
156 | - case L2_SRC: | 156 | + case ETH_SRC: |
157 | eth = (ModEtherInstruction) l2m; | 157 | eth = (ModEtherInstruction) l2m; |
158 | return factory.actions().setDlSrc(MacAddress.of(eth.mac().toLong())); | 158 | return factory.actions().setDlSrc(MacAddress.of(eth.mac().toLong())); |
159 | case VLAN_ID: | 159 | case VLAN_ID: | ... | ... |
-
Please register or login to post a comment