summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--transporthandler.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/transporthandler.cpp b/transporthandler.cpp
index d7eef14..e112668 100644
--- a/transporthandler.cpp
+++ b/transporthandler.cpp
@@ -1497,17 +1497,30 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter,
}
case LanParam::VLANId:
{
- uint16_t vlanData;
- if (req.unpack(vlanData) != 0 || !req.fullyUnpacked())
+ uint12_t vlanData = 0;
+ uint3_t reserved = 0;
+ bool vlanEnable = 0;
+
+ if (req.unpack(vlanData) || req.unpack(reserved) ||
+ req.unpack(vlanEnable) || !req.fullyUnpacked())
{
return responseReqDataLenInvalid();
}
- if ((vlanData & VLAN_ENABLE_FLAG) == 0)
+
+ if (reserved)
+ {
+ return responseInvalidFieldRequest();
+ }
+
+ uint16_t vlan = static_cast<uint16_t>(vlanData);
+
+ if (!vlanEnable)
{
- lastDisabledVlan[channel] = vlanData & VLAN_VALUE_MASK;
- vlanData = 0;
+ lastDisabledVlan[channel] = vlan;
+ vlan = 0;
}
- channelCall<reconfigureVLAN>(channel, vlanData & VLAN_VALUE_MASK);
+ channelCall<reconfigureVLAN>(channel, vlan);
+
return responseSuccess();
}
case LanParam::CiphersuiteSupport:
OpenPOWER on IntegriCloud