Polished BMv2 protocol module

- Improved and fixed typos in javadocs
- Added missing beta API annotations
- Refactored the default interpreter implementation

Change-Id: Ibfb21d31415d8f25cc67307f8bea2871951c9a8f
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2DefaultConfiguration.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2DefaultConfiguration.java
index 53a31b9..f047306 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2DefaultConfiguration.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2DefaultConfiguration.java
@@ -18,6 +18,7 @@
 
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
@@ -36,6 +37,7 @@
 /**
  * Default implementation of a BMv2 configuration backed by a JSON object.
  */
+@Beta
 public final class Bmv2DefaultConfiguration implements Bmv2Configuration {
 
     private final JsonObject json;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslator.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslator.java
index 3fb5b11..bc768d0 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslator.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslator.java
@@ -37,9 +37,9 @@
      *  <li> action: is built using the context interpreter
      *          {@link Bmv2Interpreter#mapTreatment(org.onosproject.net.flow.TrafficTreatment, Bmv2Configuration)
      *          treatment mapping function} or the flow rule
-     *          {@link org.onosproject.bmv2.api.runtime.Bmv2ExtensionTreatment} extension treatment} (if any).
-     *  <li> timeout: if the table supports timeout, use the same as the flow rule, otherwise none (i.e. permanent
-     *          entry).
+     *          {@link org.onosproject.bmv2.api.runtime.Bmv2ExtensionTreatment extension treatment} (if any).
+     *  <li> timeout: if the table supports timeout, use the same as the flow rule, otherwise none (i.e. returns a
+     *          permanent entry).
      * </ul>
      *
      * @param rule    a flow rule
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslatorException.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslatorException.java
index 49f999d..645ac33 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslatorException.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2FlowRuleTranslatorException.java
@@ -16,10 +16,13 @@
 
 package org.onosproject.bmv2.api.context;
 
+import com.google.common.annotations.Beta;
+
 /**
  * BMv2 flow rule translator exception.
  */
-public class Bmv2FlowRuleTranslatorException extends Exception {
+@Beta
+public final class Bmv2FlowRuleTranslatorException extends Exception {
 
     public Bmv2FlowRuleTranslatorException(String msg) {
         super(msg);
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2InterpreterException.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2InterpreterException.java
index 5e774ad..7c143fc 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2InterpreterException.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/context/Bmv2InterpreterException.java
@@ -16,10 +16,13 @@
 
 package org.onosproject.bmv2.api.context;
 
+import com.google.common.annotations.Beta;
+
 /**
  * A BMv2 interpreter exception.
  */
-public class Bmv2InterpreterException extends Exception {
+@Beta
+public final class Bmv2InterpreterException extends Exception {
 
     public Bmv2InterpreterException(String message) {
         super(message);
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Action.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Action.java
index 0f1983f..e05803c 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Action.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Action.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.Lists;
 import org.onlab.util.ImmutableByteSequence;
@@ -30,6 +31,7 @@
 /**
  * An action of a BMv2 match-action table entry.
  */
+@Beta
 public final class Bmv2Action {
 
     private final String name;
@@ -58,8 +60,7 @@
     }
 
     /**
-     * Returns an immutable view of the ordered list of parameters of this
-     * action.
+     * Returns an immutable view of the list of parameters of this action.
      *
      * @return list of byte sequence
      */
@@ -106,7 +107,7 @@
         }
 
         /**
-         * Set the action name.
+         * Sets the action name.
          *
          * @param actionName a string value
          * @return this
@@ -117,7 +118,7 @@
         }
 
         /**
-         * Add a parameter at the end of the parameters list.
+         * Adds a parameter at the end of the parameters list.
          *
          * @param parameter a ByteBuffer value
          * @return this
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Device.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Device.java
index bff414f..c3efce3 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Device.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2Device.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.Objects;
 import org.onosproject.net.DeviceId;
 
@@ -27,8 +28,9 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * Representation of a BMv2 device.
+ * A BMv2 device.
  */
+@Beta
 public final class Bmv2Device {
 
     public static final String N_A = "n/a";
@@ -47,9 +49,9 @@
     /**
      * Creates a new BMv2 device object.
      *
-     * @param thriftServerHost the hostname / IP address of the Thrift runtime server running on the device
-     * @param thriftServerPort the port of the Thrift runtime server running on the device
-     * @param internalDeviceId the internal device ID number
+     * @param thriftServerHost the hostname or IP address of the Thrift RPC server running on the device
+     * @param thriftServerPort the listening port used by the device Thrift RPC server
+     * @param internalDeviceId the internal numeric device ID
      */
     public Bmv2Device(String thriftServerHost, int thriftServerPort, int internalDeviceId) {
         this.thriftServerHost = checkNotNull(thriftServerHost, "host cannot be null");
@@ -68,7 +70,7 @@
     }
 
     /**
-     * Returns the hostname (or IP address) of the Thrift runtime server running on the device.
+     * Returns the hostname or IP address of the Thrift RPC server running on the device.
      *
      * @return a string value
      */
@@ -77,7 +79,7 @@
     }
 
     /**
-     * Returns the port of the Thrift runtime server running on the device.
+     * Returns the listening port of the Thrift RPC server running on the device.
      *
      * @return an integer value
      */
@@ -102,7 +104,6 @@
      */
     public DeviceId asDeviceId() {
         try {
-            // TODO: include internalDeviceId number in the deviceId URI
             return DeviceId.deviceId(new URI(SCHEME, this.thriftServerHost + ":" + this.thriftServerPort,
                                              String.valueOf(this.internalDeviceId)));
         } catch (URISyntaxException e) {
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2DeviceAgent.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2DeviceAgent.java
index 4dc3c1a..c128aeb 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2DeviceAgent.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2DeviceAgent.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import org.apache.commons.lang3.tuple.Pair;
 import org.onlab.util.ImmutableByteSequence;
 import org.onosproject.net.DeviceId;
@@ -26,6 +27,7 @@
 /**
  * An agent to control a BMv2 device.
  */
+@Beta
 public interface Bmv2DeviceAgent {
 
     /**
@@ -43,20 +45,20 @@
     boolean ping();
 
     /**
-     * Adds a new table entry.
+     * Adds a new table entry. If successful returns a table-specific identifier of the installed entry.
      *
-     * @param entry a table entry value
-     * @return table-specific entry ID
+     * @param entry a table entry
+     * @return a long value
      * @throws Bmv2RuntimeException if any error occurs
      */
     long addTableEntry(Bmv2TableEntry entry) throws Bmv2RuntimeException;
 
     /**
-     * Modifies an existing table entry by updating its action.
+     * Modifies an existing entry at by updating its action.
      *
-     * @param tableName string value of table name
-     * @param entryId   long value of entry ID
-     * @param action    an action value
+     * @param tableName a string value
+     * @param entryId   a long value
+     * @param action    an action
      * @throws Bmv2RuntimeException if any error occurs
      */
     void modifyTableEntry(String tableName, long entryId, Bmv2Action action) throws Bmv2RuntimeException;
@@ -64,16 +66,16 @@
     /**
      * Deletes currently installed entry.
      *
-     * @param tableName string value of table name
-     * @param entryId   long value of entry ID
+     * @param tableName a string value
+     * @param entryId   a long value
      * @throws Bmv2RuntimeException if any error occurs
      */
     void deleteTableEntry(String tableName, long entryId) throws Bmv2RuntimeException;
 
     /**
-     * Sets table default action.
+     * Sets a default action for the given table.
      *
-     * @param tableName string value of table name
+     * @param tableName a string value
      * @param action    an action value
      * @throws Bmv2RuntimeException if any error occurs
      */
@@ -97,7 +99,7 @@
     List<Bmv2ParsedTableEntry> getTableEntries(String tableName) throws Bmv2RuntimeException;
 
     /**
-     * Requests the device to transmit a given byte sequence over the given port.
+     * Requests the device to transmit a given packet over the given port.
      *
      * @param portNumber a port number
      * @param packet a byte sequence
@@ -106,7 +108,7 @@
     void transmitPacket(int portNumber, ImmutableByteSequence packet) throws Bmv2RuntimeException;
 
     /**
-     * Resets the state of the switch (e.g. delete all entries, etc.).
+     * Resets the state of the switch.
      *
      * @throws Bmv2RuntimeException if any error occurs
      */
@@ -121,7 +123,7 @@
     String dumpJsonConfig() throws Bmv2RuntimeException;
 
     /**
-     * Returns the md5 sum of the JSON-formatted model configuration currently used to process packets.
+     * Returns the MD5 sum of the JSON-formatted configuration currently used to process packets.
      *
      * @return a string value
      * @throws Bmv2RuntimeException if any error occurs
@@ -139,7 +141,7 @@
     Pair<Long, Long> readTableEntryCounter(String tableName, long entryId) throws Bmv2RuntimeException;
 
     /**
-     * Returns the counter values for a given counter and index.
+     * Returns the values of a given counter instance.
      *
      * @param counterName a counter name
      * @param index       an integer value
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExactMatchParam.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExactMatchParam.java
index d02dd2d..5b55d28 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExactMatchParam.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExactMatchParam.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import org.onlab.util.ImmutableByteSequence;
@@ -23,8 +24,9 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * Representation of a BMv2 exact match parameter.
+ * A BMv2 exact match parameter.
  */
+@Beta
 public final class Bmv2ExactMatchParam implements Bmv2MatchParam {
 
     private final ImmutableByteSequence value;
@@ -45,7 +47,7 @@
     }
 
     /**
-     * Return the byte sequence value matched by this parameter.
+     * Return the byte sequence matched by this parameter.
      *
      * @return an immutable byte buffer value
      */
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java
index 10bc9dc..cd8ec77 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionSelector.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import org.onlab.util.KryoNamespace;
@@ -31,6 +32,7 @@
 /**
  * Extension selector for BMv2 used as a wrapper for multiple BMv2 match parameters.
  */
+@Beta
 public final class Bmv2ExtensionSelector extends AbstractExtension implements ExtensionSelector {
 
     private final KryoNamespace appKryo = new KryoNamespace.Builder()
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionTreatment.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionTreatment.java
index b4c9790..b2f65f3 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionTreatment.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ExtensionTreatment.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import org.onlab.util.KryoNamespace;
@@ -28,16 +29,27 @@
 /**
  * Extension treatment for BMv2 used as a wrapper for a {@link Bmv2Action}.
  */
+@Beta
 public final class Bmv2ExtensionTreatment extends AbstractExtension implements ExtensionTreatment {
 
     private final KryoNamespace appKryo = new KryoNamespace.Builder().build();
     private Bmv2Action action;
 
+    /**
+     * Creates a new extension treatment for the given BMv2 action.
+     *
+     * @param action an action
+     */
     public Bmv2ExtensionTreatment(Bmv2Action action) {
         this.action = action;
     }
 
-    public Bmv2Action getAction() {
+    /**
+     * Returns the action contained by this extension selector.
+     *
+     * @return an action
+     */
+    public Bmv2Action action() {
         return action;
     }
 
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java
index a7b5b46..31bab78 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2FlowRuleWrapper.java
@@ -16,15 +16,17 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.Objects;
 import org.onosproject.net.flow.FlowRule;
 
 import java.util.Date;
 
 /**
- * A wrapper class for a ONOS flow rule installed on a BMv2 device.
+ * A wrapper for a ONOS flow rule installed on a BMv2 device.
  */
-public class Bmv2FlowRuleWrapper {
+@Beta
+public final class Bmv2FlowRuleWrapper {
 
     private final FlowRule rule;
     private final long entryId;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2LpmMatchParam.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2LpmMatchParam.java
index ee75d3b..5f280b3 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2LpmMatchParam.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2LpmMatchParam.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import org.onlab.util.ImmutableByteSequence;
@@ -24,8 +25,9 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * Representation of a BMv2 longest prefix match (LPM) parameter.
+ * A BMv2 longest prefix match (LPM) parameter.
  */
+@Beta
 public final class Bmv2LpmMatchParam implements Bmv2MatchParam {
 
     private final ImmutableByteSequence value;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchKey.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchKey.java
index c0c6b7c..34276aa 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchKey.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchKey.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.Lists;
 import org.onlab.util.ImmutableByteSequence;
@@ -30,6 +31,7 @@
 /**
  * A match key of a BMv2 match-action table entry.
  */
+@Beta
 public final class Bmv2MatchKey {
 
     private final List<Bmv2MatchParam> matchParams;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchParam.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchParam.java
index 3b7142f..15c750f 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchParam.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2MatchParam.java
@@ -16,9 +16,12 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
+
 /**
  * Representation of a BMv2 match parameter.
  */
+@Beta
 public interface Bmv2MatchParam {
 
     /**
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ParsedTableEntry.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ParsedTableEntry.java
index 9a32a70..bf59cf4 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ParsedTableEntry.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ParsedTableEntry.java
@@ -16,12 +16,14 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 
 /**
  * Representation of a table entry installed on a BMv2 device.
  */
+@Beta
 public final class Bmv2ParsedTableEntry {
     private final long entryId;
     private final Bmv2MatchKey matchKey;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2PortInfo.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2PortInfo.java
index f53a436..568d141 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2PortInfo.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2PortInfo.java
@@ -16,12 +16,14 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 
 /**
  * Information of a port of a BMv2 device.
  */
+@Beta
 public final class Bmv2PortInfo {
 
     private final String ifaceName;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2RuntimeException.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2RuntimeException.java
index 697c8d2..176e6f0 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2RuntimeException.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2RuntimeException.java
@@ -16,9 +16,12 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
+
 /**
  * General exception of the BMv2 runtime APIs.
  */
+@Beta
 public final class Bmv2RuntimeException extends Exception {
 
     private final Code code;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntry.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntry.java
index ce6bd83..6ea97e9 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntry.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntry.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
+
 import java.util.Objects;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -24,6 +26,7 @@
 /**
  * An entry of a match-action table in a BMv2 device.
  */
+@Beta
 public final class Bmv2TableEntry {
 
     private static final int NO_PRIORITY_VALUE = -1;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntryReference.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntryReference.java
index fd59fb9..6283239 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntryReference.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TableEntryReference.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import org.onosproject.net.DeviceId;
@@ -23,6 +24,7 @@
 /**
  * A reference to a table entry installed on a BMv2 device.
  */
+@Beta
 public final class Bmv2TableEntryReference {
 
 
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TernaryMatchParam.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TernaryMatchParam.java
index 60b38f0..713d532 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TernaryMatchParam.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2TernaryMatchParam.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.runtime;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import org.onlab.util.ImmutableByteSequence;
@@ -26,6 +27,7 @@
 /**
  * Representation of a BMv2 ternary match parameter.
  */
+@Beta
 public final class Bmv2TernaryMatchParam implements Bmv2MatchParam {
 
     private final ImmutableByteSequence value;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ValidMatchParam.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ValidMatchParam.java
index 38b8c2a..9312b56 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ValidMatchParam.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/runtime/Bmv2ValidMatchParam.java
@@ -17,6 +17,7 @@
 package org.onosproject.bmv2.api.runtime;
 
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 
 import java.util.Objects;
@@ -24,6 +25,7 @@
 /**
  * Representation of a BMv2 valid match parameter.
  */
+@Beta
 public final class Bmv2ValidMatchParam implements Bmv2MatchParam {
 
     private final boolean flag;
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2Controller.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2Controller.java
index 62b1f55..22ba016 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2Controller.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2Controller.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.service;
 
+import com.google.common.annotations.Beta;
 import org.onosproject.bmv2.api.runtime.Bmv2DeviceAgent;
 import org.onosproject.bmv2.api.runtime.Bmv2RuntimeException;
 import org.onosproject.net.DeviceId;
@@ -23,6 +24,7 @@
 /**
  * A controller of BMv2 devices.
  */
+@Beta
 public interface Bmv2Controller {
 
     /**
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceContextService.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceContextService.java
index 7afce3d..077a294 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceContextService.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceContextService.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.service;
 
+import com.google.common.annotations.Beta;
 import org.onosproject.bmv2.api.context.Bmv2DeviceContext;
 import org.onosproject.bmv2.api.context.Bmv2Interpreter;
 import org.onosproject.net.DeviceId;
@@ -23,6 +24,7 @@
 /**
  * A service for managing BMv2 device contexts.
  */
+@Beta
 public interface Bmv2DeviceContextService {
 
     /**
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceListener.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceListener.java
index dbd6d65..cb8c444 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceListener.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2DeviceListener.java
@@ -16,11 +16,13 @@
 
 package org.onosproject.bmv2.api.service;
 
+import com.google.common.annotations.Beta;
 import org.onosproject.bmv2.api.runtime.Bmv2Device;
 
 /**
  * A listener of BMv2 device events.
  */
+@Beta
 public interface Bmv2DeviceListener {
 
     /**
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2PacketListener.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2PacketListener.java
index a713dd8..32629eb 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2PacketListener.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2PacketListener.java
@@ -16,12 +16,14 @@
 
 package org.onosproject.bmv2.api.service;
 
+import com.google.common.annotations.Beta;
 import org.onlab.util.ImmutableByteSequence;
 import org.onosproject.bmv2.api.runtime.Bmv2Device;
 
 /**
  * A listener of BMv2 packet events.
  */
+@Beta
 public interface Bmv2PacketListener {
 
     /**
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2TableEntryService.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2TableEntryService.java
index 5806f10..cd25ee5 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2TableEntryService.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/service/Bmv2TableEntryService.java
@@ -17,6 +17,7 @@
 package org.onosproject.bmv2.api.service;
 
 
+import com.google.common.annotations.Beta;
 import org.onosproject.bmv2.api.context.Bmv2FlowRuleTranslator;
 import org.onosproject.bmv2.api.runtime.Bmv2FlowRuleWrapper;
 import org.onosproject.bmv2.api.runtime.Bmv2TableEntryReference;
@@ -24,6 +25,7 @@
 /**
  * A service for managing BMv2 table entries.
  */
+@Beta
 public interface Bmv2TableEntryService {
 
     /**
diff --git a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/utils/Bmv2TranslatorUtils.java b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/utils/Bmv2TranslatorUtils.java
index 8d8966f..0cc102b 100644
--- a/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/utils/Bmv2TranslatorUtils.java
+++ b/protocols/bmv2/api/src/main/java/org/onosproject/bmv2/api/utils/Bmv2TranslatorUtils.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.bmv2.api.utils;
 
+import com.google.common.annotations.Beta;
 import org.onlab.util.HexString;
 import org.onlab.util.ImmutableByteSequence;
 
@@ -25,8 +26,9 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * Collection of util methods to deal with flow rule translation.
+ * Collection of utility methods to deal with flow rule translation.
  */
+@Beta
 public final class Bmv2TranslatorUtils {
 
     private Bmv2TranslatorUtils() {