diff options
author | Ido Barnea <ibarnea@cisco.com> | 2017-03-22 11:33:38 +0200 |
---|---|---|
committer | Ido Barnea <ibarnea@cisco.com> | 2017-03-22 11:33:38 +0200 |
commit | 9218827e7337abe0296b9bb27ea3ca0865f8ef0e (patch) | |
tree | b1a2f8a29a5f27c6b95c1f4383f6b48f883f4929 | |
parent | ce79813cbdf7ccb9db7f3db9aab7a9c71005ecf0 (diff) |
Error in case of vlan out of range in config file
Signed-off-by: Ido Barnea <ibarnea@cisco.com>
-rwxr-xr-x | src/platform_cfg.cpp | 4 | ||||
-rwxr-xr-x | src/utl_yaml.cpp | 17 | ||||
-rwxr-xr-x | src/utl_yaml.h | 16 |
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; }; |