From: Igor Maravic <[email protected]> Add operators *, /, <<, >>, &, |, ^, *=, /=, <<=, >>=, &=, |= and ^=.
Operators *=, /=, <<=, >>=, &=, |= and ^= are added to policy metric semantics. Signed-off-by: Igor Maravic <[email protected]> --- xorp/etc/templates/bgp.tp | 4 +- xorp/etc/templates/ospfv2.tp | 2 +- xorp/etc/templates/ospfv3.tp | 2 +- xorp/etc/templates/policy.tp | 2 +- xorp/etc/templates/rip.tp | 2 +- xorp/etc/templates/ripng.tp | 2 +- xorp/policy/backend/backend.ll | 6 +++ xorp/policy/backend/backend.yy | 8 ++++ xorp/policy/common/operator.cc | 6 +++ xorp/policy/common/operator.hh | 7 +++ xorp/policy/common/operator_base.hh | 6 +++ xorp/policy/common/register_operations.cc | 12 +++++ xorp/policy/policy.ll | 20 ++++++++ xorp/policy/policy.yy | 18 +++++++- xorp/rtrmgr/boot.ll | 4 +- xorp/rtrmgr/config_operators.cc | 72 ++++++++++++++++++++++++++--- xorp/rtrmgr/config_operators.hh | 50 +++++++++++++------- 17 files changed, 190 insertions(+), 33 deletions(-) diff --git a/xorp/etc/templates/bgp.tp b/xorp/etc/templates/bgp.tp index 094fa73..6e1ce8a 100644 --- a/xorp/etc/templates/bgp.tp +++ b/xorp/etc/templates/bgp.tp @@ -834,7 +834,7 @@ policy { } med { %help: short "Set the BGP MED attribute"; - %allow-operator: ":" "=" "sub" "add"; + %allow-operator: ":" "=" "sub" "add" "mul" "div" "lshift" "rshift" "bit_and" "bit_or" "bit_xor" "+=" "-=" "*=" "/=" "<<=" ">>=" "&=" "|=" "^="; %set: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt=med $(<>) $(@);"; %delete: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt="; } @@ -845,7 +845,7 @@ policy { } localpref { %help: short "Set the local preference"; - %allow-operator: ":" "=" "sub" "add"; + %allow-operator: ":" "=" "sub" "add" "mul" "div" "lshift" "rshift" "bit_and" "bit_or" "bit_xor" "+=" "-=" "*=" "/=" "<<=" ">>=" "&=" "|=" "^="; %set: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt=localpref $(<>) $(@);"; %delete: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt="; } diff --git a/xorp/etc/templates/ospfv2.tp b/xorp/etc/templates/ospfv2.tp index 4d22ec4..44dbbb9 100644 --- a/xorp/etc/templates/ospfv2.tp +++ b/xorp/etc/templates/ospfv2.tp @@ -555,7 +555,7 @@ policy { then { metric { %help: short "Set the metric value"; - %allow-operator: ":" "=" "sub" "add"; + %allow-operator: ":" "=" "sub" "add" "mul" "div" "lshift" "rshift" "bit_and" "bit_or" "bit_xor" "+=" "-=" "*=" "/=" "<<=" ">>=" "&=" "|=" "^="; %set: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt=metric $(<>) $(@);"; %delete: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt="; } diff --git a/xorp/etc/templates/ospfv3.tp b/xorp/etc/templates/ospfv3.tp index f6ffc13..fec27fb 100644 --- a/xorp/etc/templates/ospfv3.tp +++ b/xorp/etc/templates/ospfv3.tp @@ -430,7 +430,7 @@ policy { then { metric { %help: short "Set the metric value"; - %allow-operator: ":" "=" "sub" "add"; + %allow-operator: ":" "=" "sub" "add" "mul" "div" "lshift" "rshift" "bit_and" "bit_or" "bit_xor" "+=" "-=" "*=" "/=" "<<=" ">>=" "&=" "|=" "^="; %set: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt=metric $(<>) $(@);"; %delete: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt="; } diff --git a/xorp/etc/templates/policy.tp b/xorp/etc/templates/policy.tp index b48bcaa..3f1b6b8 100644 --- a/xorp/etc/templates/policy.tp +++ b/xorp/etc/templates/policy.tp @@ -276,7 +276,7 @@ policy { tag { %help: short "Tag value"; - %allow-operator: ":" "=" "add" "sub"; + %allow-operator: ":" "=" "sub" "add" "mul" "div" "lshift" "rshift" "bit_and" "bit_or" "bit_xor" "+=" "-=" "*=" "/=" "<<=" ">>=" "&=" "|=" "^="; %set: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt=tag $(<>) $(@);"; %delete: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt="; } diff --git a/xorp/etc/templates/rip.tp b/xorp/etc/templates/rip.tp index 03e5ff7..aff2763 100644 --- a/xorp/etc/templates/rip.tp +++ b/xorp/etc/templates/rip.tp @@ -339,7 +339,7 @@ policy { then { metric { %help: short "Set the metric value"; - %allow-operator: ":" "=" "sub" "add"; + %allow-operator: ":" "=" "sub" "add" "mul" "div" "lshift" "rshift" "bit_and" "bit_or" "bit_xor" "+=" "-=" "*=" "/=" "<<=" ">>=" "&=" "|=" "^="; %set: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt=metric $(<>) $(@);"; %delete: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt="; } diff --git a/xorp/etc/templates/ripng.tp b/xorp/etc/templates/ripng.tp index e130a70..a0b3d3c 100644 --- a/xorp/etc/templates/ripng.tp +++ b/xorp/etc/templates/ripng.tp @@ -287,7 +287,7 @@ policy { then { metric { %help: short "Set the metric value"; - %allow-operator: ":" "=" "sub" "add"; + %allow-operator: ":" "=" "sub" "add" "mul" "div" "lshift" "rshift" "bit_and" "bit_or" "bit_xor" "+=" "-=" "*=" "/=" "<<=" ">>=" "&=" "|=" "^="; %set: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt=metric $(<>) $(@);"; %delete: xrl "$(policy.targetname)/policy/0.1/update_term_block?policy:txt=$(policy-statement.@)&term:txt=$(term.@)&block:u32=2&order:txt=$(#)&statement:txt="; } diff --git a/xorp/policy/backend/backend.ll b/xorp/policy/backend/backend.ll index a874ec2..e369ff7 100644 --- a/xorp/policy/backend/backend.ll +++ b/xorp/policy/backend/backend.ll @@ -71,6 +71,8 @@ namespace { "SUBR_START" { return YY_SUBR_START; } "SUBR_END" { return YY_SUBR_END; } +"<<" { return YY_LSHIFT; } +">>" { return YY_RSHIFT; } "==" { return YY_EQ; } "!=" { return YY_NE; } "<" { return YY_LT; } @@ -80,6 +82,10 @@ namespace { "+" { return YY_ADD; } "\-" { return YY_SUB; } "*" { return YY_MUL; } +"/" { return YY_DIV; } +"&" { return YY_BITAND; } +"|" { return YY_BITOR; } +"^" { return YY_BITXOR; } "\n" { _parser_lineno++; return YY_NEWLINE; } diff --git a/xorp/policy/backend/backend.yy b/xorp/policy/backend/backend.yy index 844e81e..e18fb6b 100644 --- a/xorp/policy/backend/backend.yy +++ b/xorp/policy/backend/backend.yy @@ -35,6 +35,8 @@ static ElementFactory _ef; %token YY_EQ YY_NE YY_LT YY_GT YY_LE YY_GE %token YY_NOT YY_AND YY_OR YY_XOR YY_HEAD YY_CTR YY_NE_INT %token YY_ADD YY_SUB YY_MUL +%token YY_DIV YY_LSHIFT YY_RSHIFT +%token YY_BITAND YY_BITOR YY_BITXOR %token YY_ONFALSE_EXIT %token YY_REGEX %token YY_LOAD YY_STORE @@ -169,6 +171,12 @@ statement: | YY_ADD { _yy_instructions->push_back(new NaryInstr(new OpAdd)); } | YY_SUB { _yy_instructions->push_back(new NaryInstr(new OpSub)); } | YY_MUL { _yy_instructions->push_back(new NaryInstr(new OpMul)); } + | YY_DIV { _yy_instructions->push_back(new NaryInstr(new OpDiv)); } + | YY_LSHIFT { _yy_instructions->push_back(new NaryInstr(new OpLShift)); } + | YY_RSHIFT { _yy_instructions->push_back(new NaryInstr(new OpRShift)); } + | YY_BITAND { _yy_instructions->push_back(new NaryInstr(new OpBitAnd)); } + | YY_BITOR { _yy_instructions->push_back(new NaryInstr(new OpBitOr)); } + | YY_BITXOR { _yy_instructions->push_back(new NaryInstr(new OpBitXor)); } | YY_HEAD { _yy_instructions->push_back(new NaryInstr(new OpHead));} | YY_CTR { _yy_instructions->push_back(new NaryInstr(new OpCtr));} | YY_NE_INT { _yy_instructions->push_back(new NaryInstr(new OpNEInt));} diff --git a/xorp/policy/common/operator.cc b/xorp/policy/common/operator.cc index 43b76c4..452bc1c 100644 --- a/xorp/policy/common/operator.cc +++ b/xorp/policy/common/operator.cc @@ -40,6 +40,12 @@ Oper::Hash OpGe::_hash = HASH_OP_GE; Oper::Hash OpAdd::_hash = HASH_OP_ADD; Oper::Hash OpSub::_hash = HASH_OP_SUB; Oper::Hash OpMul::_hash = HASH_OP_MUL; +Oper::Hash OpDiv::_hash = HASH_OP_DIV; +Oper::Hash OpLShift::_hash = HASH_OP_LSHIFT; +Oper::Hash OpRShift::_hash = HASH_OP_RSHIFT; +Oper::Hash OpBitAnd::_hash = HASH_OP_BITAND; +Oper::Hash OpBitOr::_hash = HASH_OP_BITOR; +Oper::Hash OpBitXor::_hash = HASH_OP_BITXOR; Oper::Hash OpRegex::_hash = HASH_OP_REGEX; Oper::Hash OpCtr::_hash = HASH_OP_CTR; diff --git a/xorp/policy/common/operator.hh b/xorp/policy/common/operator.hh index c7008b7..5bdbea5 100644 --- a/xorp/policy/common/operator.hh +++ b/xorp/policy/common/operator.hh @@ -59,6 +59,13 @@ DEFINE_BINOPER(OpGe,>=) DEFINE_BINOPER(OpAdd,+) DEFINE_BINOPER(OpSub,-) DEFINE_BINOPER(OpMul,*) +DEFINE_BINOPER(OpDiv,/) +DEFINE_BINOPER(OpLShift,<<) +DEFINE_BINOPER(OpRShift,>>) +DEFINE_BINOPER(OpBitAnd,&) +DEFINE_BINOPER(OpBitOr,|) +DEFINE_BINOPER(OpBitXor,^) + // Regular expression operator DEFINE_BINOPER(OpRegex,REGEX) diff --git a/xorp/policy/common/operator_base.hh b/xorp/policy/common/operator_base.hh index 86ba32c..63e02fb 100644 --- a/xorp/policy/common/operator_base.hh +++ b/xorp/policy/common/operator_base.hh @@ -42,6 +42,12 @@ enum { HASH_OP_ADD, HASH_OP_SUB, HASH_OP_MUL, + HASH_OP_DIV, + HASH_OP_LSHIFT, + HASH_OP_RSHIFT, + HASH_OP_BITAND, + HASH_OP_BITOR, + HASH_OP_BITXOR, HASH_OP_REGEX, HASH_OP_CTR, HASH_OP_NEINT, diff --git a/xorp/policy/common/register_operations.cc b/xorp/policy/common/register_operations.cc index 78e882d..effd12b 100644 --- a/xorp/policy/common/register_operations.cc +++ b/xorp/policy/common/register_operations.cc @@ -109,6 +109,12 @@ DEFINE_BINOP_BOOL(op_ge, >=) DEFINE_BINOP(op_add,+) DEFINE_BINOP(op_sub,-) DEFINE_BINOP(op_mul,*) +DEFINE_BINOP(op_div,/) +DEFINE_BINOP(op_lshift,<<) +DEFINE_BINOP(op_rshift,>>) +DEFINE_BINOP(op_bit_and,&); +DEFINE_BINOP(op_bit_or,|); +DEFINE_BINOP(op_bit_xor,^); // Operations for which .val() is not needed. [operation performed on element // itself]. @@ -457,6 +463,12 @@ do { \ ADD_BINOP(arg,arg,arg,op_add,Add); \ ADD_BINOP(arg,arg,arg,op_sub,Sub); \ ADD_BINOP(arg,arg,arg,op_mul,Mul); \ + ADD_BINOP(arg,arg,arg,op_div,Div); \ + ADD_BINOP(arg,arg,arg,op_lshift,LShift); \ + ADD_BINOP(arg,arg,arg,op_rshift,RShift); \ + ADD_BINOP(arg,arg,arg,op_bit_and,BitAnd); \ + ADD_BINOP(arg,arg,arg,op_bit_or,BitOr); \ + ADD_BINOP(arg,arg,arg,op_bit_xor,BitXor); \ } while (0) disp.add<ElemBool,&operations::op_not>(OpNot()); diff --git a/xorp/policy/policy.ll b/xorp/policy/policy.ll index 3f29934..05e61f0 100644 --- a/xorp/policy/policy.ll +++ b/xorp/policy/policy.ll @@ -139,6 +139,8 @@ RE_IPV6NET {RE_IPV6}\/{RE_IPV6_PREFIXLEN} return YY_EQ; } +"<<" return YY_LSHIFT; +">>" return YY_RSHIFT; "(" return YY_LPAR; ")" return YY_RPAR; "==" return YY_EQ; @@ -153,9 +155,20 @@ RE_IPV6NET {RE_IPV6}\/{RE_IPV6_PREFIXLEN} "=" return YY_ASSIGN; "+=" return YY_PLUS_EQUALS; "-=" return YY_MINUS_EQUALS; +"*=" return YY_MUL_EQUALS; +"/=" return YY_DIV_EQUALS; +"<<=" return YY_LSHIFT_EQUALS; +">>=" return YY_RSHIFT_EQUALS; +"&=" return YY_BITAND_EQUALS; +"|=" return YY_BITOR_EQUALS; +"^=" return YY_BITXOR_EQUALS; "||" return YY_OR; "&&" return YY_AND; "!" return YY_NOT; +"/" return YY_DIV; +"&" return YY_BITAND; +"|" return YY_BITOR; +"^" return YY_BITXOR; "exact" return YY_IPNET_EQ; "longer" return YY_IPNET_LT; @@ -168,6 +181,13 @@ RE_IPV6NET {RE_IPV6}\/{RE_IPV6_PREFIXLEN} "not" return YY_NOT; "add" return YY_PLUS_EQUALS; "sub" return YY_MINUS_EQUALS; +"mul" return YY_MUL_EQUALS; +"div" return YY_DIV_EQUALS; +"lshift" return YY_LSHIFT_EQUALS; +"rshift" return YY_RSHIFT_EQUALS; +"bit_and" return YY_BITAND_EQUALS; +"bit_or" return YY_BITOR_EQUALS; +"bit_xor" return YY_BITXOR_EQUALS; "head" return YY_HEAD; "ctr" return YY_CTR; "ne_int" return YY_NE_INT; diff --git a/xorp/policy/policy.yy b/xorp/policy/policy.yy index 1d055e3..8c73246 100644 --- a/xorp/policy/policy.yy +++ b/xorp/policy/policy.yy @@ -36,12 +36,15 @@ static ElementFactory _ef; %token <c_str> YY_IPV4 YY_IPV4RANGE YY_IPV4NET YY_IPV6 YY_IPV6RANGE YY_IPV6NET %token YY_SEMICOLON YY_LPAR YY_RPAR YY_ASSIGN YY_SET YY_REGEX %token YY_ACCEPT YY_REJECT YY_PROTOCOL YY_NEXT YY_POLICY YY_PLUS_EQUALS +%token YY_MUL_EQUALS YY_DIV_EQUALS YY_LSHIFT_EQUALS YY_RSHIFT_EQUALS +%token YY_BITAND_EQUALS YY_BITOR_EQUALS YY_BITXOR_EQUALS %token YY_MINUS_EQUALS YY_TERM %left YY_NOT YY_AND YY_XOR YY_OR YY_HEAD YY_CTR YY_NE_INT %left YY_EQ YY_NE YY_LE YY_GT YY_LT YY_GE %left YY_IPNET_EQ YY_IPNET_LE YY_IPNET_GT YY_IPNET_LT YY_IPNET_GE -%left YY_ADD YY_SUB +%left YY_ADD YY_SUB YY_DIV YY_LSHIFT YY_RSHIFT +%left YY_BITAND YY_BITOR YY_BITXOR %left YY_MUL %type <node> actionstatement action boolstatement boolexpr expr assignexpr @@ -77,6 +80,13 @@ assignop: YY_ASSIGN { $$ = NULL; } | YY_PLUS_EQUALS { $$ = new OpAdd; } | YY_MINUS_EQUALS { $$ = new OpSub; } + | YY_MUL_EQUALS { $$ = new OpMul; } + | YY_DIV_EQUALS { $$ = new OpDiv; } + | YY_LSHIFT_EQUALS { $$ = new OpLShift; } + | YY_RSHIFT_EQUALS { $$ = new OpRShift; } + | YY_BITAND_EQUALS { $$ = new OpBitAnd; } + | YY_BITOR_EQUALS { $$ = new OpBitOr; } + | YY_BITXOR_EQUALS { $$ = new OpBitXor; } ; boolstatement: @@ -117,6 +127,12 @@ expr: expr YY_ADD expr { $$ = new NodeBin(new OpAdd,$1,$3,_parser_lineno); } | expr YY_SUB expr { $$ = new NodeBin(new OpSub,$1,$3,_parser_lineno); } | expr YY_MUL expr { $$ = new NodeBin(new OpMul,$1,$3,_parser_lineno); } + | expr YY_DIV expr { $$ = new NodeBin(new OpDiv,$1,$3,_parser_lineno); } + | expr YY_LSHIFT expr { $$ = new NodeBin(new OpLShift,$1,$3,_parser_lineno); } + | expr YY_RSHIFT expr { $$ = new NodeBin(new OpRShift,$1,$3,_parser_lineno); } + | expr YY_BITAND expr { $$ = new NodeBin(new OpBitAnd,$1,$3,_parser_lineno); } + | expr YY_BITOR expr { $$ = new NodeBin(new OpBitOr,$1,$3,_parser_lineno); } + | expr YY_BITXOR expr { $$ = new NodeBin(new OpBitXor,$1,$3,_parser_lineno); } | YY_HEAD expr { $$ = new NodeUn(new OpHead, $2, _parser_lineno); } | YY_CTR expr expr { $$ = new NodeBin(new OpCtr, $2, $3, _parser_lineno); } diff --git a/xorp/rtrmgr/boot.ll b/xorp/rtrmgr/boot.ll index 6e682ae..a9a3398 100644 --- a/xorp/rtrmgr/boot.ll +++ b/xorp/rtrmgr/boot.ll @@ -243,8 +243,8 @@ RE_URL_SUBDELIMS "!"|"$"|"&"|"'"|"("|")"|"*"|"+"|","|";"|"=" */ RE_COMPARATOR "<"|">"|("<"+"=")|(">"+"=")|("="+"=")|("!"+"=") RE_IPNET_COMPARATOR "exact"|"not"|"shorter"|"orshorter"|"longer"|"orlonger" -RE_BIN_OPERATOR "+"|"-"|"*"|"/" -RE_MODIFIER ":"|"add"|"sub"|"set"|"del"|"=" +RE_BIN_OPERATOR "+"|"-"|"*"|"/"|"<<"|">>"|"&"|"^"|"|" +RE_MODIFIER ":"|"add"|"sub"|"mul"|"div"|"lshift"|"rshift"|"bit_and"|"bit_or"|"bit_xor"|"set"|"del"|"="|"+="|"-="|"*="|"/="|"<<="|">>="|"&="|"|="|"^=" RE_INFIX_OPERATOR {RE_COMPARATOR}|{RE_IPNET_COMPARATOR}|{RE_BIN_OPERATOR}|{RE_MODIFIER} RE_ARITH_OPERATOR [" "]*({RE_BIN_OPERATOR})[" "]* diff --git a/xorp/rtrmgr/config_operators.cc b/xorp/rtrmgr/config_operators.cc index bd383d8..2df51bb 100644 --- a/xorp/rtrmgr/config_operators.cc +++ b/xorp/rtrmgr/config_operators.cc @@ -61,9 +61,41 @@ operator_to_str(ConfigOperator op) case OP_ASSIGN: return string(":"); case OP_ADD: - return string("add"); + return string("+"); + case OP_ADD_EQ: + return string("+="); case OP_SUB: - return string("sub"); + return string("-"); + case OP_SUB_EQ: + return string("-="); + case OP_MUL: + return string("*"); + case OP_MUL_EQ: + return string("*="); + case OP_DIV: + return string("/"); + case OP_DIV_EQ: + return string("/="); + case OP_LSHIFT: + return string("<<"); + case OP_LSHIFT_EQ: + return string("<<="); + case OP_RSHIFT: + return string(">>"); + case OP_RSHIFT_EQ: + return string(">>="); + case OP_BITAND: + return string("&"); + case OP_BITAND_EQ: + return string("&="); + case OP_BITOR: + return string("|"); + case OP_BITOR_EQ: + return string("|="); + case OP_BITXOR: + return string("^"); + case OP_BITXOR_EQ: + return string("^="); case OP_DEL: return string("del"); } @@ -103,12 +135,40 @@ lookup_operator(const string& s) throw (ParseError) return OP_ASSIGN; } else if (s == "+") { return OP_ADD; - } else if (s == "add") { - return OP_ADD; + } else if (s == "add" || s == "+=") { + return OP_ADD_EQ; } else if (s == "-") { return OP_SUB; - } else if (s == "sub") { - return OP_SUB; + } else if (s == "sub" || s == "-=") { + return OP_SUB_EQ; + } else if (s == "*") { + return OP_MUL; + } else if (s == "mul" || s == "*=") { + return OP_MUL_EQ; + } else if (s == "/") { + return OP_DIV; + } else if (s == "div" || s == "/=") { + return OP_DIV_EQ; + } else if (s == "<<") { + return OP_LSHIFT; + } else if (s == "lshift" || s == "<<=") { + return OP_LSHIFT_EQ; + } else if (s == ">>") { + return OP_RSHIFT; + } else if (s == "rshift" || s == ">>=") { + return OP_RSHIFT_EQ; + } else if (s == "&") { + return OP_BITAND; + } else if (s == "bit_and" || s == "&=") { + return OP_BITAND_EQ; + } else if (s == "|") { + return OP_BITOR; + } else if (s == "bit_or" || s == "|=") { + return OP_BITOR_EQ; + } else if (s == "^") { + return OP_BITXOR; + } else if (s == "bit_xor" || s == "^=") { + return OP_BITXOR_EQ; } else if (s == "del") { return OP_DEL; } diff --git a/xorp/rtrmgr/config_operators.hh b/xorp/rtrmgr/config_operators.hh index 72d8e70..9a9fdd8 100644 --- a/xorp/rtrmgr/config_operators.hh +++ b/xorp/rtrmgr/config_operators.hh @@ -31,24 +31,40 @@ // XXX: Comparators must be less than modifiers. // enum ConfigOperator { - OP_NONE = 0, - OP_EQ = 1, - OP_NE = 2, - OP_LT = 3, - OP_LTE = 4, - OP_GT = 5, - OP_GTE = 6, - OP_IPNET_EQ = 7, - OP_IPNET_NE = 8, - OP_IPNET_LT = 9, - OP_IPNET_GT = 10, - OP_IPNET_LE = 11, - OP_IPNET_GE = 12, + OP_NONE = 0, + OP_EQ, + OP_NE, + OP_LT, + OP_LTE, + OP_GT, + OP_GTE, + OP_IPNET_EQ, + OP_IPNET_NE, + OP_IPNET_LT, + OP_IPNET_GT, + OP_IPNET_LE, + OP_IPNET_GE, MAX_COMPARATOR = OP_IPNET_GE, - OP_ASSIGN = 101, - OP_ADD = 102, - OP_SUB = 103, - OP_DEL = 104, + OP_ASSIGN = 101, + OP_ADD, + OP_ADD_EQ, + OP_SUB, + OP_SUB_EQ, + OP_MUL, + OP_MUL_EQ, + OP_DIV, + OP_DIV_EQ, + OP_LSHIFT, + OP_LSHIFT_EQ, + OP_RSHIFT, + OP_RSHIFT_EQ, + OP_BITAND, + OP_BITAND_EQ, + OP_BITOR, + OP_BITOR_EQ, + OP_BITXOR, + OP_BITXOR_EQ, + OP_DEL, MAX_MODIFIER = OP_DEL }; -- 1.7.9.5 _______________________________________________ Xorp-hackers mailing list [email protected] http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers
