Fix for Set Chassis Capability Command

- Current IPMI Set Chassis Capability command
  does not have support for excluding the
  Chassis Bridge Device Address which is optional.
- Added support to make Chassis Bridge Device
  Address as optional.
- Tested and verified
  Set and Get Chassis Capability commands.

Change-Id: I1035667a4faad5402beb2fad7d062bdfacbdb19f
Signed-off-by: Nikhila D <nikhilad@ami.com>
diff --git a/chassishandler.cpp b/chassishandler.cpp
index fc7e2d9..d4bc27d 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -720,7 +720,7 @@
 
     uint8_t smDeviceAddr,
 
-    uint8_t bridgeDeviceAddr)
+    std::optional<uint8_t> bridgeDeviceAddr)
 {
     // check input data
     if (reserved1 != 0)
@@ -756,11 +756,15 @@
         return ipmi::responseInvalidFieldRequest();
     }
 
-    if ((bridgeDeviceAddr & ~chassisCapAddrMask) != 0)
+    if (bridgeDeviceAddr.has_value())
     {
-        lg2::error("Unsupported request parameter(Bridge Addr) for REQ={REQ}",
-                   "REQ", lg2::hex, bridgeDeviceAddr);
-        return ipmi::responseInvalidFieldRequest();
+        if ((bridgeDeviceAddr.value() & ~chassisCapAddrMask) != 0)
+        {
+            lg2::error(
+                "Unsupported request parameter(Bridge Addr) for REQ={REQ}",
+                "REQ", lg2::hex, bridgeDeviceAddr.value());
+            return ipmi::responseInvalidFieldRequest();
+        }
     }
 
     try
@@ -793,9 +797,13 @@
                               chassisCapObject.first, chassisCapIntf,
                               chassisSMDevAddrProp, smDeviceAddr);
 
-        ipmi::setDbusProperty(bus, chassisCapObject.second,
-                              chassisCapObject.first, chassisCapIntf,
-                              chassisBridgeDevAddrProp, bridgeDeviceAddr);
+        if (bridgeDeviceAddr.has_value())
+        {
+            ipmi::setDbusProperty(bus, chassisCapObject.second,
+                                  chassisCapObject.first, chassisCapIntf,
+                                  chassisBridgeDevAddrProp,
+                                  bridgeDeviceAddr.value());
+        }
     }
     catch (const std::exception& e)
     {