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
}
}
res=true;
}else{
printf(" Error: non valid ip %s \n",(char *)tmp.c_str());
- exit(-1);
+ exit(1);
}
}
return (res);
return (res);
}
+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){
*/
/*
-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.
/* 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 */
/**
* loads the file (while parsing it)
- *
+ *
*/
void load(YAML::Node &root);
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;
};