Validate VLAN id on creation

As per IEEE 802.1Q, VLAN ID is a 12-bit unsigned value with 0 and 4095
being reserved. This patch adds check for the VLAN ID when creating
VLAN interface.

Tested:
Creating VLAN with invalid IDs like 0, 4095, 9999 on a valid interface
gives InvalidArgument error.

Change-Id: I27ccd3657b4e411c530762d6076902f22c7cbf5a
Signed-off-by: Jiaqing Zhao <jiaqing.zhao@intel.com>
diff --git a/src/network_manager.cpp b/src/network_manager.cpp
index b4a63bc..ff41144 100644
--- a/src/network_manager.cpp
+++ b/src/network_manager.cpp
@@ -38,6 +38,7 @@
 extern std::unique_ptr<Timer> reloadTimer;
 using namespace phosphor::logging;
 using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+using Argument = xyz::openbmc_project::Common::InvalidArgument;
 
 Manager::Manager(sdbusplus::bus::bus& bus, const char* objPath,
                  const std::string& path) :
@@ -196,6 +197,14 @@
         elog<ResourceNotFound>(ResourceErr::RESOURCE(interfaceName.c_str()));
     }
 
+    if (id == 0 || id >= 4095)
+    {
+        log<level::ERR>("VLAN ID is not valid", entry("VLANID=%u", id));
+        elog<InvalidArgument>(
+            Argument::ARGUMENT_NAME("VLANId"),
+            Argument::ARGUMENT_VALUE(std::to_string(id).c_str()));
+    }
+
     return interfaces[interfaceName]->createVLAN(id);
 }