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)));
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
index 6bddef3..b568eb0 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbBridge.java
@@ -53,6 +53,9 @@
     /* other optional configs */
     private final Map<String, String> otherConfigs;
 
+    /* multicast snooping flag */
+    private final Optional<Boolean> mcastSnoopingEnable;
+
     /**
      * Default constructor.
      *
@@ -62,18 +65,20 @@
      * @param datapathType ovs datapath_type
      * @param controlProtocols list of control protocols
      * @param otherConfigs other configs
+     * @param mcastSnoopingEnable multicast snooping enable
      */
     private OvsdbBridge(String name, Optional<FailMode> failMode,
                        List<ControllerInfo> controllers,
                        Optional<String> datapathType,
                        Optional<List<ControlProtocolVersion>> controlProtocols,
-                       Map<String, String> otherConfigs) {
+                       Map<String, String> otherConfigs, Optional<Boolean> mcastSnoopingEnable) {
         this.name = checkNotNull(name);
         this.failMode = failMode;
         this.controllers = controllers;
         this.datapathType = datapathType;
         this.controlProtocols = controlProtocols;
         this.otherConfigs = otherConfigs;
+        this.mcastSnoopingEnable = mcastSnoopingEnable;
     }
 
     /**
@@ -130,6 +135,15 @@
     }
 
     /**
+     * Returns multicast snooping flag value of the bridge.
+     *
+     * @return multicast snooping flag
+     */
+    public Optional<Boolean> mcastSnoopingEnable() {
+        return mcastSnoopingEnable;
+    }
+
+    /**
      * Gets the datapathId of bridge.
      *
      * @return datapath id; null if not used
@@ -164,6 +178,7 @@
                 .add("datapathType", datapathType)
                 .add("controlProtocols", controlProtocols)
                 .add("otherConfigs", otherConfigs)
+                .add("mcastSnoopingEnable", mcastSnoopingEnable)
                 .toString();
     }
 
@@ -196,6 +211,7 @@
         private Optional<String> datapathType = Optional.empty();
         private Map<String, String> otherConfigs = Maps.newHashMap();
         private Optional<List<ControlProtocolVersion>> controlProtocols = Optional.empty();
+        private Optional<Boolean> mcastSnoopingEnable = Optional.empty();
 
         private Builder() {
         }
@@ -219,6 +235,9 @@
             if (bridgeDesc.controlProtocols().isPresent()) {
                 this.controlProtocols = bridgeDesc.controlProtocols();
             }
+            if (bridgeDesc.mcastSnoopingEnable().isPresent()) {
+                this.mcastSnoopingEnable = bridgeDesc.mcastSnoopingEnable();
+            }
             this.name = bridgeDesc.name();
             this.failMode = bridgeDesc.failMode();
             this.controllers = Lists.newArrayList(bridgeDesc.controllers());
@@ -230,7 +249,8 @@
          * @return ovsdb bridge
          */
         public OvsdbBridge build() {
-            return new OvsdbBridge(name, failMode, controllers, datapathType, controlProtocols, otherConfigs);
+            return new OvsdbBridge(name, failMode, controllers, datapathType,
+                    controlProtocols, otherConfigs, mcastSnoopingEnable);
         }
 
         /**
@@ -329,5 +349,15 @@
             otherConfigs.put(DATAPATH_ID, Boolean.TRUE.toString());
             return this;
         }
+
+        /**
+         * Returns OVSDB bridge builder with a given mcast snooping enable flag.
+         *
+         * @return ovsdb bridge builder
+         */
+        public Builder mcastSnoopingEnable() {
+            this.mcastSnoopingEnable = Optional.of(Boolean.TRUE);
+            return this;
+        }
     }
 }
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
index 2d8ee68..3f0f6b4 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
@@ -497,6 +497,11 @@
                     .collect(Collectors.toCollection(HashSet::new)));
         }
 
+        if (ovsdbBridge.mcastSnoopingEnable().isPresent()) {
+            boolean mcastSnoopingFlag = ovsdbBridge.mcastSnoopingEnable().get();
+            bridge.setMcastSnoopingEnable(mcastSnoopingFlag);
+        }
+
         String bridgeUuid = getBridgeUuid(ovsdbBridge.name());
         if (bridgeUuid == null) {
             bridge.setName(ovsdbBridge.name());
diff --git a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
index f31cf38..ef24f44 100644
--- a/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
+++ b/protocols/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/Bridge.java
@@ -41,7 +41,7 @@
         CONTROLLER("controller"), PROTOCOLS("protocols"),
         FAILMODE("fail_mode"), STATUS("status"), OTHERCONFIG("other_config"),
         EXTERNALIDS("external_ids"), FLOODVLANS("flood_vlans"),
-        FLOWTABLES("flow_tables");
+        FLOWTABLES("flow_tables"), MCASTSNOOPINGENABLE("mcast_snooping_enable");
 
         private final String columnName;
 
@@ -557,4 +557,30 @@
         super.setDataHandler(columndesc, flowTables);
     }
 
+    /**
+     * Get the Column entity which column name is "mcast_snooping_enable" from the Row
+     * entity of attributes.
+     * @return the Column entity which column name is "mcast_snooping_enable"
+     */
+    public Column getMcastSnoopingEnableColumn() {
+        ColumnDescription columndesc = new ColumnDescription(
+                BridgeColumn.MCASTSNOOPINGENABLE
+                        .columnName(),
+                "getMcastSnoopingEnableColumn",
+                VersionNum.VERSION650);
+        return (Column) super.getColumnHandler(columndesc);
+    }
+
+    /**
+     * Add a column entity which column name is "mcast_snooping_enable" to the Row entity
+     * of attributes.
+     * @param flag the column data which column name is "mcast_snooping_enable"
+     */
+    public void setMcastSnoopingEnable(boolean flag) {
+        ColumnDescription columndesc = new ColumnDescription(
+                BridgeColumn.MCASTSNOOPINGENABLE
+                        .columnName(),
+                "setMcastSnoopingEnable", VersionNum.VERSION650);
+        super.setDataHandler(columndesc, flag);
+    }
 }
