diff options
-rw-r--r-- | doc/bird.sgml | 14 | ||||
-rw-r--r-- | filter/test.conf | 11 |
2 files changed, 19 insertions, 6 deletions
diff --git a/doc/bird.sgml b/doc/bird.sgml index 2f65f13..8b2e8ee 100644 --- a/doc/bird.sgml +++ b/doc/bird.sgml @@ -706,9 +706,21 @@ incompatible with each other (that is to prevent you from shooting in the foot). Filters recognize four types of sets. Sets are similar to strings: you can pass them around but you can't modify them. Literals of type <cf>int set</cf> look like <cf> [ 1, 2, 5..7 ]</cf>. As you can see, both simple values and ranges are permitted in - sets. For pair sets, expressions like <cf/(123,*)/ can be used to denote ranges (in + sets. + For pair sets, expressions like <cf/(123,*)/ can be used to denote ranges (in that case <cf/(123,0)..(123,65535)/). You can also use <cf/(123,5..100/ for range <cf/(123,5)..(123,100)/. + You can also use expressions for both, pair sets and int sets. However it must + be possible to evaluate these expressions before daemon boots. So you can use + only constants inside them. E.g. + <code> + define one=1; + int set odds; + pair set ps; + + odds = [ one, (2+1), (6-one), (2*2*2-1), 9, 11 ]; + ps = [ (1,(one+one)), (3,4)..(4,8), (5,*), (6,3..6) ]; + </code> Sets of prefixes are special: their literals does not allow ranges, but allows prefix patterns that are written as <cf><M>ipaddress</M>/<M>pxlen</M>{<M>low</M>,<M>high</M>}</cf>. diff --git a/filter/test.conf b/filter/test.conf index 18121c4..c25f11a 100644 --- a/filter/test.conf +++ b/filter/test.conf @@ -183,11 +183,12 @@ string s; print " must be true: ", defined(1), ",", defined(1.2.3.4), ",", 1 != 2, ",", 1 <= 2; print " data types: must be false: ", 1 ~ [ 2, 3, 4 ], ",", 5 ~ is, ",", 1.2.3.4 ~ [ 1.2.3.3, 1.2.3.5 ], ",", (1,2) > (2,2), ",", (1,1) > (1,1), ",", 1.0.0.0/9 ~ [ 1.0.0.0/8- ], ",", 1.2.0.0/17 ~ [ 1.0.0.0/8{ 15 , 16 } ], ",", true && false; - is1 = [2, 3, 5, 8, 11, 15, 17, 19]; + is1 = [one, (2+1), (6-one), 8, 11, 15, 17, 19]; is2 = [19, 17, 15, 11, 8, 5, 3, 2]; is3 = [5, 17, 2, 11, 8, 15, 3, 19]; - print " must be true: ", 2 ~ is1, " ", 2 ~ is2, " ", 2 ~ is3; + print " must be true: ", 1 ~ is1, " ", 3 ~ is1, " ", 5 ~ is1; + print " must be true: ", (one+2) ~ is1, " ", 2 ~ is2, " ", 2 ~ is3; print " must be false: ", 4 ~ is1, " ", 4 ~ is2, " ", 4 ~ is3; print " must be false: ", 10 ~ is1, " ", 10 ~ is2, " ", 10 ~ is3; print " must be true: ", 15 ~ is1, " ", 15 ~ is2, " ", 15 ~ is3; @@ -210,9 +211,9 @@ string s; ", true: ", RTS_STATIC ~ [RTS_STATIC, RTS_DEVICE], ", false: ", RTS_BGP ~ [RTS_STATIC, RTS_DEVICE]; - ps = [(1,2), (3,4)..(4,8), (5,*)]; - print "Testing pair set, true: ", pp ~ ps, " ", (3,5) ~ ps, " ", (4,1) ~ ps, " ", (5,4) ~ ps, " ", (5,65535) ~ ps; - print "Testing pair set, false: ", (3,3) ~ ps, " ", (4,9) ~ ps, " ", (4,65535) ~ ps, " ", (6,0) ~ ps ; + ps = [(1,(one+one)), (3,4)..(4,8), (5,*), (6,3..6)]; + print "Testing pair set, true: ", pp ~ ps, " ", (3,5) ~ ps, " ", (4,1) ~ ps, " ", (5,4) ~ ps, " ", (5,65535) ~ ps, " ", (6,4) ~ ps; + print "Testing pair set, false: ", (3,3) ~ ps, " ", (4,9) ~ ps, " ", (4,65535) ~ ps, " ", (6,2) ~ ps, " ", (6,(6+one)) ~ ps, " ", ((one+6),2) ~ ps ; qq = 1.2.3.4; print "Testinq quad: 1.2.3.4 = ", qq, |