Carmelo Cascone
Committed by Thomas Vachuska

Various bmv2 changes to reflect onos-bmv2 v1.0.0 (onos1.6 cherry-pick)

Most notably:
- Updated repo URL and commit ID to official onos-bmv2 fork
- Removed ugly string-based table dump parser, now there's
	a proper API to retrieve table entries (added support in
	Bmv2DeviceAgent)
- Removed unused arguments in packet-in API

Change-Id: I5ff0948eb8fec5283a085913496c187e7b278d8d
...@@ -118,10 +118,14 @@ public class Bmv2FlowRuleProgrammable extends AbstractHandlerBehaviour implement ...@@ -118,10 +118,14 @@ public class Bmv2FlowRuleProgrammable extends AbstractHandlerBehaviour implement
118 return; 118 return;
119 } 119 }
120 120
121 - // Bmv2 doesn't support proper polling for table entries, but only a string based table dump. 121 + List<Bmv2ParsedTableEntry> installedEntries;
122 - // The trick here is to first dump the entries currently installed in the device for a given table, 122 + try {
123 - // and then query a service for the corresponding, previously applied, flow rule. 123 + installedEntries = deviceAgent.getTableEntries(table.name());
124 - List<Bmv2ParsedTableEntry> installedEntries = tableEntryService.getTableEntries(deviceId, table.name()); 124 + } catch (Bmv2RuntimeException e) {
125 + log.warn("Failed to get table entries of table {} of {}: {}", table.name(), deviceId, e.explain());
126 + return;
127 + }
128 +
125 installedEntries.forEach(parsedEntry -> { 129 installedEntries.forEach(parsedEntry -> {
126 Bmv2TableEntryReference entryRef = new Bmv2TableEntryReference(deviceId, 130 Bmv2TableEntryReference entryRef = new Bmv2TableEntryReference(deviceId,
127 table.name(), 131 table.name(),
...@@ -309,7 +313,7 @@ public class Bmv2FlowRuleProgrammable extends AbstractHandlerBehaviour implement ...@@ -309,7 +313,7 @@ public class Bmv2FlowRuleProgrammable extends AbstractHandlerBehaviour implement
309 private void forceRemove(Bmv2DeviceAgent agent, String tableName, Bmv2MatchKey matchKey) 313 private void forceRemove(Bmv2DeviceAgent agent, String tableName, Bmv2MatchKey matchKey)
310 throws Bmv2RuntimeException { 314 throws Bmv2RuntimeException {
311 // Find the entryID (expensive call!) 315 // Find the entryID (expensive call!)
312 - for (Bmv2ParsedTableEntry pEntry : tableEntryService.getTableEntries(agent.deviceId(), tableName)) { 316 + for (Bmv2ParsedTableEntry pEntry : agent.getTableEntries(tableName)) {
313 if (pEntry.matchKey().equals(matchKey)) { 317 if (pEntry.matchKey().equals(matchKey)) {
314 // Remove entry and drop exceptions. 318 // Remove entry and drop exceptions.
315 silentlyRemove(agent, tableName, pEntry.entryId()); 319 silentlyRemove(agent, tableName, pEntry.entryId());
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 ~ limitations under the License. 16 ~ limitations under the License.
17 --> 17 -->
18 <drivers> 18 <drivers>
19 - <driver name="bmv2-thrift" manufacturer="p4.org" hwVersion="bmv2" swVersion="n/a"> 19 + <driver name="bmv2-thrift" manufacturer="p4.org" hwVersion="bmv2" swVersion="1.0.0">
20 <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery" 20 <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
21 impl="org.onosproject.drivers.bmv2.Bmv2DeviceDescriptionDiscovery"/> 21 impl="org.onosproject.drivers.bmv2.Bmv2DeviceDescriptionDiscovery"/>
22 <behaviour api="org.onosproject.net.flow.FlowRuleProgrammable" 22 <behaviour api="org.onosproject.net.flow.FlowRuleProgrammable"
......
...@@ -37,7 +37,7 @@ public final class Bmv2Device { ...@@ -37,7 +37,7 @@ public final class Bmv2Device {
37 public static final String PROTOCOL = "bmv2-thrift"; 37 public static final String PROTOCOL = "bmv2-thrift";
38 public static final String MANUFACTURER = "p4.org"; 38 public static final String MANUFACTURER = "p4.org";
39 public static final String HW_VERSION = "bmv2"; 39 public static final String HW_VERSION = "bmv2";
40 - public static final String SW_VERSION = N_A; 40 + public static final String SW_VERSION = "1.0.0";
41 public static final String SERIAL_NUMBER = N_A; 41 public static final String SERIAL_NUMBER = N_A;
42 42
43 private final String thriftServerHost; 43 private final String thriftServerHost;
......
...@@ -21,6 +21,7 @@ import org.onlab.util.ImmutableByteSequence; ...@@ -21,6 +21,7 @@ import org.onlab.util.ImmutableByteSequence;
21 import org.onosproject.net.DeviceId; 21 import org.onosproject.net.DeviceId;
22 22
23 import java.util.Collection; 23 import java.util.Collection;
24 +import java.util.List;
24 25
25 /** 26 /**
26 * An agent to control a BMv2 device. 27 * An agent to control a BMv2 device.
...@@ -87,13 +88,13 @@ public interface Bmv2DeviceAgent { ...@@ -87,13 +88,13 @@ public interface Bmv2DeviceAgent {
87 Collection<Bmv2PortInfo> getPortsInfo() throws Bmv2RuntimeException; 88 Collection<Bmv2PortInfo> getPortsInfo() throws Bmv2RuntimeException;
88 89
89 /** 90 /**
90 - * Return a string representation of the given table content. 91 + * Returns a list of table entries installed in the given table.
91 * 92 *
92 - * @param tableName string value of table name 93 + * @param tableName a string value
93 - * @return table string dump 94 + * @return a list of parsed table entries
94 * @throws Bmv2RuntimeException if any error occurs 95 * @throws Bmv2RuntimeException if any error occurs
95 */ 96 */
96 - String dumpTable(String tableName) throws Bmv2RuntimeException; 97 + List<Bmv2ParsedTableEntry> getTableEntries(String tableName) throws Bmv2RuntimeException;
97 98
98 /** 99 /**
99 * Requests the device to transmit a given byte sequence over the given port. 100 * Requests the device to transmit a given byte sequence over the given port.
......
...@@ -20,24 +20,27 @@ import com.google.common.base.MoreObjects; ...@@ -20,24 +20,27 @@ import com.google.common.base.MoreObjects;
20 import com.google.common.base.Objects; 20 import com.google.common.base.Objects;
21 21
22 /** 22 /**
23 - * Representation of a table entry obtained by parsing a BMv2 table dump. 23 + * Representation of a table entry installed on a BMv2 device.
24 */ 24 */
25 public final class Bmv2ParsedTableEntry { 25 public final class Bmv2ParsedTableEntry {
26 private final long entryId; 26 private final long entryId;
27 private final Bmv2MatchKey matchKey; 27 private final Bmv2MatchKey matchKey;
28 private final Bmv2Action action; 28 private final Bmv2Action action;
29 + private final int priority;
29 30
30 /** 31 /**
31 * Creates a new parsed table entry. 32 * Creates a new parsed table entry.
32 * 33 *
33 - * @param entryId an entry ID 34 + * @param entryId a long value
34 * @param matchKey a match key 35 * @param matchKey a match key
35 * @param action an action 36 * @param action an action
37 + * @param priority an integer value
36 */ 38 */
37 - public Bmv2ParsedTableEntry(long entryId, Bmv2MatchKey matchKey, Bmv2Action action) { 39 + public Bmv2ParsedTableEntry(long entryId, Bmv2MatchKey matchKey, Bmv2Action action, int priority) {
38 this.entryId = entryId; 40 this.entryId = entryId;
39 this.matchKey = matchKey; 41 this.matchKey = matchKey;
40 this.action = action; 42 this.action = action;
43 + this.priority = priority;
41 } 44 }
42 45
43 /** 46 /**
...@@ -67,9 +70,18 @@ public final class Bmv2ParsedTableEntry { ...@@ -67,9 +70,18 @@ public final class Bmv2ParsedTableEntry {
67 return action; 70 return action;
68 } 71 }
69 72
73 + /**
74 + * Returns the priority.
75 + *
76 + * @return an integer value
77 + */
78 + public int getPriority() {
79 + return priority;
80 + }
81 +
70 @Override 82 @Override
71 public int hashCode() { 83 public int hashCode() {
72 - return Objects.hashCode(entryId, matchKey, action); 84 + return Objects.hashCode(entryId, matchKey, action, priority);
73 } 85 }
74 86
75 @Override 87 @Override
...@@ -83,7 +95,8 @@ public final class Bmv2ParsedTableEntry { ...@@ -83,7 +95,8 @@ public final class Bmv2ParsedTableEntry {
83 final Bmv2ParsedTableEntry other = (Bmv2ParsedTableEntry) obj; 95 final Bmv2ParsedTableEntry other = (Bmv2ParsedTableEntry) obj;
84 return Objects.equal(this.entryId, other.entryId) 96 return Objects.equal(this.entryId, other.entryId)
85 && Objects.equal(this.matchKey, other.matchKey) 97 && Objects.equal(this.matchKey, other.matchKey)
86 - && Objects.equal(this.action, other.action); 98 + && Objects.equal(this.action, other.action)
99 + && Objects.equal(this.priority, other.priority);
87 } 100 }
88 101
89 @Override 102 @Override
......
...@@ -29,11 +29,7 @@ public interface Bmv2PacketListener { ...@@ -29,11 +29,7 @@ public interface Bmv2PacketListener {
29 * 29 *
30 * @param device the BMv2 device that originated the message 30 * @param device the BMv2 device that originated the message
31 * @param inputPort the device port where the packet was received 31 * @param inputPort the device port where the packet was received
32 - * @param reason a reason code
33 - * @param tableId the ID of table that originated this packet-in
34 - * @param contextId the ID of the BMv2 context where the packet-in was originated
35 * @param packet the packet raw data 32 * @param packet the packet raw data
36 */ 33 */
37 - void handlePacketIn(Bmv2Device device, int inputPort, long reason, int tableId, int contextId, 34 + void handlePacketIn(Bmv2Device device, int inputPort, ImmutableByteSequence packet);
38 - ImmutableByteSequence packet);
39 } 35 }
......
...@@ -19,11 +19,7 @@ package org.onosproject.bmv2.api.service; ...@@ -19,11 +19,7 @@ package org.onosproject.bmv2.api.service;
19 19
20 import org.onosproject.bmv2.api.context.Bmv2FlowRuleTranslator; 20 import org.onosproject.bmv2.api.context.Bmv2FlowRuleTranslator;
21 import org.onosproject.bmv2.api.runtime.Bmv2FlowRuleWrapper; 21 import org.onosproject.bmv2.api.runtime.Bmv2FlowRuleWrapper;
22 -import org.onosproject.bmv2.api.runtime.Bmv2ParsedTableEntry;
23 import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference; 22 import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference;
24 -import org.onosproject.net.DeviceId;
25 -
26 -import java.util.List;
27 23
28 /** 24 /**
29 * A service for managing BMv2 table entries. 25 * A service for managing BMv2 table entries.
...@@ -38,16 +34,6 @@ public interface Bmv2TableEntryService { ...@@ -38,16 +34,6 @@ public interface Bmv2TableEntryService {
38 Bmv2FlowRuleTranslator getFlowRuleTranslator(); 34 Bmv2FlowRuleTranslator getFlowRuleTranslator();
39 35
40 /** 36 /**
41 - * Returns a list of table entries installed in the given device and table. The table entries returned are the
42 - * result of a table dump parse.
43 - *
44 - * @param deviceId a device id
45 - * @param tableName a table name
46 - * @return a list of parsed table entries
47 - */
48 - List<Bmv2ParsedTableEntry> getTableEntries(DeviceId deviceId, String tableName);
49 -
50 - /**
51 * Binds the given ONOS flow rule with a BMv2 table entry reference. 37 * Binds the given ONOS flow rule with a BMv2 table entry reference.
52 * 38 *
53 * @param entryRef a table entry reference 39 * @param entryRef a table entry reference
......
...@@ -244,7 +244,7 @@ public class Bmv2ControllerImpl implements Bmv2Controller { ...@@ -244,7 +244,7 @@ public class Bmv2ControllerImpl implements Bmv2Controller {
244 } 244 }
245 245
246 @Override 246 @Override
247 - public void packetIn(int port, long reason, int tableId, int contextId, ByteBuffer packet) { 247 + public void packet_in(int port, ByteBuffer packet) {
248 if (remoteDevice == null) { 248 if (remoteDevice == null) {
249 log.debug("Received packet-in, but the remote device is still unknown. Need a hello first..."); 249 log.debug("Received packet-in, but the remote device is still unknown. Need a hello first...");
250 return; 250 return;
...@@ -256,9 +256,6 @@ public class Bmv2ControllerImpl implements Bmv2Controller { ...@@ -256,9 +256,6 @@ public class Bmv2ControllerImpl implements Bmv2Controller {
256 packetListeners.forEach( 256 packetListeners.forEach(
257 l -> executorService.execute(() -> l.handlePacketIn(remoteDevice, 257 l -> executorService.execute(() -> l.handlePacketIn(remoteDevice,
258 port, 258 port,
259 - reason,
260 - tableId,
261 - contextId,
262 ImmutableByteSequence.copyFrom(packet)))); 259 ImmutableByteSequence.copyFrom(packet))));
263 } 260 }
264 } 261 }
......
...@@ -26,11 +26,14 @@ import org.onosproject.bmv2.api.runtime.Bmv2DeviceAgent; ...@@ -26,11 +26,14 @@ import org.onosproject.bmv2.api.runtime.Bmv2DeviceAgent;
26 import org.onosproject.bmv2.api.runtime.Bmv2ExactMatchParam; 26 import org.onosproject.bmv2.api.runtime.Bmv2ExactMatchParam;
27 import org.onosproject.bmv2.api.runtime.Bmv2LpmMatchParam; 27 import org.onosproject.bmv2.api.runtime.Bmv2LpmMatchParam;
28 import org.onosproject.bmv2.api.runtime.Bmv2MatchKey; 28 import org.onosproject.bmv2.api.runtime.Bmv2MatchKey;
29 +import org.onosproject.bmv2.api.runtime.Bmv2MatchParam;
30 +import org.onosproject.bmv2.api.runtime.Bmv2ParsedTableEntry;
29 import org.onosproject.bmv2.api.runtime.Bmv2PortInfo; 31 import org.onosproject.bmv2.api.runtime.Bmv2PortInfo;
30 import org.onosproject.bmv2.api.runtime.Bmv2RuntimeException; 32 import org.onosproject.bmv2.api.runtime.Bmv2RuntimeException;
31 import org.onosproject.bmv2.api.runtime.Bmv2TableEntry; 33 import org.onosproject.bmv2.api.runtime.Bmv2TableEntry;
32 import org.onosproject.bmv2.api.runtime.Bmv2TernaryMatchParam; 34 import org.onosproject.bmv2.api.runtime.Bmv2TernaryMatchParam;
33 import org.onosproject.bmv2.api.runtime.Bmv2ValidMatchParam; 35 import org.onosproject.bmv2.api.runtime.Bmv2ValidMatchParam;
36 +import org.onosproject.bmv2.thriftapi.BmActionEntry;
34 import org.onosproject.bmv2.thriftapi.BmAddEntryOptions; 37 import org.onosproject.bmv2.thriftapi.BmAddEntryOptions;
35 import org.onosproject.bmv2.thriftapi.BmCounterValue; 38 import org.onosproject.bmv2.thriftapi.BmCounterValue;
36 import org.onosproject.bmv2.thriftapi.BmMatchParam; 39 import org.onosproject.bmv2.thriftapi.BmMatchParam;
...@@ -39,6 +42,7 @@ import org.onosproject.bmv2.thriftapi.BmMatchParamLPM; ...@@ -39,6 +42,7 @@ import org.onosproject.bmv2.thriftapi.BmMatchParamLPM;
39 import org.onosproject.bmv2.thriftapi.BmMatchParamTernary; 42 import org.onosproject.bmv2.thriftapi.BmMatchParamTernary;
40 import org.onosproject.bmv2.thriftapi.BmMatchParamType; 43 import org.onosproject.bmv2.thriftapi.BmMatchParamType;
41 import org.onosproject.bmv2.thriftapi.BmMatchParamValid; 44 import org.onosproject.bmv2.thriftapi.BmMatchParamValid;
45 +import org.onosproject.bmv2.thriftapi.BmMtEntry;
42 import org.onosproject.bmv2.thriftapi.SimpleSwitch; 46 import org.onosproject.bmv2.thriftapi.SimpleSwitch;
43 import org.onosproject.bmv2.thriftapi.Standard; 47 import org.onosproject.bmv2.thriftapi.Standard;
44 import org.onosproject.net.DeviceId; 48 import org.onosproject.net.DeviceId;
...@@ -50,6 +54,7 @@ import java.util.Collection; ...@@ -50,6 +54,7 @@ import java.util.Collection;
50 import java.util.List; 54 import java.util.List;
51 import java.util.stream.Collectors; 55 import java.util.stream.Collectors;
52 56
57 +import static org.onlab.util.ImmutableByteSequence.copyFrom;
53 import static org.onosproject.bmv2.ctl.Bmv2TExceptionParser.parseTException; 58 import static org.onosproject.bmv2.ctl.Bmv2TExceptionParser.parseTException;
54 59
55 /** 60 /**
...@@ -214,19 +219,71 @@ public final class Bmv2DeviceThriftClient implements Bmv2DeviceAgent { ...@@ -214,19 +219,71 @@ public final class Bmv2DeviceThriftClient implements Bmv2DeviceAgent {
214 } 219 }
215 220
216 @Override 221 @Override
217 - public String dumpTable(String tableName) throws Bmv2RuntimeException { 222 + public List<Bmv2ParsedTableEntry> getTableEntries(String tableName) throws Bmv2RuntimeException {
218 223
219 - log.debug("Retrieving table dump... > deviceId={}, tableName={}", deviceId, tableName); 224 + log.debug("Retrieving table entries... > deviceId={}, tableName={}", deviceId, tableName);
220 225
226 + List<BmMtEntry> bmEntries;
221 try { 227 try {
222 - String dump = standardClient.bm_dump_table(CONTEXT_ID, tableName); 228 + bmEntries = standardClient.bm_mt_get_entries(CONTEXT_ID, tableName);
223 - log.debug("Table dump retrieved! > deviceId={}, tableName={}", deviceId, tableName);
224 - return dump;
225 } catch (TException e) { 229 } catch (TException e) {
226 - log.debug("Exception while retrieving table dump: {} > deviceId={}, tableName={}", 230 + log.debug("Exception while retrieving table entries: {} > deviceId={}, tableName={}",
227 e, deviceId, tableName); 231 e, deviceId, tableName);
228 throw parseTException(e); 232 throw parseTException(e);
229 } 233 }
234 +
235 + List<Bmv2ParsedTableEntry> parsedEntries = Lists.newArrayList();
236 +
237 + entryLoop:
238 + for (BmMtEntry bmEntry : bmEntries) {
239 +
240 + Bmv2MatchKey.Builder matchKeyBuilder = Bmv2MatchKey.builder();
241 + for (BmMatchParam bmParam : bmEntry.getMatch_key()) {
242 + Bmv2MatchParam param;
243 + switch (bmParam.getType()) {
244 + case EXACT:
245 + param = new Bmv2ExactMatchParam(copyFrom(bmParam.getExact().getKey()));
246 + break;
247 + case LPM:
248 + param = new Bmv2LpmMatchParam(copyFrom(bmParam.getLpm().getKey()),
249 + bmParam.getLpm().getPrefix_length());
250 + break;
251 + case TERNARY:
252 + param = new Bmv2TernaryMatchParam(copyFrom(bmParam.getTernary().getKey()),
253 + copyFrom(bmParam.getTernary().getMask()));
254 + break;
255 + case VALID:
256 + param = new Bmv2ValidMatchParam(bmParam.getValid().isKey());
257 + break;
258 + default:
259 + log.warn("Parsing of match type {} unsupported, skipping table entry.",
260 + bmParam.getType().name());
261 + continue entryLoop;
262 + }
263 + matchKeyBuilder.add(param);
264 + }
265 +
266 + Bmv2Action.Builder actionBuilder = Bmv2Action.builder();
267 + BmActionEntry bmActionEntry = bmEntry.getAction_entry();
268 + switch (bmActionEntry.getAction_type()) {
269 + case ACTION_DATA:
270 + actionBuilder.withName(bmActionEntry.getAction_name());
271 + bmActionEntry.getAction_data()
272 + .stream()
273 + .map(ImmutableByteSequence::copyFrom)
274 + .forEach(actionBuilder::addParameter);
275 + break;
276 + default:
277 + log.warn("Parsing of action action type {} unsupported, skipping table entry.",
278 + bmActionEntry.getAction_type().name());
279 + continue entryLoop;
280 + }
281 +
282 + parsedEntries.add(new Bmv2ParsedTableEntry(bmEntry.getEntry_handle(), matchKeyBuilder.build(),
283 + actionBuilder.build(), bmEntry.getOptions().getPriority()));
284 + }
285 +
286 + return parsedEntries;
230 } 287 }
231 288
232 @Override 289 @Override
...@@ -236,7 +293,7 @@ public final class Bmv2DeviceThriftClient implements Bmv2DeviceAgent { ...@@ -236,7 +293,7 @@ public final class Bmv2DeviceThriftClient implements Bmv2DeviceAgent {
236 293
237 try { 294 try {
238 295
239 - simpleSwitchClient.push_packet(portNumber, ByteBuffer.wrap(packet.asArray())); 296 + simpleSwitchClient.packet_out(portNumber, ByteBuffer.wrap(packet.asArray()));
240 log.debug("Packet transmission requested! > portNumber={}, packetSize={}", portNumber, packet.size()); 297 log.debug("Packet transmission requested! > portNumber={}, packetSize={}", portNumber, packet.size());
241 } catch (TException e) { 298 } catch (TException e) {
242 log.debug("Exception while requesting packet transmission: {} > portNumber={}, packetSize={}", 299 log.debug("Exception while requesting packet transmission: {} > portNumber={}, packetSize={}",
......
...@@ -23,22 +23,17 @@ import org.apache.felix.scr.annotations.Reference; ...@@ -23,22 +23,17 @@ import org.apache.felix.scr.annotations.Reference;
23 import org.apache.felix.scr.annotations.ReferenceCardinality; 23 import org.apache.felix.scr.annotations.ReferenceCardinality;
24 import org.apache.felix.scr.annotations.Service; 24 import org.apache.felix.scr.annotations.Service;
25 import org.onlab.util.KryoNamespace; 25 import org.onlab.util.KryoNamespace;
26 -import org.onosproject.bmv2.api.context.Bmv2DeviceContext;
27 import org.onosproject.bmv2.api.context.Bmv2FlowRuleTranslator; 26 import org.onosproject.bmv2.api.context.Bmv2FlowRuleTranslator;
28 -import org.onosproject.bmv2.api.service.Bmv2DeviceContextService;
29 -import org.onosproject.bmv2.api.service.Bmv2Controller;
30 -import org.onosproject.bmv2.api.runtime.Bmv2DeviceAgent;
31 import org.onosproject.bmv2.api.runtime.Bmv2ExactMatchParam; 27 import org.onosproject.bmv2.api.runtime.Bmv2ExactMatchParam;
32 import org.onosproject.bmv2.api.runtime.Bmv2FlowRuleWrapper; 28 import org.onosproject.bmv2.api.runtime.Bmv2FlowRuleWrapper;
33 import org.onosproject.bmv2.api.runtime.Bmv2LpmMatchParam; 29 import org.onosproject.bmv2.api.runtime.Bmv2LpmMatchParam;
34 import org.onosproject.bmv2.api.runtime.Bmv2MatchKey; 30 import org.onosproject.bmv2.api.runtime.Bmv2MatchKey;
35 -import org.onosproject.bmv2.api.runtime.Bmv2ParsedTableEntry;
36 -import org.onosproject.bmv2.api.runtime.Bmv2RuntimeException;
37 import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference; 31 import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference;
38 -import org.onosproject.bmv2.api.service.Bmv2TableEntryService;
39 import org.onosproject.bmv2.api.runtime.Bmv2TernaryMatchParam; 32 import org.onosproject.bmv2.api.runtime.Bmv2TernaryMatchParam;
40 import org.onosproject.bmv2.api.runtime.Bmv2ValidMatchParam; 33 import org.onosproject.bmv2.api.runtime.Bmv2ValidMatchParam;
41 -import org.onosproject.net.DeviceId; 34 +import org.onosproject.bmv2.api.service.Bmv2Controller;
35 +import org.onosproject.bmv2.api.service.Bmv2DeviceContextService;
36 +import org.onosproject.bmv2.api.service.Bmv2TableEntryService;
42 import org.onosproject.store.serializers.KryoNamespaces; 37 import org.onosproject.store.serializers.KryoNamespaces;
43 import org.onosproject.store.service.EventuallyConsistentMap; 38 import org.onosproject.store.service.EventuallyConsistentMap;
44 import org.onosproject.store.service.StorageService; 39 import org.onosproject.store.service.StorageService;
...@@ -46,9 +41,6 @@ import org.onosproject.store.service.WallClockTimestamp; ...@@ -46,9 +41,6 @@ import org.onosproject.store.service.WallClockTimestamp;
46 import org.slf4j.Logger; 41 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory; 42 import org.slf4j.LoggerFactory;
48 43
49 -import java.util.Collections;
50 -import java.util.List;
51 -
52 import static com.google.common.base.Preconditions.checkNotNull; 44 import static com.google.common.base.Preconditions.checkNotNull;
53 45
54 /** 46 /**
...@@ -107,23 +99,6 @@ public class Bmv2TableEntryServiceImpl implements Bmv2TableEntryService { ...@@ -107,23 +99,6 @@ public class Bmv2TableEntryServiceImpl implements Bmv2TableEntryService {
107 } 99 }
108 100
109 @Override 101 @Override
110 - public List<Bmv2ParsedTableEntry> getTableEntries(DeviceId deviceId, String tableName) {
111 - try {
112 - Bmv2DeviceContext context = contextService.getContext(deviceId);
113 - if (context == null) {
114 - log.warn("Unable to get table entries, found null context for {}", deviceId);
115 - return Collections.emptyList();
116 - }
117 - Bmv2DeviceAgent agent = controller.getAgent(deviceId);
118 - String tableDump = agent.dumpTable(tableName);
119 - return Bmv2TableDumpParser.parse(tableDump, context.configuration());
120 - } catch (Bmv2RuntimeException e) {
121 - log.warn("Unable to get table entries for {}: {}", deviceId, e.explain());
122 - return Collections.emptyList();
123 - }
124 - }
125 -
126 - @Override
127 public Bmv2FlowRuleWrapper lookupEntryReference(Bmv2TableEntryReference entryRef) { 102 public Bmv2FlowRuleWrapper lookupEntryReference(Bmv2TableEntryReference entryRef) {
128 checkNotNull(entryRef, "table entry reference cannot be null"); 103 checkNotNull(entryRef, "table entry reference cannot be null");
129 return flowRules.get(entryRef); 104 return flowRules.get(entryRef);
......
1 -/*
2 - * Copyright 2016-present Open Networking Laboratory
3 - *
4 - * 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
7 - *
8 - * 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.
15 - */
16 -
17 -package org.onosproject.bmv2.ctl;
18 -
19 -import org.junit.Test;
20 -import org.onosproject.bmv2.api.context.Bmv2Configuration;
21 -import org.onosproject.bmv2.api.runtime.Bmv2ParsedTableEntry;
22 -
23 -import java.io.IOException;
24 -import java.net.URISyntaxException;
25 -import java.nio.charset.Charset;
26 -import java.nio.file.Files;
27 -import java.nio.file.Paths;
28 -import java.util.List;
29 -
30 -import static org.hamcrest.MatcherAssert.assertThat;
31 -import static org.hamcrest.Matchers.equalTo;
32 -
33 -public class Bmv2TableDumpParserTest {
34 -
35 - private Bmv2Configuration configuration = Bmv2DeviceContextServiceImpl.loadDefaultConfiguration();
36 -
37 - @Test
38 - public void testParse() throws Exception {
39 - String text = readFile();
40 - List<Bmv2ParsedTableEntry> result = Bmv2TableDumpParser.parse(text, configuration);
41 - assertThat(result.size(), equalTo(10));
42 - }
43 -
44 - private String readFile()
45 - throws IOException, URISyntaxException {
46 - byte[] encoded = Files.readAllBytes(Paths.get(this.getClass().getResource("/tabledump.txt").toURI()));
47 - return new String(encoded, Charset.defaultCharset());
48 - }
49 -}
1 -0: 0000 000000000000 000000000000 0806 &&& 0000000000000000000000000000ffff => send_to_cpu -
2 -1: 0000 000000000000 000000000000 0800 &&& 0000000000000000000000000000ffff => send_to_cpu -
3 -2: 0000 000000000000 000000000000 88cc &&& 0000000000000000000000000000ffff => send_to_cpu -
4 -3: 0000 000000000000 000000000000 8942 &&& 0000000000000000000000000000ffff => send_to_cpu -
5 -4: 0001 000400000001 000400000000 0000 &&& ffffffffffffffffffffffffffff0000 => set_egress_port - 2,
6 -5: 0002 000400000000 000400000001 0000 &&& ffffffffffffffffffffffffffff0000 => set_egress_port - 1,
7 -51539607552: 0001 0000 => set_egress_port - 1,
8 -51539607553: 0001 0002 => set_egress_port - 3,
9 -51539607554: 0001 0001 => set_egress_port - 2,
10 -51539607555: 0001 0003 => set_egress_port - 4,
...\ No newline at end of file ...\ No newline at end of file
...@@ -33,11 +33,11 @@ ...@@ -33,11 +33,11 @@
33 33
34 <properties> 34 <properties>
35 <!-- BMv2 Commit ID and Thrift version --> 35 <!-- BMv2 Commit ID and Thrift version -->
36 - <bmv2.commit>e55f9cdaee5e3d729f839e7ec6c322dd66c1a1a0</bmv2.commit> 36 + <bmv2.commit>024aa03e3b52f8d32c26774511e8e5b1dc11ec65</bmv2.commit>
37 <bmv2.thrift.version>0.9.3</bmv2.thrift.version> 37 <bmv2.thrift.version>0.9.3</bmv2.thrift.version>
38 <!-- Do not change below --> 38 <!-- Do not change below -->
39 <bmv2.baseurl> 39 <bmv2.baseurl>
40 - https://raw.githubusercontent.com/ccascone/behavioral-model/${bmv2.commit} 40 + https://raw.githubusercontent.com/opennetworkinglab/behavioral-model/${bmv2.commit}
41 </bmv2.baseurl> 41 </bmv2.baseurl>
42 <bmv2.thrift.srcdir>${project.basedir}/src/main/thrift</bmv2.thrift.srcdir> 42 <bmv2.thrift.srcdir>${project.basedir}/src/main/thrift</bmv2.thrift.srcdir>
43 <thrift.path>${project.build.directory}/thrift-compiler/</thrift.path> 43 <thrift.path>${project.build.directory}/thrift-compiler/</thrift.path>
......
...@@ -179,8 +179,7 @@ public class Bmv2PacketProvider extends AbstractProvider implements PacketProvid ...@@ -179,8 +179,7 @@ public class Bmv2PacketProvider extends AbstractProvider implements PacketProvid
179 private class InternalPacketListener implements Bmv2PacketListener { 179 private class InternalPacketListener implements Bmv2PacketListener {
180 180
181 @Override 181 @Override
182 - public void handlePacketIn(Bmv2Device device, int inputPort, long reason, int tableId, int contextId, 182 + public void handlePacketIn(Bmv2Device device, int inputPort, ImmutableByteSequence packet) {
183 - ImmutableByteSequence packet) {
184 Ethernet ethPkt = new Ethernet(); 183 Ethernet ethPkt = new Ethernet();
185 ethPkt.deserialize(packet.asArray(), 0, packet.size()); 184 ethPkt.deserialize(packet.asArray(), 0, packet.size());
186 185
......