tom

Fixed traffic selector builder to allow only one criterion.

Temporarily disabled flow rule time-out.
...@@ -184,13 +184,13 @@ public class ReactiveForwarding { ...@@ -184,13 +184,13 @@ public class ReactiveForwarding {
184 184
185 // Install the flow rule to handle this type of message from now on. 185 // Install the flow rule to handle this type of message from now on.
186 Ethernet inPkt = context.inPacket().parsed(); 186 Ethernet inPkt = context.inPacket().parsed();
187 - TrafficSelector.Builder builder = new DefaultTrafficSelector.Builder(); 187 + TrafficSelector.Builder builder = DefaultTrafficSelector.builder();
188 builder.matchEthType(inPkt.getEtherType()) 188 builder.matchEthType(inPkt.getEtherType())
189 .matchEthSrc(inPkt.getSourceMAC()) 189 .matchEthSrc(inPkt.getSourceMAC())
190 .matchEthDst(inPkt.getDestinationMAC()) 190 .matchEthDst(inPkt.getDestinationMAC())
191 .matchInport(context.inPacket().receivedFrom().port()); 191 .matchInport(context.inPacket().receivedFrom().port());
192 192
193 - TrafficTreatment.Builder treat = new DefaultTrafficTreatment.Builder(); 193 + TrafficTreatment.Builder treat = DefaultTrafficTreatment.builder();
194 treat.setOutput(portNumber); 194 treat.setOutput(portNumber);
195 195
196 FlowRule f = new DefaultFlowRule(context.inPacket().receivedFrom().deviceId(), 196 FlowRule f = new DefaultFlowRule(context.inPacket().receivedFrom().deviceId(),
......
...@@ -39,19 +39,15 @@ public class IntentInstallCommand extends AbstractShellCommand { ...@@ -39,19 +39,15 @@ public class IntentInstallCommand extends AbstractShellCommand {
39 HostId srcId = HostId.hostId(src); 39 HostId srcId = HostId.hostId(src);
40 HostId dstId = HostId.hostId(dst); 40 HostId dstId = HostId.hostId(dst);
41 41
42 - TrafficSelector.Builder builder = new DefaultTrafficSelector.Builder(); 42 + TrafficSelector.Builder builder = DefaultTrafficSelector.builder();
43 - builder 43 + builder.matchEthSrc(hosts.getHost(srcId).mac())
44 - .matchEthSrc(hosts.getHost(srcId).mac())
45 .matchEthDst(hosts.getHost(dstId).mac()); 44 .matchEthDst(hosts.getHost(dstId).mac());
46 45
47 - TrafficTreatment.Builder treat = new DefaultTrafficTreatment.Builder(); 46 + TrafficTreatment.Builder treat = DefaultTrafficTreatment.builder();
48 47
49 - HostToHostIntent intent = new HostToHostIntent( 48 + HostToHostIntent intent =
50 - new IntentId(id++), 49 + new HostToHostIntent(new IntentId(id++), srcId, dstId,
51 - srcId, 50 + builder.build(), treat.build());
52 - dstId,
53 - builder.build(),
54 - treat.build());
55 51
56 log.info("Adding intent {}", intent); 52 log.info("Adding intent {}", intent);
57 53
......
1 package org.onlab.onos.net.flow; 1 package org.onlab.onos.net.flow;
2 2
3 -import static org.slf4j.LoggerFactory.getLogger; 3 +import com.google.common.collect.ImmutableSet;
4 -
5 -import java.util.Collections;
6 -import java.util.HashSet;
7 -import java.util.Objects;
8 -import java.util.Set;
9 -
10 import org.onlab.onos.net.PortNumber; 4 import org.onlab.onos.net.PortNumber;
11 import org.onlab.onos.net.flow.criteria.Criteria; 5 import org.onlab.onos.net.flow.criteria.Criteria;
12 import org.onlab.onos.net.flow.criteria.Criterion; 6 import org.onlab.onos.net.flow.criteria.Criterion;
13 import org.onlab.packet.IpPrefix; 7 import org.onlab.packet.IpPrefix;
14 import org.onlab.packet.MacAddress; 8 import org.onlab.packet.MacAddress;
15 import org.onlab.packet.VlanId; 9 import org.onlab.packet.VlanId;
16 -import org.slf4j.Logger;
17 10
11 +import java.util.Collections;
12 +import java.util.HashMap;
13 +import java.util.Map;
14 +import java.util.Objects;
15 +import java.util.Set;
16 +
17 +/**
18 + * Default traffic selector implementation.
19 + */
18 public final class DefaultTrafficSelector implements TrafficSelector { 20 public final class DefaultTrafficSelector implements TrafficSelector {
19 21
20 - private final Set<Criterion> selector; 22 + private final Set<Criterion> criteria;
21 23
22 - private DefaultTrafficSelector(Set<Criterion> selector) { 24 + /**
23 - this.selector = Collections.unmodifiableSet(selector); 25 + * Creates a new traffic selector with the specified criteria.
26 + *
27 + * @param criteria criteria
28 + */
29 + private DefaultTrafficSelector(Set<Criterion> criteria) {
30 + this.criteria = Collections.unmodifiableSet(criteria);
24 } 31 }
25 32
26 @Override 33 @Override
27 public Set<Criterion> criteria() { 34 public Set<Criterion> criteria() {
28 - return selector; 35 + return criteria;
29 } 36 }
30 37
31 @Override 38 @Override
32 public int hashCode() { 39 public int hashCode() {
33 - return Objects.hash(selector); 40 + return Objects.hash(criteria);
34 } 41 }
35 42
36 @Override 43 @Override
...@@ -40,23 +47,50 @@ public final class DefaultTrafficSelector implements TrafficSelector { ...@@ -40,23 +47,50 @@ public final class DefaultTrafficSelector implements TrafficSelector {
40 } 47 }
41 if (obj instanceof DefaultTrafficSelector) { 48 if (obj instanceof DefaultTrafficSelector) {
42 DefaultTrafficSelector that = (DefaultTrafficSelector) obj; 49 DefaultTrafficSelector that = (DefaultTrafficSelector) obj;
43 - return Objects.equals(selector, that.selector); 50 + return Objects.equals(criteria, that.criteria);
44 51
45 } 52 }
46 return false; 53 return false;
47 } 54 }
48 55
56 + /**
57 + * Returns a new traffic selector builder.
58 + *
59 + * @return traffic selector builder
60 + */
61 + public static TrafficSelector.Builder builder() {
62 + return new Builder();
63 + }
49 64
65 + /**
66 + * Returns a new traffic selector builder primed to produce entities
67 + * patterned after the supplied selector.
68 + *
69 + * @return traffic selector builder
70 + */
71 + public static TrafficSelector.Builder builder(TrafficSelector selector) {
72 + return new Builder(selector);
73 + }
50 74
51 - public static class Builder implements TrafficSelector.Builder { 75 + /**
76 + * Builder of traffic selector entities.
77 + */
78 + public static final class Builder implements TrafficSelector.Builder {
52 79
53 - private final Logger log = getLogger(getClass()); 80 + private final Map<Criterion.Type, Criterion> selector = new HashMap<>();
54 81
55 - private final Set<Criterion> selector = new HashSet<>(); 82 + private Builder() {
83 + }
84 +
85 + private Builder(TrafficSelector selector) {
86 + for (Criterion c : selector.criteria()) {
87 + add(c);
88 + }
89 + }
56 90
57 @Override 91 @Override
58 public Builder add(Criterion criterion) { 92 public Builder add(Criterion criterion) {
59 - selector.add(criterion); 93 + selector.put(criterion.type(), criterion);
60 return this; 94 return this;
61 } 95 }
62 96
...@@ -107,7 +141,7 @@ public final class DefaultTrafficSelector implements TrafficSelector { ...@@ -107,7 +141,7 @@ public final class DefaultTrafficSelector implements TrafficSelector {
107 141
108 @Override 142 @Override
109 public TrafficSelector build() { 143 public TrafficSelector build() {
110 - return new DefaultTrafficSelector(selector); 144 + return new DefaultTrafficSelector(ImmutableSet.copyOf(selector.values()));
111 } 145 }
112 146
113 } 147 }
......
1 package org.onlab.onos.net.flow; 1 package org.onlab.onos.net.flow;
2 2
3 -import static org.slf4j.LoggerFactory.getLogger;
4 -
5 -import java.util.Collections;
6 -import java.util.LinkedList;
7 -import java.util.List;
8 -
9 import org.onlab.onos.net.PortNumber; 3 import org.onlab.onos.net.PortNumber;
10 import org.onlab.onos.net.flow.instructions.Instruction; 4 import org.onlab.onos.net.flow.instructions.Instruction;
11 import org.onlab.onos.net.flow.instructions.Instructions; 5 import org.onlab.onos.net.flow.instructions.Instructions;
...@@ -14,10 +8,24 @@ import org.onlab.packet.MacAddress; ...@@ -14,10 +8,24 @@ import org.onlab.packet.MacAddress;
14 import org.onlab.packet.VlanId; 8 import org.onlab.packet.VlanId;
15 import org.slf4j.Logger; 9 import org.slf4j.Logger;
16 10
11 +import java.util.Collections;
12 +import java.util.LinkedList;
13 +import java.util.List;
14 +
15 +import static org.slf4j.LoggerFactory.getLogger;
16 +
17 +/**
18 + * Default traffic treatment implementation.
19 + */
17 public final class DefaultTrafficTreatment implements TrafficTreatment { 20 public final class DefaultTrafficTreatment implements TrafficTreatment {
18 21
19 private final List<Instruction> instructions; 22 private final List<Instruction> instructions;
20 23
24 + /**
25 + * Creates a new traffic treatment from the specified list of instructions.
26 + *
27 + * @param instructions treatment instructions
28 + */
21 private DefaultTrafficTreatment(List<Instruction> instructions) { 29 private DefaultTrafficTreatment(List<Instruction> instructions) {
22 this.instructions = Collections.unmodifiableList(instructions); 30 this.instructions = Collections.unmodifiableList(instructions);
23 } 31 }
...@@ -28,12 +36,19 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -28,12 +36,19 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
28 } 36 }
29 37
30 /** 38 /**
31 - * Builds a list of treatments following the following order. 39 + * Returns a new traffic treatment builder.
32 - * Modifications -> Group -> Output (including drop)
33 * 40 *
41 + * @return traffic treatment builder
34 */ 42 */
43 + public static TrafficTreatment.Builder builder() {
44 + return new Builder();
45 + }
35 46
36 - public static class Builder implements TrafficTreatment.Builder { 47 + /**
48 + * Builds a list of treatments following the following order.
49 + * Modifications -> Group -> Output (including drop)
50 + */
51 + public static final class Builder implements TrafficTreatment.Builder {
37 52
38 private final Logger log = getLogger(getClass()); 53 private final Logger log = getLogger(getClass());
39 54
...@@ -47,6 +62,10 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -47,6 +62,10 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
47 // TODO: should be a list of instructions based on modification objects 62 // TODO: should be a list of instructions based on modification objects
48 List<Instruction> modifications = new LinkedList<>(); 63 List<Instruction> modifications = new LinkedList<>();
49 64
65 + // Creates a new builder
66 + private Builder() {
67 + }
68 +
50 public Builder add(Instruction instruction) { 69 public Builder add(Instruction instruction) {
51 if (drop) { 70 if (drop) {
52 return this; 71 return this;
......
...@@ -24,7 +24,7 @@ public abstract class DefaultPacketContext implements PacketContext { ...@@ -24,7 +24,7 @@ public abstract class DefaultPacketContext implements PacketContext {
24 this.inPkt = inPkt; 24 this.inPkt = inPkt;
25 this.outPkt = outPkt; 25 this.outPkt = outPkt;
26 this.block = new AtomicBoolean(block); 26 this.block = new AtomicBoolean(block);
27 - this.builder = new DefaultTrafficTreatment.Builder(); 27 + this.builder = DefaultTrafficTreatment.builder();
28 } 28 }
29 29
30 @Override 30 @Override
......
...@@ -16,8 +16,8 @@ import org.onlab.onos.net.flow.TrafficTreatment; ...@@ -16,8 +16,8 @@ import org.onlab.onos.net.flow.TrafficTreatment;
16 public abstract class ConnectivityIntentTest extends IntentTest { 16 public abstract class ConnectivityIntentTest extends IntentTest {
17 17
18 public static final IntentId IID = new IntentId(123); 18 public static final IntentId IID = new IntentId(123);
19 - public static final TrafficSelector MATCH = (new DefaultTrafficSelector.Builder()).build(); 19 + public static final TrafficSelector MATCH = DefaultTrafficSelector.builder().build();
20 - public static final TrafficTreatment NOP = (new DefaultTrafficTreatment.Builder()).build(); 20 + public static final TrafficTreatment NOP = DefaultTrafficTreatment.builder().build();
21 21
22 public static final ConnectPoint P1 = new ConnectPoint(DeviceId.deviceId("111"), PortNumber.portNumber(0x1)); 22 public static final ConnectPoint P1 = new ConnectPoint(DeviceId.deviceId("111"), PortNumber.portNumber(0x1));
23 public static final ConnectPoint P2 = new ConnectPoint(DeviceId.deviceId("222"), PortNumber.portNumber(0x2)); 23 public static final ConnectPoint P2 = new ConnectPoint(DeviceId.deviceId("222"), PortNumber.portNumber(0x2));
......
...@@ -242,15 +242,16 @@ implements FlowRuleService, FlowRuleProviderRegistry { ...@@ -242,15 +242,16 @@ implements FlowRuleService, FlowRuleProviderRegistry {
242 } 242 }
243 243
244 private boolean checkRuleLiveness(FlowRule swRule, FlowRule storedRule) { 244 private boolean checkRuleLiveness(FlowRule swRule, FlowRule storedRule) {
245 - int timeout = storedRule.timeout();
246 - if (storedRule.packets() != swRule.packets()) {
247 - deadRounds.get(swRule).set(0);
248 return true; 245 return true;
249 - } 246 +// int timeout = storedRule.timeout();
250 - 247 +// if (storedRule.packets() != swRule.packets()) {
251 - return (deadRounds.get(swRule).getAndIncrement() * 248 +// deadRounds.get(swRule).set(0);
252 - FlowRuleProvider.POLL_INTERVAL) <= timeout; 249 +// return true;
253 - 250 +// }
251 +//
252 +// return (deadRounds.get(swRule).getAndIncrement() *
253 +// FlowRuleProvider.POLL_INTERVAL) <= timeout;
254 +//
254 } 255 }
255 256
256 // Posts the specified event to the local event dispatcher. 257 // Posts the specified event to the local event dispatcher.
......
...@@ -150,7 +150,7 @@ public class HostMonitor implements TimerTask { ...@@ -150,7 +150,7 @@ public class HostMonitor implements TimerTask {
150 List<Instruction> instructions = new ArrayList<>(); 150 List<Instruction> instructions = new ArrayList<>();
151 instructions.add(Instructions.createOutput(port.number())); 151 instructions.add(Instructions.createOutput(port.number()));
152 152
153 - TrafficTreatment treatment = new DefaultTrafficTreatment.Builder() 153 + TrafficTreatment treatment = DefaultTrafficTreatment.builder()
154 .setOutput(port.number()) 154 .setOutput(port.number())
155 .build(); 155 .build();
156 156
......
1 package org.onlab.onos.net.intent.impl; 1 package org.onlab.onos.net.intent.impl;
2 2
3 -import java.util.Iterator;
4 -
5 import org.apache.felix.scr.annotations.Activate; 3 import org.apache.felix.scr.annotations.Activate;
6 import org.apache.felix.scr.annotations.Component; 4 import org.apache.felix.scr.annotations.Component;
7 import org.apache.felix.scr.annotations.Deactivate; 5 import org.apache.felix.scr.annotations.Deactivate;
...@@ -17,24 +15,25 @@ import org.onlab.onos.net.flow.FlowRule; ...@@ -17,24 +15,25 @@ import org.onlab.onos.net.flow.FlowRule;
17 import org.onlab.onos.net.flow.FlowRuleService; 15 import org.onlab.onos.net.flow.FlowRuleService;
18 import org.onlab.onos.net.flow.TrafficSelector; 16 import org.onlab.onos.net.flow.TrafficSelector;
19 import org.onlab.onos.net.flow.TrafficTreatment; 17 import org.onlab.onos.net.flow.TrafficTreatment;
20 -import org.onlab.onos.net.flow.criteria.Criterion;
21 import org.onlab.onos.net.intent.IntentExtensionService; 18 import org.onlab.onos.net.intent.IntentExtensionService;
22 import org.onlab.onos.net.intent.IntentInstaller; 19 import org.onlab.onos.net.intent.IntentInstaller;
23 import org.onlab.onos.net.intent.PathIntent; 20 import org.onlab.onos.net.intent.PathIntent;
24 21
22 +import java.util.Iterator;
23 +
25 /** 24 /**
26 - * An intent installer for {@link PathIntent}. 25 + * Installer for {@link PathIntent path connectivity intents}.
27 */ 26 */
28 @Component(immediate = true) 27 @Component(immediate = true)
29 -public class PathIntentInstaller 28 +public class PathIntentInstaller implements IntentInstaller<PathIntent> {
30 - implements IntentInstaller<PathIntent> { 29 +
31 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 30 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
32 protected IntentExtensionService intentManager; 31 protected IntentExtensionService intentManager;
33 32
34 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 33 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
35 - private FlowRuleService flowRuleService; 34 + protected FlowRuleService flowRuleService;
36 35
37 - private final ApplicationId appId = ApplicationId.valueOf(1); 36 + private final ApplicationId appId = ApplicationId.getAppId();
38 37
39 @Activate 38 @Activate
40 public void activate() { 39 public void activate() {
...@@ -48,24 +47,21 @@ public class PathIntentInstaller ...@@ -48,24 +47,21 @@ public class PathIntentInstaller
48 47
49 @Override 48 @Override
50 public void install(PathIntent intent) { 49 public void install(PathIntent intent) {
51 - TrafficSelector.Builder builder = new DefaultTrafficSelector.Builder(); 50 + TrafficSelector.Builder builder =
52 - TrafficSelector selector = intent.getTrafficSelector(); 51 + DefaultTrafficSelector.builder(intent.getTrafficSelector());
53 - for (Criterion c : selector.criteria()) {
54 - builder.add(c);
55 - }
56 -
57 Iterator<Link> links = intent.getPath().links().iterator(); 52 Iterator<Link> links = intent.getPath().links().iterator();
58 ConnectPoint prev = links.next().dst(); 53 ConnectPoint prev = links.next().dst();
59 while (links.hasNext()) { 54 while (links.hasNext()) {
60 builder.matchInport(prev.port()); 55 builder.matchInport(prev.port());
61 Link link = links.next(); 56 Link link = links.next();
62 57
63 - TrafficTreatment.Builder treat = new DefaultTrafficTreatment.Builder(); 58 + TrafficTreatment.Builder treat = DefaultTrafficTreatment.builder();
64 treat.setOutput(link.src().port()); 59 treat.setOutput(link.src().port());
65 60
66 - FlowRule f = new DefaultFlowRule(link.src().deviceId(), 61 + FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
67 - builder.build(), treat.build(), 0, appId, 0); 62 + builder.build(), treat.build(),
68 - flowRuleService.applyFlowRules(f); 63 + 0, appId, 30);
64 + flowRuleService.applyFlowRules(rule);
69 65
70 prev = link.dst(); 66 prev = link.dst();
71 } 67 }
......
...@@ -43,7 +43,6 @@ import com.google.common.collect.HashMultimap; ...@@ -43,7 +43,6 @@ import com.google.common.collect.HashMultimap;
43 import com.google.common.collect.Lists; 43 import com.google.common.collect.Lists;
44 import com.google.common.collect.Multimap; 44 import com.google.common.collect.Multimap;
45 45
46 -
47 @Component(immediate = true) 46 @Component(immediate = true)
48 @Service 47 @Service
49 public class ProxyArpManager implements ProxyArpService { 48 public class ProxyArpManager implements ProxyArpService {
...@@ -128,7 +127,7 @@ public class ProxyArpManager implements ProxyArpService { ...@@ -128,7 +127,7 @@ public class ProxyArpManager implements ProxyArpService {
128 127
129 Ethernet arpReply = buildArpReply(dst, eth); 128 Ethernet arpReply = buildArpReply(dst, eth);
130 // TODO: check send status with host service. 129 // TODO: check send status with host service.
131 - TrafficTreatment.Builder builder = new DefaultTrafficTreatment.Builder(); 130 + TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
132 builder.setOutput(src.location().port()); 131 builder.setOutput(src.location().port());
133 packetService.emit(new DefaultOutboundPacket(src.location().deviceId(), 132 packetService.emit(new DefaultOutboundPacket(src.location().deviceId(),
134 builder.build(), ByteBuffer.wrap(arpReply.serialize()))); 133 builder.build(), ByteBuffer.wrap(arpReply.serialize())));
...@@ -148,7 +147,7 @@ public class ProxyArpManager implements ProxyArpService { ...@@ -148,7 +147,7 @@ public class ProxyArpManager implements ProxyArpService {
148 if (h == null) { 147 if (h == null) {
149 flood(eth); 148 flood(eth);
150 } else { 149 } else {
151 - TrafficTreatment.Builder builder = new DefaultTrafficTreatment.Builder(); 150 + TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
152 builder.setOutput(h.location().port()); 151 builder.setOutput(h.location().port());
153 packetService.emit(new DefaultOutboundPacket(h.location().deviceId(), 152 packetService.emit(new DefaultOutboundPacket(h.location().deviceId(),
154 builder.build(), ByteBuffer.wrap(eth.serialize()))); 153 builder.build(), ByteBuffer.wrap(eth.serialize())));
...@@ -166,7 +165,7 @@ public class ProxyArpManager implements ProxyArpService { ...@@ -166,7 +165,7 @@ public class ProxyArpManager implements ProxyArpService {
166 165
167 synchronized (externalPorts) { 166 synchronized (externalPorts) {
168 for (Entry<Device, PortNumber> entry : externalPorts.entries()) { 167 for (Entry<Device, PortNumber> entry : externalPorts.entries()) {
169 - builder = new DefaultTrafficTreatment.Builder(); 168 + builder = DefaultTrafficTreatment.builder();
170 builder.setOutput(entry.getValue()); 169 builder.setOutput(entry.getValue());
171 packetService.emit(new DefaultOutboundPacket(entry.getKey().id(), 170 packetService.emit(new DefaultOutboundPacket(entry.getKey().id(),
172 builder.build(), buf)); 171 builder.build(), buf));
......
...@@ -86,7 +86,7 @@ public class FlowRuleBuilder { ...@@ -86,7 +86,7 @@ public class FlowRuleBuilder {
86 86
87 87
88 private TrafficTreatment buildTreatment() { 88 private TrafficTreatment buildTreatment() {
89 - TrafficTreatment.Builder builder = new DefaultTrafficTreatment.Builder(); 89 + TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
90 // If this is a drop rule 90 // If this is a drop rule
91 if (actions.size() == 0) { 91 if (actions.size() == 0) {
92 builder.drop(); 92 builder.drop();
...@@ -171,7 +171,7 @@ public class FlowRuleBuilder { ...@@ -171,7 +171,7 @@ public class FlowRuleBuilder {
171 } 171 }
172 172
173 private TrafficSelector buildSelector() { 173 private TrafficSelector buildSelector() {
174 - TrafficSelector.Builder builder = new DefaultTrafficSelector.Builder(); 174 + TrafficSelector.Builder builder = DefaultTrafficSelector.builder();
175 for (MatchField<?> field : match.getMatchFields()) { 175 for (MatchField<?> field : match.getMatchFields()) {
176 switch (field.id) { 176 switch (field.id) {
177 case IN_PORT: 177 case IN_PORT:
......
...@@ -181,7 +181,7 @@ public class OpenFlowPacketProviderTest { ...@@ -181,7 +181,7 @@ public class OpenFlowPacketProviderTest {
181 } 181 }
182 182
183 private static TrafficTreatment treatment(Instruction ... insts) { 183 private static TrafficTreatment treatment(Instruction ... insts) {
184 - TrafficTreatment.Builder builder = new DefaultTrafficTreatment.Builder(); 184 + TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
185 for (Instruction i : insts) { 185 for (Instruction i : insts) {
186 builder.add(i); 186 builder.add(i);
187 } 187 }
......
...@@ -21,7 +21,7 @@ export PATH="$PATH:." ...@@ -21,7 +21,7 @@ export PATH="$PATH:."
21 # e.g. 'o api', 'o dev', 'o' 21 # e.g. 'o api', 'o dev', 'o'
22 function o { 22 function o {
23 cd $(find $ONOS_ROOT/ -type d | egrep -v '\.git|target' | \ 23 cd $(find $ONOS_ROOT/ -type d | egrep -v '\.git|target' | \
24 - egrep "${1:-$ONOS_ROOT}" | head -n 1) 24 + egrep "${1:-$ONOS_ROOT}" | egrep -v "$ONOS_ROOT/.+/src/" | head -n 1)
25 } 25 }
26 26
27 # Short-hand for 'mvn clean install' for us lazy folk 27 # Short-hand for 'mvn clean install' for us lazy folk
......