[Xorp-hackers] [PATCH] xorp: rtrmgr: Fix searching for parents children

igorm at etf.rs igorm at etf.rs
Mon Apr 2 08:11:36 PDT 2012


From: Igor Maravic <igorm at etf.rs>

Fixed searching for parent's children, so now children, that aren't multi-value nodes,
of some parent could be accessed.
Syntax for accessing parent's children is:

parent.child1.child2.@

Please note that child1 can't be multi-value node!
---
 xorp/rtrmgr/template_tree_node.cc |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/xorp/rtrmgr/template_tree_node.cc b/xorp/rtrmgr/template_tree_node.cc
index c44afa9..bd99d2d 100644
--- a/xorp/rtrmgr/template_tree_node.cc
+++ b/xorp/rtrmgr/template_tree_node.cc
@@ -1024,6 +1024,29 @@ TemplateTreeNode::find_varname_node(const string& varname)
 	return find_child_varname_node(var_parts, type());
     }
 
+    if (var_parts.back() == "@" && var_parts.size() > 2) {
+	/**
+	 * If we entered here, we want to find children
+	 * of some of our parents
+	 */
+	TTNodeType _type = (_parent && _parent->segname() == "@") ? _parent->type() : NODE_VOID;
+	list<string> parent_node_parts;
+
+	parent_node_parts.push_back(var_parts.front());
+	parent_node_parts.push_back(var_parts.back());
+
+	var_parts.pop_front();
+	var_parts.pop_back();
+	var_parts.push_front("@");
+
+	TemplateTreeNode* parent = find_parent_varname_node(parent_node_parts, _type);
+
+	if (parent) {
+	    return parent->find_child_varname_node(var_parts, parent->type());
+	}
+	return NULL;
+    }
+
     if (var_parts.size() > 1) {
 	TTNodeType _type = (_parent && _parent->segname() == "@") ? _parent->type() : NODE_VOID;
 	// It's a parent node, or a child of a parent node
-- 
1.7.5.4



More information about the Xorp-hackers mailing list