Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
labs
BIRD Internet Routing Daemon
Commits
768d5e10
Commit
768d5e10
authored
Sep 20, 2016
by
Pavel Tvrdik
Committed by
Ondřej Zajíček
Sep 21, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add !~ operator to filter grammar
parent
75ac3d19
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
32 additions
and
20 deletions
+32
-20
conf/cf-lex.l
conf/cf-lex.l
+1
-0
conf/confbase.Y
conf/confbase.Y
+1
-1
doc/bird.sgml
doc/bird.sgml
+19
-19
filter/config.Y
filter/config.Y
+1
-0
filter/filter.c
filter/filter.c
+10
-0
No files found.
conf/cf-lex.l
View file @
768d5e10
...
...
@@ -246,6 +246,7 @@ else: {
<CCOMM>.
\!\= return NEQ;
\!\~ return NMA;
\<\= return LEQ;
\>\= return GEQ;
\&\& return AND;
...
...
conf/confbase.Y
View file @
768d5e10
...
...
@@ -82,7 +82,7 @@ CF_DECLS
%nonassoc PREFIX_DUMMY
%left AND OR
%nonassoc '=' '<' '>' '~' GEQ LEQ NEQ PO PC
%nonassoc '=' '<' '>' '~' GEQ LEQ NEQ
NMA
PO PC
%left '+' '-'
%left '*' '/' '%'
%left '!'
...
...
doc/bird.sgml
View file @
768d5e10
...
...
@@ -1016,9 +1016,9 @@ foot).
of type <cf/string/, print such variables, use standard string
comparison operations (e.g. <cf/=, !=, <, >, <=, >=/), but
you can't concatenate two strings. String literals are written as
<cf/"This is a string constant"/. Additionally matching <cf/˜
/
operator could be used to match a string value against
a shell pattern
(represented also as a string).
<cf/"This is a string constant"/. Additionally matching
(
<cf/˜
,
!˜/)
operator
s
could be used to match a string value against
a shell pattern
(represented also as a string).
<tag/ip/
This type can hold a single IP address. Depending on the compile-time
...
...
@@ -1202,9 +1202,9 @@ foot).
<tag/eclist/
Eclist is a data type used for BGP extended community lists. Eclists
are very similar to clists, but they are sets of ECs instead of pairs.
The same operations (like <cf/add/, <cf/delete/
,
or <cf/˜/
membership operator) can be used to modify or test
eclists, with ECs
instead of pairs as arguments.
The same operations (like <cf/add/, <cf/delete/ or <cf/˜/
and
<cf/!˜/
membership operator
s
) can be used to modify or test
eclists, with ECs
instead of pairs as arguments.
</descrip>
...
...
@@ -1213,19 +1213,19 @@ foot).
<p>The filter language supports common integer operators <cf>(+,-,*,/)</cf>,
parentheses <cf/(a*(b+c))/, comparison <cf/(a=b, a!=b, a<b, a>=b)/.
Logical operations include unary not (<cf/!/), and (<cf/&&/) and or
(<cf/||/). Special operators include <cf/˜/
for "is element
of a set" operation - it can be used on
element and set of elements of the same
type (returning true if element is contained in the given set), or on two
strings (returning true if first string
matches a shell-like pattern stored in
second string) or on IP and prefix (returning true if IP is within the range
defined by that prefix), or on prefix and prefix (returning true if first
prefix
is more specific than second one) or on bgppath and bgpmask (returning true if
the path matches the mask) or on number
and bgp
path
(returning true if the
number
is in the path) or on bgppath and int (number) set (return
in
g
t
rue if any
ASN from the path is in the set) or on pair/quad and clist (returning true if
the
pair/quad
is element of the clist) or on clist and pair/quad set (returning
true if there
is an
element of the clist that is also a member of the pair/quad
set).
(<cf/||/). Special operators include
(
<cf/˜/
,
<cf/!˜/) for "is (not) element
of a set" operation - it can be used on
element and set of elements of the same type (returning true if element is
contained in the given set), or on two
strings (returning true if first string
matches a shell-like pattern stored in second string) or on IP and prefix
(returning true if IP is within the range defined by that prefix), or on
prefix
and prefix (returning true if first prefix is more specific than second one) or
on bgppath
and bgp
mask
(returning true if the
path matches the mask) or on
number
and bgppath (returning true if the number is
in t
he path) or on bgppath
and int (number) set (returning true if any ASN from the path is in the set) or
on
pair/quad
and clist (returning true if the pair/quad is element of the
clist) or on cl
is
t
an
d pair/quad set (returning true if there is an element of
the clist that is also a member of the pair/quad
set).
<p>There is one operator related to ROA infrastructure - <cf/roa_check()/. It
examines a ROA table and does RFC 6483 route origin validation for a given
...
...
filter/config.Y
View file @
768d5e10
...
...
@@ -735,6 +735,7 @@ term:
| term '>' term { $$ = f_new_inst(); $$->code = '<'; $$->a1.p = $3; $$->a2.p = $1; }
| term GEQ term { $$ = f_new_inst(); $$->code = P('<','='); $$->a1.p = $3; $$->a2.p = $1; }
| term '~' term { $$ = f_new_inst(); $$->code = '~'; $$->a1.p = $1; $$->a2.p = $3; }
| term NMA term { $$ = f_new_inst(); $$->code = P('!','~'); $$->a1.p = $1; $$->a2.p = $3; }
| '!' term { $$ = f_new_inst(); $$->code = '!'; $$->a1.p = $2; }
| DEFINED '(' term ')' { $$ = f_new_inst(); $$->code = P('d','e'); $$->a1.p = $3; }
...
...
filter/filter.c
View file @
768d5e10
...
...
@@ -716,6 +716,16 @@ interpret(struct f_inst *what)
runtime
(
"~ applied on unknown type pair"
);
res
.
val
.
i
=
!!
res
.
val
.
i
;
break
;
case
P
(
'!'
,
'~'
):
TWOARGS
;
res
.
type
=
T_BOOL
;
res
.
val
.
i
=
val_in_range
(
v1
,
v2
);
if
(
res
.
val
.
i
==
CMP_ERROR
)
runtime
(
"!~ applied on unknown type pair"
);
res
.
val
.
i
=
!
res
.
val
.
i
;
break
;
case
P
(
'd'
,
'e'
):
ONEARG
;
res
.
type
=
T_BOOL
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment