From 684c6f5a0e134426159be7dbd514271aea9f4d3d Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Mon, 17 Apr 2000 11:06:39 +0000 Subject: Path_getlen moved to nest and length was made callable from filters. --- filter/filter.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'filter/filter.c') diff --git a/filter/filter.c b/filter/filter.c index 768ff93..6763f0c 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -404,13 +404,22 @@ interpret(struct f_inst *what) } break; + case 'L': /* Get length of */ + ONEARG; + res.type = T_INT; + switch(v1.type) { + case T_PREFIX: res.val.i = v1.val.px.len; break; + case T_PATH: res.val.i = as_path_getlen(v1.val.ad); break; + default: bug( "Length of what?" ); + } + break; case P('c','p'): /* Convert prefix to ... */ ONEARG; if (v1.type != T_PREFIX) runtime( "Can not convert non-prefix this way" ); res.type = what->aux; switch(res.type) { - case T_INT: res.val.i = v1.val.px.len; break; + /* case T_INT: res.val.i = v1.val.px.len; break; Not needed any more */ case T_IP: res.val.px.ip = v1.val.px.ip; break; default: bug( "Unknown prefix to conversion" ); } @@ -536,7 +545,7 @@ i_same(struct f_inst *f1, struct f_inst *f2) if (val_compare(* (struct f_val *) f1->a1.p, * (struct f_val *) f2->a2.p)) return 0; break; - case 'p': ONEARG; break; + case 'p': case 'L': ONEARG; break; case '?': TWOARGS; break; case '0': case 'E': break; case P('p',','): ONEARG; A2_SAME; break; @@ -612,21 +621,6 @@ filter_same(struct filter *new, struct filter *old) * Or maybe both versions are usefull? */ -int -path_getlen(u8 *p, int len) -{ - int res = 0; - u8 *q = p+len; - while (pnext; if (!mask) return next == q; \ asterix = (mask->val == PM_ANY); \ if (asterix) { mask = mask->next; if (!mask) { return 1; } } \ -- cgit v1.2.3