Committed by
Thomas Vachuska
Polished BMv2 protocol module
- Improved and fixed typos in javadocs - Added missing beta API annotations - Refactored the default interpreter implementation Change-Id: Ibfb21d31415d8f25cc67307f8bea2871951c9a8f
Showing
29 changed files
with
129 additions
and
71 deletions
... | @@ -18,6 +18,7 @@ package org.onosproject.bmv2.api.context; | ... | @@ -18,6 +18,7 @@ package org.onosproject.bmv2.api.context; |
18 | 18 | ||
19 | import com.eclipsesource.json.JsonArray; | 19 | import com.eclipsesource.json.JsonArray; |
20 | import com.eclipsesource.json.JsonObject; | 20 | import com.eclipsesource.json.JsonObject; |
21 | +import com.google.common.annotations.Beta; | ||
21 | import com.google.common.base.MoreObjects; | 22 | import com.google.common.base.MoreObjects; |
22 | import com.google.common.base.Objects; | 23 | import com.google.common.base.Objects; |
23 | import com.google.common.collect.ImmutableList; | 24 | import com.google.common.collect.ImmutableList; |
... | @@ -36,6 +37,7 @@ import static com.google.common.base.Preconditions.checkArgument; | ... | @@ -36,6 +37,7 @@ import static com.google.common.base.Preconditions.checkArgument; |
36 | /** | 37 | /** |
37 | * Default implementation of a BMv2 configuration backed by a JSON object. | 38 | * Default implementation of a BMv2 configuration backed by a JSON object. |
38 | */ | 39 | */ |
40 | +@Beta | ||
39 | public final class Bmv2DefaultConfiguration implements Bmv2Configuration { | 41 | public final class Bmv2DefaultConfiguration implements Bmv2Configuration { |
40 | 42 | ||
41 | private final JsonObject json; | 43 | private final JsonObject json; | ... | ... |
... | @@ -37,9 +37,9 @@ public interface Bmv2FlowRuleTranslator { | ... | @@ -37,9 +37,9 @@ public interface Bmv2FlowRuleTranslator { |
37 | * <li> action: is built using the context interpreter | 37 | * <li> action: is built using the context interpreter |
38 | * {@link Bmv2Interpreter#mapTreatment(org.onosproject.net.flow.TrafficTreatment, Bmv2Configuration) | 38 | * {@link Bmv2Interpreter#mapTreatment(org.onosproject.net.flow.TrafficTreatment, Bmv2Configuration) |
39 | * treatment mapping function} or the flow rule | 39 | * treatment mapping function} or the flow rule |
40 | - * {@link org.onosproject.bmv2.api.runtime.Bmv2ExtensionTreatment} extension treatment} (if any). | 40 | + * {@link org.onosproject.bmv2.api.runtime.Bmv2ExtensionTreatment extension treatment} (if any). |
41 | - * <li> timeout: if the table supports timeout, use the same as the flow rule, otherwise none (i.e. permanent | 41 | + * <li> timeout: if the table supports timeout, use the same as the flow rule, otherwise none (i.e. returns a |
42 | - * entry). | 42 | + * permanent entry). |
43 | * </ul> | 43 | * </ul> |
44 | * | 44 | * |
45 | * @param rule a flow rule | 45 | * @param rule a flow rule | ... | ... |
... | @@ -16,10 +16,13 @@ | ... | @@ -16,10 +16,13 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.context; | 17 | package org.onosproject.bmv2.api.context; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
20 | + | ||
19 | /** | 21 | /** |
20 | * BMv2 flow rule translator exception. | 22 | * BMv2 flow rule translator exception. |
21 | */ | 23 | */ |
22 | -public class Bmv2FlowRuleTranslatorException extends Exception { | 24 | +@Beta |
25 | +public final class Bmv2FlowRuleTranslatorException extends Exception { | ||
23 | 26 | ||
24 | public Bmv2FlowRuleTranslatorException(String msg) { | 27 | public Bmv2FlowRuleTranslatorException(String msg) { |
25 | super(msg); | 28 | super(msg); | ... | ... |
... | @@ -16,10 +16,13 @@ | ... | @@ -16,10 +16,13 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.context; | 17 | package org.onosproject.bmv2.api.context; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
20 | + | ||
19 | /** | 21 | /** |
20 | * A BMv2 interpreter exception. | 22 | * A BMv2 interpreter exception. |
21 | */ | 23 | */ |
22 | -public class Bmv2InterpreterException extends Exception { | 24 | +@Beta |
25 | +public final class Bmv2InterpreterException extends Exception { | ||
23 | 26 | ||
24 | public Bmv2InterpreterException(String message) { | 27 | public Bmv2InterpreterException(String message) { |
25 | super(message); | 28 | super(message); | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.collect.Lists; | 21 | import com.google.common.collect.Lists; |
21 | import org.onlab.util.ImmutableByteSequence; | 22 | import org.onlab.util.ImmutableByteSequence; |
... | @@ -30,6 +31,7 @@ import static com.google.common.base.Preconditions.checkState; | ... | @@ -30,6 +31,7 @@ import static com.google.common.base.Preconditions.checkState; |
30 | /** | 31 | /** |
31 | * An action of a BMv2 match-action table entry. | 32 | * An action of a BMv2 match-action table entry. |
32 | */ | 33 | */ |
34 | +@Beta | ||
33 | public final class Bmv2Action { | 35 | public final class Bmv2Action { |
34 | 36 | ||
35 | private final String name; | 37 | private final String name; |
... | @@ -58,8 +60,7 @@ public final class Bmv2Action { | ... | @@ -58,8 +60,7 @@ public final class Bmv2Action { |
58 | } | 60 | } |
59 | 61 | ||
60 | /** | 62 | /** |
61 | - * Returns an immutable view of the ordered list of parameters of this | 63 | + * Returns an immutable view of the list of parameters of this action. |
62 | - * action. | ||
63 | * | 64 | * |
64 | * @return list of byte sequence | 65 | * @return list of byte sequence |
65 | */ | 66 | */ |
... | @@ -106,7 +107,7 @@ public final class Bmv2Action { | ... | @@ -106,7 +107,7 @@ public final class Bmv2Action { |
106 | } | 107 | } |
107 | 108 | ||
108 | /** | 109 | /** |
109 | - * Set the action name. | 110 | + * Sets the action name. |
110 | * | 111 | * |
111 | * @param actionName a string value | 112 | * @param actionName a string value |
112 | * @return this | 113 | * @return this |
... | @@ -117,7 +118,7 @@ public final class Bmv2Action { | ... | @@ -117,7 +118,7 @@ public final class Bmv2Action { |
117 | } | 118 | } |
118 | 119 | ||
119 | /** | 120 | /** |
120 | - * Add a parameter at the end of the parameters list. | 121 | + * Adds a parameter at the end of the parameters list. |
121 | * | 122 | * |
122 | * @param parameter a ByteBuffer value | 123 | * @param parameter a ByteBuffer value |
123 | * @return this | 124 | * @return this | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.Objects; | 20 | import com.google.common.base.Objects; |
20 | import org.onosproject.net.DeviceId; | 21 | import org.onosproject.net.DeviceId; |
21 | 22 | ||
... | @@ -27,8 +28,9 @@ import java.util.regex.Pattern; | ... | @@ -27,8 +28,9 @@ import java.util.regex.Pattern; |
27 | import static com.google.common.base.Preconditions.checkNotNull; | 28 | import static com.google.common.base.Preconditions.checkNotNull; |
28 | 29 | ||
29 | /** | 30 | /** |
30 | - * Representation of a BMv2 device. | 31 | + * A BMv2 device. |
31 | */ | 32 | */ |
33 | +@Beta | ||
32 | public final class Bmv2Device { | 34 | public final class Bmv2Device { |
33 | 35 | ||
34 | public static final String N_A = "n/a"; | 36 | public static final String N_A = "n/a"; |
... | @@ -47,9 +49,9 @@ public final class Bmv2Device { | ... | @@ -47,9 +49,9 @@ public final class Bmv2Device { |
47 | /** | 49 | /** |
48 | * Creates a new BMv2 device object. | 50 | * Creates a new BMv2 device object. |
49 | * | 51 | * |
50 | - * @param thriftServerHost the hostname / IP address of the Thrift runtime server running on the device | 52 | + * @param thriftServerHost the hostname or IP address of the Thrift RPC server running on the device |
51 | - * @param thriftServerPort the port of the Thrift runtime server running on the device | 53 | + * @param thriftServerPort the listening port used by the device Thrift RPC server |
52 | - * @param internalDeviceId the internal device ID number | 54 | + * @param internalDeviceId the internal numeric device ID |
53 | */ | 55 | */ |
54 | public Bmv2Device(String thriftServerHost, int thriftServerPort, int internalDeviceId) { | 56 | public Bmv2Device(String thriftServerHost, int thriftServerPort, int internalDeviceId) { |
55 | this.thriftServerHost = checkNotNull(thriftServerHost, "host cannot be null"); | 57 | this.thriftServerHost = checkNotNull(thriftServerHost, "host cannot be null"); |
... | @@ -68,7 +70,7 @@ public final class Bmv2Device { | ... | @@ -68,7 +70,7 @@ public final class Bmv2Device { |
68 | } | 70 | } |
69 | 71 | ||
70 | /** | 72 | /** |
71 | - * Returns the hostname (or IP address) of the Thrift runtime server running on the device. | 73 | + * Returns the hostname or IP address of the Thrift RPC server running on the device. |
72 | * | 74 | * |
73 | * @return a string value | 75 | * @return a string value |
74 | */ | 76 | */ |
... | @@ -77,7 +79,7 @@ public final class Bmv2Device { | ... | @@ -77,7 +79,7 @@ public final class Bmv2Device { |
77 | } | 79 | } |
78 | 80 | ||
79 | /** | 81 | /** |
80 | - * Returns the port of the Thrift runtime server running on the device. | 82 | + * Returns the listening port of the Thrift RPC server running on the device. |
81 | * | 83 | * |
82 | * @return an integer value | 84 | * @return an integer value |
83 | */ | 85 | */ |
... | @@ -102,7 +104,6 @@ public final class Bmv2Device { | ... | @@ -102,7 +104,6 @@ public final class Bmv2Device { |
102 | */ | 104 | */ |
103 | public DeviceId asDeviceId() { | 105 | public DeviceId asDeviceId() { |
104 | try { | 106 | try { |
105 | - // TODO: include internalDeviceId number in the deviceId URI | ||
106 | return DeviceId.deviceId(new URI(SCHEME, this.thriftServerHost + ":" + this.thriftServerPort, | 107 | return DeviceId.deviceId(new URI(SCHEME, this.thriftServerHost + ":" + this.thriftServerPort, |
107 | String.valueOf(this.internalDeviceId))); | 108 | String.valueOf(this.internalDeviceId))); |
108 | } catch (URISyntaxException e) { | 109 | } catch (URISyntaxException e) { | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import org.apache.commons.lang3.tuple.Pair; | 20 | import org.apache.commons.lang3.tuple.Pair; |
20 | import org.onlab.util.ImmutableByteSequence; | 21 | import org.onlab.util.ImmutableByteSequence; |
21 | import org.onosproject.net.DeviceId; | 22 | import org.onosproject.net.DeviceId; |
... | @@ -26,6 +27,7 @@ import java.util.List; | ... | @@ -26,6 +27,7 @@ import java.util.List; |
26 | /** | 27 | /** |
27 | * An agent to control a BMv2 device. | 28 | * An agent to control a BMv2 device. |
28 | */ | 29 | */ |
30 | +@Beta | ||
29 | public interface Bmv2DeviceAgent { | 31 | public interface Bmv2DeviceAgent { |
30 | 32 | ||
31 | /** | 33 | /** |
... | @@ -43,20 +45,20 @@ public interface Bmv2DeviceAgent { | ... | @@ -43,20 +45,20 @@ public interface Bmv2DeviceAgent { |
43 | boolean ping(); | 45 | boolean ping(); |
44 | 46 | ||
45 | /** | 47 | /** |
46 | - * Adds a new table entry. | 48 | + * Adds a new table entry. If successful returns a table-specific identifier of the installed entry. |
47 | * | 49 | * |
48 | - * @param entry a table entry value | 50 | + * @param entry a table entry |
49 | - * @return table-specific entry ID | 51 | + * @return a long value |
50 | * @throws Bmv2RuntimeException if any error occurs | 52 | * @throws Bmv2RuntimeException if any error occurs |
51 | */ | 53 | */ |
52 | long addTableEntry(Bmv2TableEntry entry) throws Bmv2RuntimeException; | 54 | long addTableEntry(Bmv2TableEntry entry) throws Bmv2RuntimeException; |
53 | 55 | ||
54 | /** | 56 | /** |
55 | - * Modifies an existing table entry by updating its action. | 57 | + * Modifies an existing entry at by updating its action. |
56 | * | 58 | * |
57 | - * @param tableName string value of table name | 59 | + * @param tableName a string value |
58 | - * @param entryId long value of entry ID | 60 | + * @param entryId a long value |
59 | - * @param action an action value | 61 | + * @param action an action |
60 | * @throws Bmv2RuntimeException if any error occurs | 62 | * @throws Bmv2RuntimeException if any error occurs |
61 | */ | 63 | */ |
62 | void modifyTableEntry(String tableName, long entryId, Bmv2Action action) throws Bmv2RuntimeException; | 64 | void modifyTableEntry(String tableName, long entryId, Bmv2Action action) throws Bmv2RuntimeException; |
... | @@ -64,16 +66,16 @@ public interface Bmv2DeviceAgent { | ... | @@ -64,16 +66,16 @@ public interface Bmv2DeviceAgent { |
64 | /** | 66 | /** |
65 | * Deletes currently installed entry. | 67 | * Deletes currently installed entry. |
66 | * | 68 | * |
67 | - * @param tableName string value of table name | 69 | + * @param tableName a string value |
68 | - * @param entryId long value of entry ID | 70 | + * @param entryId a long value |
69 | * @throws Bmv2RuntimeException if any error occurs | 71 | * @throws Bmv2RuntimeException if any error occurs |
70 | */ | 72 | */ |
71 | void deleteTableEntry(String tableName, long entryId) throws Bmv2RuntimeException; | 73 | void deleteTableEntry(String tableName, long entryId) throws Bmv2RuntimeException; |
72 | 74 | ||
73 | /** | 75 | /** |
74 | - * Sets table default action. | 76 | + * Sets a default action for the given table. |
75 | * | 77 | * |
76 | - * @param tableName string value of table name | 78 | + * @param tableName a string value |
77 | * @param action an action value | 79 | * @param action an action value |
78 | * @throws Bmv2RuntimeException if any error occurs | 80 | * @throws Bmv2RuntimeException if any error occurs |
79 | */ | 81 | */ |
... | @@ -97,7 +99,7 @@ public interface Bmv2DeviceAgent { | ... | @@ -97,7 +99,7 @@ public interface Bmv2DeviceAgent { |
97 | List<Bmv2ParsedTableEntry> getTableEntries(String tableName) throws Bmv2RuntimeException; | 99 | List<Bmv2ParsedTableEntry> getTableEntries(String tableName) throws Bmv2RuntimeException; |
98 | 100 | ||
99 | /** | 101 | /** |
100 | - * Requests the device to transmit a given byte sequence over the given port. | 102 | + * Requests the device to transmit a given packet over the given port. |
101 | * | 103 | * |
102 | * @param portNumber a port number | 104 | * @param portNumber a port number |
103 | * @param packet a byte sequence | 105 | * @param packet a byte sequence |
... | @@ -106,7 +108,7 @@ public interface Bmv2DeviceAgent { | ... | @@ -106,7 +108,7 @@ public interface Bmv2DeviceAgent { |
106 | void transmitPacket(int portNumber, ImmutableByteSequence packet) throws Bmv2RuntimeException; | 108 | void transmitPacket(int portNumber, ImmutableByteSequence packet) throws Bmv2RuntimeException; |
107 | 109 | ||
108 | /** | 110 | /** |
109 | - * Resets the state of the switch (e.g. delete all entries, etc.). | 111 | + * Resets the state of the switch. |
110 | * | 112 | * |
111 | * @throws Bmv2RuntimeException if any error occurs | 113 | * @throws Bmv2RuntimeException if any error occurs |
112 | */ | 114 | */ |
... | @@ -121,7 +123,7 @@ public interface Bmv2DeviceAgent { | ... | @@ -121,7 +123,7 @@ public interface Bmv2DeviceAgent { |
121 | String dumpJsonConfig() throws Bmv2RuntimeException; | 123 | String dumpJsonConfig() throws Bmv2RuntimeException; |
122 | 124 | ||
123 | /** | 125 | /** |
124 | - * Returns the md5 sum of the JSON-formatted model configuration currently used to process packets. | 126 | + * Returns the MD5 sum of the JSON-formatted configuration currently used to process packets. |
125 | * | 127 | * |
126 | * @return a string value | 128 | * @return a string value |
127 | * @throws Bmv2RuntimeException if any error occurs | 129 | * @throws Bmv2RuntimeException if any error occurs |
... | @@ -139,7 +141,7 @@ public interface Bmv2DeviceAgent { | ... | @@ -139,7 +141,7 @@ public interface Bmv2DeviceAgent { |
139 | Pair<Long, Long> readTableEntryCounter(String tableName, long entryId) throws Bmv2RuntimeException; | 141 | Pair<Long, Long> readTableEntryCounter(String tableName, long entryId) throws Bmv2RuntimeException; |
140 | 142 | ||
141 | /** | 143 | /** |
142 | - * Returns the counter values for a given counter and index. | 144 | + * Returns the values of a given counter instance. |
143 | * | 145 | * |
144 | * @param counterName a counter name | 146 | * @param counterName a counter name |
145 | * @param index an integer value | 147 | * @param index an integer value | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | import org.onlab.util.ImmutableByteSequence; | 22 | import org.onlab.util.ImmutableByteSequence; |
... | @@ -23,8 +24,9 @@ import org.onlab.util.ImmutableByteSequence; | ... | @@ -23,8 +24,9 @@ import org.onlab.util.ImmutableByteSequence; |
23 | import static com.google.common.base.Preconditions.checkNotNull; | 24 | import static com.google.common.base.Preconditions.checkNotNull; |
24 | 25 | ||
25 | /** | 26 | /** |
26 | - * Representation of a BMv2 exact match parameter. | 27 | + * A BMv2 exact match parameter. |
27 | */ | 28 | */ |
29 | +@Beta | ||
28 | public final class Bmv2ExactMatchParam implements Bmv2MatchParam { | 30 | public final class Bmv2ExactMatchParam implements Bmv2MatchParam { |
29 | 31 | ||
30 | private final ImmutableByteSequence value; | 32 | private final ImmutableByteSequence value; |
... | @@ -45,7 +47,7 @@ public final class Bmv2ExactMatchParam implements Bmv2MatchParam { | ... | @@ -45,7 +47,7 @@ public final class Bmv2ExactMatchParam implements Bmv2MatchParam { |
45 | } | 47 | } |
46 | 48 | ||
47 | /** | 49 | /** |
48 | - * Return the byte sequence value matched by this parameter. | 50 | + * Return the byte sequence matched by this parameter. |
49 | * | 51 | * |
50 | * @return an immutable byte buffer value | 52 | * @return an immutable byte buffer value |
51 | */ | 53 | */ | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | import org.onlab.util.KryoNamespace; | 22 | import org.onlab.util.KryoNamespace; |
... | @@ -31,6 +32,7 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -31,6 +32,7 @@ import static com.google.common.base.Preconditions.checkNotNull; |
31 | /** | 32 | /** |
32 | * Extension selector for BMv2 used as a wrapper for multiple BMv2 match parameters. | 33 | * Extension selector for BMv2 used as a wrapper for multiple BMv2 match parameters. |
33 | */ | 34 | */ |
35 | +@Beta | ||
34 | public final class Bmv2ExtensionSelector extends AbstractExtension implements ExtensionSelector { | 36 | public final class Bmv2ExtensionSelector extends AbstractExtension implements ExtensionSelector { |
35 | 37 | ||
36 | private final KryoNamespace appKryo = new KryoNamespace.Builder() | 38 | private final KryoNamespace appKryo = new KryoNamespace.Builder() | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | import org.onlab.util.KryoNamespace; | 22 | import org.onlab.util.KryoNamespace; |
... | @@ -28,16 +29,27 @@ import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.Exten | ... | @@ -28,16 +29,27 @@ import static org.onosproject.net.flow.instructions.ExtensionTreatmentType.Exten |
28 | /** | 29 | /** |
29 | * Extension treatment for BMv2 used as a wrapper for a {@link Bmv2Action}. | 30 | * Extension treatment for BMv2 used as a wrapper for a {@link Bmv2Action}. |
30 | */ | 31 | */ |
32 | +@Beta | ||
31 | public final class Bmv2ExtensionTreatment extends AbstractExtension implements ExtensionTreatment { | 33 | public final class Bmv2ExtensionTreatment extends AbstractExtension implements ExtensionTreatment { |
32 | 34 | ||
33 | private final KryoNamespace appKryo = new KryoNamespace.Builder().build(); | 35 | private final KryoNamespace appKryo = new KryoNamespace.Builder().build(); |
34 | private Bmv2Action action; | 36 | private Bmv2Action action; |
35 | 37 | ||
38 | + /** | ||
39 | + * Creates a new extension treatment for the given BMv2 action. | ||
40 | + * | ||
41 | + * @param action an action | ||
42 | + */ | ||
36 | public Bmv2ExtensionTreatment(Bmv2Action action) { | 43 | public Bmv2ExtensionTreatment(Bmv2Action action) { |
37 | this.action = action; | 44 | this.action = action; |
38 | } | 45 | } |
39 | 46 | ||
40 | - public Bmv2Action getAction() { | 47 | + /** |
48 | + * Returns the action contained by this extension selector. | ||
49 | + * | ||
50 | + * @return an action | ||
51 | + */ | ||
52 | + public Bmv2Action action() { | ||
41 | return action; | 53 | return action; |
42 | } | 54 | } |
43 | 55 | ... | ... |
... | @@ -16,15 +16,17 @@ | ... | @@ -16,15 +16,17 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.Objects; | 20 | import com.google.common.base.Objects; |
20 | import org.onosproject.net.flow.FlowRule; | 21 | import org.onosproject.net.flow.FlowRule; |
21 | 22 | ||
22 | import java.util.Date; | 23 | import java.util.Date; |
23 | 24 | ||
24 | /** | 25 | /** |
25 | - * A wrapper class for a ONOS flow rule installed on a BMv2 device. | 26 | + * A wrapper for a ONOS flow rule installed on a BMv2 device. |
26 | */ | 27 | */ |
27 | -public class Bmv2FlowRuleWrapper { | 28 | +@Beta |
29 | +public final class Bmv2FlowRuleWrapper { | ||
28 | 30 | ||
29 | private final FlowRule rule; | 31 | private final FlowRule rule; |
30 | private final long entryId; | 32 | private final long entryId; | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | import org.onlab.util.ImmutableByteSequence; | 22 | import org.onlab.util.ImmutableByteSequence; |
... | @@ -24,8 +25,9 @@ import static com.google.common.base.Preconditions.checkArgument; | ... | @@ -24,8 +25,9 @@ import static com.google.common.base.Preconditions.checkArgument; |
24 | import static com.google.common.base.Preconditions.checkNotNull; | 25 | import static com.google.common.base.Preconditions.checkNotNull; |
25 | 26 | ||
26 | /** | 27 | /** |
27 | - * Representation of a BMv2 longest prefix match (LPM) parameter. | 28 | + * A BMv2 longest prefix match (LPM) parameter. |
28 | */ | 29 | */ |
30 | +@Beta | ||
29 | public final class Bmv2LpmMatchParam implements Bmv2MatchParam { | 31 | public final class Bmv2LpmMatchParam implements Bmv2MatchParam { |
30 | 32 | ||
31 | private final ImmutableByteSequence value; | 33 | private final ImmutableByteSequence value; | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.collect.Lists; | 21 | import com.google.common.collect.Lists; |
21 | import org.onlab.util.ImmutableByteSequence; | 22 | import org.onlab.util.ImmutableByteSequence; |
... | @@ -30,6 +31,7 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -30,6 +31,7 @@ import static com.google.common.base.Preconditions.checkNotNull; |
30 | /** | 31 | /** |
31 | * A match key of a BMv2 match-action table entry. | 32 | * A match key of a BMv2 match-action table entry. |
32 | */ | 33 | */ |
34 | +@Beta | ||
33 | public final class Bmv2MatchKey { | 35 | public final class Bmv2MatchKey { |
34 | 36 | ||
35 | private final List<Bmv2MatchParam> matchParams; | 37 | private final List<Bmv2MatchParam> matchParams; | ... | ... |
... | @@ -16,9 +16,12 @@ | ... | @@ -16,9 +16,12 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
20 | + | ||
19 | /** | 21 | /** |
20 | * Representation of a BMv2 match parameter. | 22 | * Representation of a BMv2 match parameter. |
21 | */ | 23 | */ |
24 | +@Beta | ||
22 | public interface Bmv2MatchParam { | 25 | public interface Bmv2MatchParam { |
23 | 26 | ||
24 | /** | 27 | /** | ... | ... |
... | @@ -16,12 +16,14 @@ | ... | @@ -16,12 +16,14 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | 22 | ||
22 | /** | 23 | /** |
23 | * Representation of a table entry installed on a BMv2 device. | 24 | * Representation of a table entry installed on a BMv2 device. |
24 | */ | 25 | */ |
26 | +@Beta | ||
25 | public final class Bmv2ParsedTableEntry { | 27 | public final class Bmv2ParsedTableEntry { |
26 | private final long entryId; | 28 | private final long entryId; |
27 | private final Bmv2MatchKey matchKey; | 29 | private final Bmv2MatchKey matchKey; | ... | ... |
... | @@ -16,12 +16,14 @@ | ... | @@ -16,12 +16,14 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | 22 | ||
22 | /** | 23 | /** |
23 | * Information of a port of a BMv2 device. | 24 | * Information of a port of a BMv2 device. |
24 | */ | 25 | */ |
26 | +@Beta | ||
25 | public final class Bmv2PortInfo { | 27 | public final class Bmv2PortInfo { |
26 | 28 | ||
27 | private final String ifaceName; | 29 | private final String ifaceName; | ... | ... |
... | @@ -16,9 +16,12 @@ | ... | @@ -16,9 +16,12 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
20 | + | ||
19 | /** | 21 | /** |
20 | * General exception of the BMv2 runtime APIs. | 22 | * General exception of the BMv2 runtime APIs. |
21 | */ | 23 | */ |
24 | +@Beta | ||
22 | public final class Bmv2RuntimeException extends Exception { | 25 | public final class Bmv2RuntimeException extends Exception { |
23 | 26 | ||
24 | private final Code code; | 27 | private final Code code; | ... | ... |
... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
20 | + | ||
19 | import java.util.Objects; | 21 | import java.util.Objects; |
20 | 22 | ||
21 | import static com.google.common.base.Preconditions.checkArgument; | 23 | import static com.google.common.base.Preconditions.checkArgument; |
... | @@ -24,6 +26,7 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -24,6 +26,7 @@ import static com.google.common.base.Preconditions.checkNotNull; |
24 | /** | 26 | /** |
25 | * An entry of a match-action table in a BMv2 device. | 27 | * An entry of a match-action table in a BMv2 device. |
26 | */ | 28 | */ |
29 | +@Beta | ||
27 | public final class Bmv2TableEntry { | 30 | public final class Bmv2TableEntry { |
28 | 31 | ||
29 | private static final int NO_PRIORITY_VALUE = -1; | 32 | private static final int NO_PRIORITY_VALUE = -1; | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | import org.onosproject.net.DeviceId; | 22 | import org.onosproject.net.DeviceId; |
... | @@ -23,6 +24,7 @@ import org.onosproject.net.DeviceId; | ... | @@ -23,6 +24,7 @@ import org.onosproject.net.DeviceId; |
23 | /** | 24 | /** |
24 | * A reference to a table entry installed on a BMv2 device. | 25 | * A reference to a table entry installed on a BMv2 device. |
25 | */ | 26 | */ |
27 | +@Beta | ||
26 | public final class Bmv2TableEntryReference { | 28 | public final class Bmv2TableEntryReference { |
27 | 29 | ||
28 | 30 | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import com.google.common.base.MoreObjects; | 20 | import com.google.common.base.MoreObjects; |
20 | import com.google.common.base.Objects; | 21 | import com.google.common.base.Objects; |
21 | import org.onlab.util.ImmutableByteSequence; | 22 | import org.onlab.util.ImmutableByteSequence; |
... | @@ -26,6 +27,7 @@ import static com.google.common.base.Preconditions.checkState; | ... | @@ -26,6 +27,7 @@ import static com.google.common.base.Preconditions.checkState; |
26 | /** | 27 | /** |
27 | * Representation of a BMv2 ternary match parameter. | 28 | * Representation of a BMv2 ternary match parameter. |
28 | */ | 29 | */ |
30 | +@Beta | ||
29 | public final class Bmv2TernaryMatchParam implements Bmv2MatchParam { | 31 | public final class Bmv2TernaryMatchParam implements Bmv2MatchParam { |
30 | 32 | ||
31 | private final ImmutableByteSequence value; | 33 | private final ImmutableByteSequence value; | ... | ... |
... | @@ -17,6 +17,7 @@ | ... | @@ -17,6 +17,7 @@ |
17 | package org.onosproject.bmv2.api.runtime; | 17 | package org.onosproject.bmv2.api.runtime; |
18 | 18 | ||
19 | 19 | ||
20 | +import com.google.common.annotations.Beta; | ||
20 | import com.google.common.base.MoreObjects; | 21 | import com.google.common.base.MoreObjects; |
21 | 22 | ||
22 | import java.util.Objects; | 23 | import java.util.Objects; |
... | @@ -24,6 +25,7 @@ import java.util.Objects; | ... | @@ -24,6 +25,7 @@ import java.util.Objects; |
24 | /** | 25 | /** |
25 | * Representation of a BMv2 valid match parameter. | 26 | * Representation of a BMv2 valid match parameter. |
26 | */ | 27 | */ |
28 | +@Beta | ||
27 | public final class Bmv2ValidMatchParam implements Bmv2MatchParam { | 29 | public final class Bmv2ValidMatchParam implements Bmv2MatchParam { |
28 | 30 | ||
29 | private final boolean flag; | 31 | private final boolean flag; | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.service; | 17 | package org.onosproject.bmv2.api.service; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import org.onosproject.bmv2.api.runtime.Bmv2DeviceAgent; | 20 | import org.onosproject.bmv2.api.runtime.Bmv2DeviceAgent; |
20 | import org.onosproject.bmv2.api.runtime.Bmv2RuntimeException; | 21 | import org.onosproject.bmv2.api.runtime.Bmv2RuntimeException; |
21 | import org.onosproject.net.DeviceId; | 22 | import org.onosproject.net.DeviceId; |
... | @@ -23,6 +24,7 @@ import org.onosproject.net.DeviceId; | ... | @@ -23,6 +24,7 @@ import org.onosproject.net.DeviceId; |
23 | /** | 24 | /** |
24 | * A controller of BMv2 devices. | 25 | * A controller of BMv2 devices. |
25 | */ | 26 | */ |
27 | +@Beta | ||
26 | public interface Bmv2Controller { | 28 | public interface Bmv2Controller { |
27 | 29 | ||
28 | /** | 30 | /** | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.service; | 17 | package org.onosproject.bmv2.api.service; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import org.onosproject.bmv2.api.context.Bmv2DeviceContext; | 20 | import org.onosproject.bmv2.api.context.Bmv2DeviceContext; |
20 | import org.onosproject.bmv2.api.context.Bmv2Interpreter; | 21 | import org.onosproject.bmv2.api.context.Bmv2Interpreter; |
21 | import org.onosproject.net.DeviceId; | 22 | import org.onosproject.net.DeviceId; |
... | @@ -23,6 +24,7 @@ import org.onosproject.net.DeviceId; | ... | @@ -23,6 +24,7 @@ import org.onosproject.net.DeviceId; |
23 | /** | 24 | /** |
24 | * A service for managing BMv2 device contexts. | 25 | * A service for managing BMv2 device contexts. |
25 | */ | 26 | */ |
27 | +@Beta | ||
26 | public interface Bmv2DeviceContextService { | 28 | public interface Bmv2DeviceContextService { |
27 | 29 | ||
28 | /** | 30 | /** | ... | ... |
... | @@ -16,11 +16,13 @@ | ... | @@ -16,11 +16,13 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.service; | 17 | package org.onosproject.bmv2.api.service; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import org.onosproject.bmv2.api.runtime.Bmv2Device; | 20 | import org.onosproject.bmv2.api.runtime.Bmv2Device; |
20 | 21 | ||
21 | /** | 22 | /** |
22 | * A listener of BMv2 device events. | 23 | * A listener of BMv2 device events. |
23 | */ | 24 | */ |
25 | +@Beta | ||
24 | public interface Bmv2DeviceListener { | 26 | public interface Bmv2DeviceListener { |
25 | 27 | ||
26 | /** | 28 | /** | ... | ... |
... | @@ -16,12 +16,14 @@ | ... | @@ -16,12 +16,14 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.service; | 17 | package org.onosproject.bmv2.api.service; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import org.onlab.util.ImmutableByteSequence; | 20 | import org.onlab.util.ImmutableByteSequence; |
20 | import org.onosproject.bmv2.api.runtime.Bmv2Device; | 21 | import org.onosproject.bmv2.api.runtime.Bmv2Device; |
21 | 22 | ||
22 | /** | 23 | /** |
23 | * A listener of BMv2 packet events. | 24 | * A listener of BMv2 packet events. |
24 | */ | 25 | */ |
26 | +@Beta | ||
25 | public interface Bmv2PacketListener { | 27 | public interface Bmv2PacketListener { |
26 | 28 | ||
27 | /** | 29 | /** | ... | ... |
... | @@ -17,6 +17,7 @@ | ... | @@ -17,6 +17,7 @@ |
17 | package org.onosproject.bmv2.api.service; | 17 | package org.onosproject.bmv2.api.service; |
18 | 18 | ||
19 | 19 | ||
20 | +import com.google.common.annotations.Beta; | ||
20 | import org.onosproject.bmv2.api.context.Bmv2FlowRuleTranslator; | 21 | import org.onosproject.bmv2.api.context.Bmv2FlowRuleTranslator; |
21 | import org.onosproject.bmv2.api.runtime.Bmv2FlowRuleWrapper; | 22 | import org.onosproject.bmv2.api.runtime.Bmv2FlowRuleWrapper; |
22 | import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference; | 23 | import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference; |
... | @@ -24,6 +25,7 @@ import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference; | ... | @@ -24,6 +25,7 @@ import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference; |
24 | /** | 25 | /** |
25 | * A service for managing BMv2 table entries. | 26 | * A service for managing BMv2 table entries. |
26 | */ | 27 | */ |
28 | +@Beta | ||
27 | public interface Bmv2TableEntryService { | 29 | public interface Bmv2TableEntryService { |
28 | 30 | ||
29 | /** | 31 | /** | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | 16 | ||
17 | package org.onosproject.bmv2.api.utils; | 17 | package org.onosproject.bmv2.api.utils; |
18 | 18 | ||
19 | +import com.google.common.annotations.Beta; | ||
19 | import org.onlab.util.HexString; | 20 | import org.onlab.util.HexString; |
20 | import org.onlab.util.ImmutableByteSequence; | 21 | import org.onlab.util.ImmutableByteSequence; |
21 | 22 | ||
... | @@ -25,8 +26,9 @@ import static com.google.common.base.Preconditions.checkArgument; | ... | @@ -25,8 +26,9 @@ import static com.google.common.base.Preconditions.checkArgument; |
25 | import static com.google.common.base.Preconditions.checkNotNull; | 26 | import static com.google.common.base.Preconditions.checkNotNull; |
26 | 27 | ||
27 | /** | 28 | /** |
28 | - * Collection of util methods to deal with flow rule translation. | 29 | + * Collection of utility methods to deal with flow rule translation. |
29 | */ | 30 | */ |
31 | +@Beta | ||
30 | public final class Bmv2TranslatorUtils { | 32 | public final class Bmv2TranslatorUtils { |
31 | 33 | ||
32 | private Bmv2TranslatorUtils() { | 34 | private Bmv2TranslatorUtils() { | ... | ... |
... | @@ -22,11 +22,14 @@ import org.onosproject.bmv2.api.context.Bmv2Configuration; | ... | @@ -22,11 +22,14 @@ import org.onosproject.bmv2.api.context.Bmv2Configuration; |
22 | import org.onosproject.bmv2.api.context.Bmv2Interpreter; | 22 | import org.onosproject.bmv2.api.context.Bmv2Interpreter; |
23 | import org.onosproject.bmv2.api.context.Bmv2InterpreterException; | 23 | import org.onosproject.bmv2.api.context.Bmv2InterpreterException; |
24 | import org.onosproject.bmv2.api.runtime.Bmv2Action; | 24 | import org.onosproject.bmv2.api.runtime.Bmv2Action; |
25 | -import org.onosproject.bmv2.api.utils.Bmv2TranslatorUtils; | 25 | +import org.onosproject.net.PortNumber; |
26 | import org.onosproject.net.flow.TrafficTreatment; | 26 | import org.onosproject.net.flow.TrafficTreatment; |
27 | import org.onosproject.net.flow.criteria.Criterion; | 27 | import org.onosproject.net.flow.criteria.Criterion; |
28 | import org.onosproject.net.flow.instructions.Instruction; | 28 | import org.onosproject.net.flow.instructions.Instruction; |
29 | 29 | ||
30 | +import static org.onlab.util.ImmutableByteSequence.copyFrom; | ||
31 | +import static org.onosproject.bmv2.api.utils.Bmv2TranslatorUtils.ByteSequenceFitException; | ||
32 | +import static org.onosproject.bmv2.api.utils.Bmv2TranslatorUtils.fitByteSequence; | ||
30 | import static org.onosproject.net.PortNumber.CONTROLLER; | 33 | import static org.onosproject.net.PortNumber.CONTROLLER; |
31 | import static org.onosproject.net.flow.instructions.Instructions.OutputInstruction; | 34 | import static org.onosproject.net.flow.instructions.Instructions.OutputInstruction; |
32 | 35 | ||
... | @@ -37,10 +40,10 @@ public final class Bmv2DefaultInterpreterImpl implements Bmv2Interpreter { | ... | @@ -37,10 +40,10 @@ public final class Bmv2DefaultInterpreterImpl implements Bmv2Interpreter { |
37 | 40 | ||
38 | public static final String TABLE0 = "table0"; | 41 | public static final String TABLE0 = "table0"; |
39 | public static final String SEND_TO_CPU = "send_to_cpu"; | 42 | public static final String SEND_TO_CPU = "send_to_cpu"; |
43 | + public static final String PORT = "port"; | ||
40 | public static final String DROP = "_drop"; | 44 | public static final String DROP = "_drop"; |
41 | public static final String SET_EGRESS_PORT = "set_egress_port"; | 45 | public static final String SET_EGRESS_PORT = "set_egress_port"; |
42 | 46 | ||
43 | - // Lazily populate field map. | ||
44 | private static final ImmutableBiMap<Criterion.Type, String> CRITERION_MAP = ImmutableBiMap.of( | 47 | private static final ImmutableBiMap<Criterion.Type, String> CRITERION_MAP = ImmutableBiMap.of( |
45 | Criterion.Type.IN_PORT, "standard_metadata.ingress_port", | 48 | Criterion.Type.IN_PORT, "standard_metadata.ingress_port", |
46 | Criterion.Type.ETH_DST, "ethernet.dstAddr", | 49 | Criterion.Type.ETH_DST, "ethernet.dstAddr", |
... | @@ -64,10 +67,9 @@ public final class Bmv2DefaultInterpreterImpl implements Bmv2Interpreter { | ... | @@ -64,10 +67,9 @@ public final class Bmv2DefaultInterpreterImpl implements Bmv2Interpreter { |
64 | public Bmv2Action mapTreatment(TrafficTreatment treatment, Bmv2Configuration configuration) | 67 | public Bmv2Action mapTreatment(TrafficTreatment treatment, Bmv2Configuration configuration) |
65 | throws Bmv2InterpreterException { | 68 | throws Bmv2InterpreterException { |
66 | 69 | ||
67 | - | ||
68 | if (treatment.allInstructions().size() == 0) { | 70 | if (treatment.allInstructions().size() == 0) { |
69 | // No instructions means drop for us. | 71 | // No instructions means drop for us. |
70 | - return Bmv2Action.builder().withName(DROP).build(); | 72 | + return actionWithName(DROP); |
71 | } else if (treatment.allInstructions().size() > 1) { | 73 | } else if (treatment.allInstructions().size() > 1) { |
72 | // Otherwise, we understand treatments with only 1 instruction. | 74 | // Otherwise, we understand treatments with only 1 instruction. |
73 | throw new Bmv2InterpreterException("Treatment has multiple instructions"); | 75 | throw new Bmv2InterpreterException("Treatment has multiple instructions"); |
... | @@ -78,47 +80,38 @@ public final class Bmv2DefaultInterpreterImpl implements Bmv2Interpreter { | ... | @@ -78,47 +80,38 @@ public final class Bmv2DefaultInterpreterImpl implements Bmv2Interpreter { |
78 | switch (instruction.type()) { | 80 | switch (instruction.type()) { |
79 | case OUTPUT: | 81 | case OUTPUT: |
80 | OutputInstruction outInstruction = (OutputInstruction) instruction; | 82 | OutputInstruction outInstruction = (OutputInstruction) instruction; |
81 | - if (outInstruction.port() == CONTROLLER) { | 83 | + PortNumber port = outInstruction.port(); |
82 | - return Bmv2Action.builder().withName(SEND_TO_CPU).build(); | 84 | + if (!port.isLogical()) { |
85 | + return buildEgressAction(port, configuration); | ||
86 | + } else if (port.equals(CONTROLLER)) { | ||
87 | + return actionWithName(SEND_TO_CPU); | ||
83 | } else { | 88 | } else { |
84 | - return buildEgressAction(outInstruction, configuration); | 89 | + throw new Bmv2InterpreterException("Egress on logical port not supported: " + port); |
85 | } | 90 | } |
86 | case NOACTION: | 91 | case NOACTION: |
87 | - return Bmv2Action.builder().withName(DROP).build(); | 92 | + return actionWithName(DROP); |
88 | default: | 93 | default: |
89 | throw new Bmv2InterpreterException("Instruction type not supported: " + instruction.type().name()); | 94 | throw new Bmv2InterpreterException("Instruction type not supported: " + instruction.type().name()); |
90 | } | 95 | } |
91 | } | 96 | } |
92 | 97 | ||
93 | - | 98 | + private Bmv2Action buildEgressAction(PortNumber port, Bmv2Configuration configuration) |
94 | - /** | ||
95 | - * Builds an egress action equivalent to the given output instruction for the given configuration. | ||
96 | - * | ||
97 | - * @param instruction an output instruction | ||
98 | - * @param configuration a configuration | ||
99 | - * @return a BMv2 action | ||
100 | - * @throws Bmv2InterpreterException if the instruction cannot be translated to a BMv2 action | ||
101 | - */ | ||
102 | - private Bmv2Action buildEgressAction(OutputInstruction instruction, Bmv2Configuration configuration) | ||
103 | throws Bmv2InterpreterException { | 99 | throws Bmv2InterpreterException { |
104 | 100 | ||
105 | - Bmv2Action.Builder actionBuilder = Bmv2Action.builder(); | 101 | + int portBitWidth = configuration.action(SET_EGRESS_PORT).runtimeData(PORT).bitWidth(); |
106 | 102 | ||
107 | - actionBuilder.withName(SET_EGRESS_PORT); | ||
108 | - | ||
109 | - if (instruction.port().isLogical()) { | ||
110 | - throw new Bmv2InterpreterException("Output on logic port not supported: " + instruction); | ||
111 | - } | ||
112 | - | ||
113 | - // Get the byte sequence for the out port with the right length | ||
114 | - long portNumber = instruction.port().toLong(); | ||
115 | - int bitWidth = configuration.action(SET_EGRESS_PORT).runtimeData("port").bitWidth(); | ||
116 | try { | 103 | try { |
117 | - ImmutableByteSequence outPort = Bmv2TranslatorUtils.fitByteSequence( | 104 | + ImmutableByteSequence portBs = fitByteSequence(copyFrom(port.toLong()), portBitWidth); |
118 | - ImmutableByteSequence.copyFrom(portNumber), bitWidth); | 105 | + return Bmv2Action.builder() |
119 | - return Bmv2Action.builder().withName(SET_EGRESS_PORT).addParameter(outPort).build(); | 106 | + .withName(SET_EGRESS_PORT) |
120 | - } catch (Bmv2TranslatorUtils.ByteSequenceFitException e) { | 107 | + .addParameter(portBs) |
108 | + .build(); | ||
109 | + } catch (ByteSequenceFitException e) { | ||
121 | throw new Bmv2InterpreterException(e.getMessage()); | 110 | throw new Bmv2InterpreterException(e.getMessage()); |
122 | } | 111 | } |
123 | } | 112 | } |
113 | + | ||
114 | + private Bmv2Action actionWithName(String name) { | ||
115 | + return Bmv2Action.builder().withName(name).build(); | ||
116 | + } | ||
124 | } | 117 | } | ... | ... |
... | @@ -241,7 +241,7 @@ public class Bmv2FlowRuleTranslatorImpl implements Bmv2FlowRuleTranslator { | ... | @@ -241,7 +241,7 @@ public class Bmv2FlowRuleTranslatorImpl implements Bmv2FlowRuleTranslator { |
241 | 241 | ||
242 | if (extTreatment.type() == ExtensionTreatmentTypes.BMV2_ACTION.type()) { | 242 | if (extTreatment.type() == ExtensionTreatmentTypes.BMV2_ACTION.type()) { |
243 | if (extTreatment instanceof Bmv2ExtensionTreatment) { | 243 | if (extTreatment instanceof Bmv2ExtensionTreatment) { |
244 | - return ((Bmv2ExtensionTreatment) extTreatment).getAction(); | 244 | + return ((Bmv2ExtensionTreatment) extTreatment).action(); |
245 | } else { | 245 | } else { |
246 | throw new Bmv2FlowRuleTranslatorException("Unable to decode treatment extension: " + extTreatment); | 246 | throw new Bmv2FlowRuleTranslatorException("Unable to decode treatment extension: " + extTreatment); |
247 | } | 247 | } | ... | ... |
-
Please register or login to post a comment