From d8ee69a09a6325b5871e88fdc678db1f1f1cdfce Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Tue, 30 Aug 2016 12:20:07 +0200 Subject: [PATCH 1/2] Feature #4658: Better range definitions for VLAN_IDs --- include/BitMap.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/include/BitMap.h b/include/BitMap.h index 6c37a27270..c40f64bcea 100644 --- a/include/BitMap.h +++ b/include/BitMap.h @@ -46,7 +46,7 @@ public: if (!reserved.empty()) { - one_util::split_unique(reserved, ',', reserved_bit); + set_reserved_bit(reserved); } }; @@ -326,6 +326,68 @@ private: return rc; } + + /** + * The reserved bit string is separated by ',' for each element + * and by ':' for ranges. + * @param string with reserved bits + */ + + void set_reserved_bit(std::string& reserved) + { + ostringstream oss; + + std::vector strings; + std::vector range; + std::vector::const_iterator it; + + std::istringstream iss; + + unsigned int bit, bit_start, bit_end; + + strings = one_util::split(reserved, ',', true); + + for (it = strings.begin(); it != strings.end(); it++) + { + // Try to split it by ':' + range = one_util::split(*it, ':', true); + + iss.clear(); + iss.str(range[0]); + iss >> bit_start; + + if ( iss.fail() ) + { + continue; + } + + if (range.size() == 1) + { + bit_end = bit_start; + } + else if (range.size() == 2) + { + iss.clear(); + iss.str(range[1]); + iss >> bit_end; + + if ( iss.fail() ) + { + continue; + } + } + else + { + continue; + } + + for (bit = bit_start; bit <= bit_end; bit++) + { + reserved_bit.insert(bit); + } + } + + } }; #endif /*BITMAP_H_*/ From b542aea0cec31b021935ea3c82b10c3cf6c40048 Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Tue, 30 Aug 2016 12:33:21 +0200 Subject: [PATCH 2/2] Feature #4658: remove debugging info --- include/BitMap.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/BitMap.h b/include/BitMap.h index c40f64bcea..5d9a330bcc 100644 --- a/include/BitMap.h +++ b/include/BitMap.h @@ -335,8 +335,6 @@ private: void set_reserved_bit(std::string& reserved) { - ostringstream oss; - std::vector strings; std::vector range; std::vector::const_iterator it;