diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2009-06-01 19:32:41 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2009-06-01 19:32:41 +0200 |
commit | 92a72a4cbdd010f69e8d054019770e55a47637e0 (patch) | |
tree | 75c45f29473f4ad20a3ff7031ad7720273c1e149 /nest/a-path.c | |
parent | f429d4348275030a9f488046c4021aa377ad1a79 (diff) |
Adds support for dynamic pair and bgp mask expressions.
Diffstat (limited to 'nest/a-path.c')
-rw-r--r-- | nest/a-path.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/nest/a-path.c b/nest/a-path.c index f5499877..dba214d2 100644 --- a/nest/a-path.c +++ b/nest/a-path.c @@ -401,6 +401,7 @@ as_path_match(struct adata *path, struct f_path_mask *mask) struct pm_pos pos[2048 + 1]; int plen = parse_path(path, pos); int l, h, i, nh, nl; + u32 val; /* l and h are bound of interval of positions where are marked states */ @@ -424,14 +425,20 @@ as_path_match(struct adata *path, struct f_path_mask *mask) h = plen; break; - case PM_QUESTION: case PM_ASN: + val = mask->val; + goto step; + case PM_ASN_EXPR: + val = f_eval_asn((struct f_inst *) mask->val); + goto step; + case PM_QUESTION: + step: nh = -1; for (i = h; i >= l; i--) if (pos[i].mark) { pos[i].mark = 0; - if ((mask->kind == PM_QUESTION) || pm_match(pos + i, mask->val)) + if ((mask->kind == PM_QUESTION) || pm_match(pos + i, val)) pm_mark(pos, i, plen, &nl, &nh); } |