diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java
index a3b02a8..5273b87 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java
@@ -104,6 +104,15 @@
     Optional<Boolean> disableInBand();
 
     /**
+     * Returns multicast snooping is enabled or not. If set to true, enable multicast
+     * snooping on the bridge.
+     * If it is not set, the multicast snooping is disabled.
+     *
+     * @return true if the multicast snooping is enabled, false otherwise
+     */
+    Optional<Boolean> mcastSnoopingEnable();
+
+    /**
      * Returns list of Control Protocol Versions supported on device.
      * @return List of Control Protocol Versions enabled on bridge
      */
@@ -178,6 +187,13 @@
         Builder disableInBand();
 
         /**
+         * Returns bridge description builder with mcast snooping enabled.
+         *
+         * @return bridge description builder
+         */
+        Builder mcastSnoopingEnable();
+
+        /**
          * Builds an immutable bridge description.
          *
          * @return bridge description
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java
index cc0b837..609c71b 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java
@@ -41,6 +41,7 @@
     private final Optional<String> datapathType;
     private final Optional<List<ControlProtocolVersion>> controlProtocols;
     private final Optional<Boolean> disableInBand;
+    private final Optional<Boolean> mcastSnoopingEnable;
 
     /* Adds more configurations */
 
@@ -51,6 +52,7 @@
                                      Optional<String> datapathId,
                                      Optional<String> datapathType,
                                      Optional<Boolean> disableInBand,
+                                     Optional<Boolean> mcastSnoopingEnable,
                                      Optional<List<ControlProtocolVersion>> controlProtocols) {
         this.name = checkNotNull(name);
         this.controllers = controllers;
@@ -59,6 +61,7 @@
         this.datapathId = datapathId;
         this.datapathType = datapathType;
         this.disableInBand = disableInBand;
+        this.mcastSnoopingEnable = mcastSnoopingEnable;
         this.controlProtocols = controlProtocols;
     }
 
@@ -116,6 +119,11 @@
         return disableInBand;
     }
 
+    @Override
+    public Optional<Boolean> mcastSnoopingEnable() {
+        return mcastSnoopingEnable;
+    }
+
     /**
      * Creates and returns a new builder instance.
      *
@@ -135,6 +143,7 @@
         private Optional<String> datapathType = Optional.empty();
         private Optional<List<ControlProtocolVersion>> controlProtocols = Optional.empty();
         private Optional<Boolean> disableInBand = Optional.empty();
+        private Optional<Boolean> mcastSnoopingEnable = Optional.empty();
 
         private Builder() {
         }
@@ -147,6 +156,7 @@
                                                 datapathId,
                                                 datapathType,
                                                 disableInBand,
+                                                mcastSnoopingEnable,
                                                 controlProtocols);
         }
 
@@ -200,5 +210,11 @@
             this.disableInBand = Optional.of(Boolean.TRUE);
             return this;
         }
+
+        @Override
+        public BridgeDescription.Builder mcastSnoopingEnable() {
+            this.mcastSnoopingEnable = Optional.of(Boolean.TRUE);
+            return this;
+        }
     }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/behaviour/DefaultBridgeDescriptionTest.java b/core/api/src/test/java/org/onosproject/net/behaviour/DefaultBridgeDescriptionTest.java
index 9cd59c2..86b0a6a 100644
--- a/core/api/src/test/java/org/onosproject/net/behaviour/DefaultBridgeDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/net/behaviour/DefaultBridgeDescriptionTest.java
@@ -24,7 +24,9 @@
 import java.util.List;
 
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Unit tests for DefaultBridgeDescription.
@@ -58,6 +60,7 @@
         build.datapathType(type);
         build.failMode(mode);
         build.disableInBand();
+        build.mcastSnoopingEnable();
         build.enableLocalController();
         BridgeDescription test;
         test = build.build();
@@ -68,6 +71,7 @@
         assertThat(test.datapathType().get(), is(type));
         assertThat(test.failMode().get(), is(mode));
         assertThat(test.disableInBand().get(), is(true));
+        assertThat(test.mcastSnoopingEnable().get(), is(true));
         assertNull(test.annotations());
         assertTrue(test.enableLocalController());
         assertThat(test.deviceId().get(), is(DeviceId.deviceId("of:" + id)));
