summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIdo Barnea <ibarnea@cisco.com>2017-03-22 11:33:38 +0200
committerIdo Barnea <ibarnea@cisco.com>2017-03-22 11:33:38 +0200
commit9218827e7337abe0296b9bb27ea3ca0865f8ef0e (patch)
treeb1a2f8a29a5f27c6b95c1f4383f6b48f883f4929
parentce79813cbdf7ccb9db7f3db9aab7a9c71005ecf0 (diff)
Error in case of vlan out of range in config file
Signed-off-by: Ido Barnea <ibarnea@cisco.com>
-rwxr-xr-xsrc/platform_cfg.cpp4
-rwxr-xr-xsrc/utl_yaml.cpp17
-rwxr-xr-xsrc/utl_yaml.h16
3 files changed, 27 insertions, 10 deletions
diff --git a/src/platform_cfg.cpp b/src/platform_cfg.cpp
index 8a2a9486..3acc993c 100755
--- a/src/platform_cfg.cpp
+++ b/src/platform_cfg.cpp
@@ -255,10 +255,8 @@ void operator >> (const YAML::Node& node, CMacYamlInfo & mac_info) {
if (! utl_yaml_read_ip_addr(node, "mask", mac_info.m_mask)) {
mac_info.m_mask = 0;
}
- if (! utl_yaml_read_uint16(node, "vlan", mac_info.m_vlan)) {
+ if (! utl_yaml_read_uint16(node, "vlan", mac_info.m_vlan, 0, 0xfff)) {
mac_info.m_vlan = 0;
- } else {
- mac_info.m_vlan &= 0x0fff; // we only care about the vlan ID
}
}
diff --git a/src/utl_yaml.cpp b/src/utl_yaml.cpp
index df605964..0073e6f4 100755
--- a/src/utl_yaml.cpp
+++ b/src/utl_yaml.cpp
@@ -43,7 +43,7 @@ bool utl_yaml_read_ip_addr(const YAML::Node& node,
res=true;
}else{
printf(" Error: non valid ip %s \n",(char *)tmp.c_str());
- exit(-1);
+ exit(1);
}
}
return (res);
@@ -62,6 +62,21 @@ bool utl_yaml_read_uint32(const YAML::Node& node,
bool utl_yaml_read_uint16(const YAML::Node& node,
const std::string &name,
+ uint16_t & val, uint16_t min, uint16_t max) {
+ bool res = utl_yaml_read_uint16(node, name, val);
+
+ if ((val < min) || (val > max)) {
+ fprintf(stderr
+ , "Parsing error: value of field '%s' must be between %d and %d\n"
+ , name.c_str(), min, max);
+ exit(1);
+ }
+
+ return res;
+}
+
+bool utl_yaml_read_uint16(const YAML::Node& node,
+ const std::string &name,
uint16_t & val){
uint32_t val_tmp;
bool res=false;
diff --git a/src/utl_yaml.h b/src/utl_yaml.h
index 004e82db..88fc847e 100755
--- a/src/utl_yaml.h
+++ b/src/utl_yaml.h
@@ -6,7 +6,7 @@
*/
/*
-Copyright (c) 2015-2015 Cisco Systems, Inc.
+Copyright (c) 2015-2017 Cisco Systems, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -28,18 +28,22 @@ limitations under the License.
/* static methods - please prefer the wrapper over those */
-bool utl_yaml_read_ip_addr(const YAML::Node& node,
+bool utl_yaml_read_ip_addr(const YAML::Node& node,
const std::string &name,
uint32_t & val);
-bool utl_yaml_read_uint32(const YAML::Node& node,
+bool utl_yaml_read_uint32(const YAML::Node& node,
const std::string &name,
uint32_t & val);
-bool utl_yaml_read_uint16(const YAML::Node& node,
+bool utl_yaml_read_uint16(const YAML::Node& node,
const std::string &name,
uint16_t & val);
+bool utl_yaml_read_uint16(const YAML::Node& node,
+ const std::string &name,
+ uint16_t & val, uint16_t min, uint16_t max);
+
bool mac2vect(const std::string &mac_str, std::vector<uint8_t> &mac);
/* a thin wrapper to customize errors */
@@ -51,7 +55,7 @@ public:
/**
* loads the file (while parsing it)
- *
+ *
*/
void load(YAML::Node &root);
@@ -76,7 +80,7 @@ public:
void parse_err(const std::string &err, const YAML::Node &node) const;
void parse_err(const std::string &err) const;
-
+
private:
std::string m_filename;
};