Annotation of embedaddon/bird/filter/test.conf, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  *     This is an example configuration file.
                      4:  *     FIXME: add all examples from docs here.
                      5:  */
                      6: 
                      7: # Yet another comment
                      8: 
                      9: router id 62.168.0.1;
                     10: 
                     11: define xyzzy = (120+10);
                     12: define '1a-a1' = (20+10);
                     13: define one = 1;
                     14: define ten = 10;
                     15: 
                     16: define p23 = (2, 3);
                     17: define ip1222 = 1.2.2.2;
                     18: 
                     19: function onef(int a)
                     20: {
                     21:        return 1;
                     22: }
                     23: 
                     24: 
                     25: function 'mkpair-a'(int a)
                     26: {
                     27:        return (1, a);
                     28: }
                     29: 
                     30: function mktrip(int a)
                     31: {
                     32:        return (a, 2*a, 3*a);
                     33: }
                     34: 
                     35: function mkpath(int a; int b)
                     36: {
                     37:        return [= a b 3 2 1 =];
                     38: }
                     39: 
                     40: function callme(int arg1; int arg2)
                     41: int local1;
                     42: int local2;
                     43: int i;
                     44: {
                     45:        printn "Function callme called arguments ", arg1, " and ", arg2, ": " ;
                     46:        i = arg2;
                     47: 
                     48:        case arg1 {
                     49:        11, 1, 111: printn "jedna, "; printn "jedna";
                     50:        (one+onef(2)): printn "dva, "; printn "jeste jednou dva";
                     51:        (2+one) .. 5: if arg2 < 3 then printn "tri az pet";
                     52:        else: printn "neco jineho";
                     53:        }
                     54:        print;
                     55: }
                     56: 
                     57: function fifteen()
                     58: {
                     59:        print "fifteen called";
                     60:        return 15;
                     61: }
                     62: 
                     63: roa table rl
                     64: {
                     65:        roa 10.110.0.0/16 max 16 as 1000;
                     66:        roa 10.120.0.0/16 max 24 as 1000;
                     67:        roa 10.130.0.0/16 max 24 as 2000;
                     68:        roa 10.130.128.0/18 max 24 as 3000;
                     69: }
                     70: 
                     71: function test_roa()
                     72: {
                     73:        # cannot be tested in __startup(), sorry
                     74:        print "Testing ROA";
                     75:        print "Should be true: ", roa_check(rl, 10.10.0.0/16, 1000) = ROA_UNKNOWN,
                     76:              " ", roa_check(rl, 10.0.0.0/8, 1000) = ROA_UNKNOWN,
                     77:              " ", roa_check(rl, 10.110.0.0/16, 1000) = ROA_VALID,
                     78:              " ", roa_check(rl, 10.110.0.0/16, 2000) = ROA_INVALID,
                     79:              " ", roa_check(rl, 10.110.32.0/20, 1000) = ROA_INVALID,
                     80:              " ", roa_check(rl, 10.120.32.0/20, 1000) = ROA_VALID;
                     81:        print "Should be true: ", roa_check(rl, 10.120.32.0/20, 2000) = ROA_INVALID,
                     82:              " ", roa_check(rl, 10.120.32.32/28, 1000) = ROA_INVALID,
                     83:              " ", roa_check(rl, 10.130.130.0/24, 1000) = ROA_INVALID,
                     84:              " ", roa_check(rl, 10.130.130.0/24, 2000) = ROA_VALID,
                     85:              " ", roa_check(rl, 10.130.30.0/24, 3000) = ROA_INVALID,
                     86:              " ", roa_check(rl, 10.130.130.0/24, 3000) = ROA_VALID;
                     87: }
                     88: 
                     89: function path_test()
                     90: bgpmask pm1;
                     91: bgpmask pm2;
                     92: bgppath p2;
                     93: clist l;
                     94: clist l2;
                     95: eclist el;
                     96: eclist el2;
                     97: lclist ll;
                     98: lclist ll2;
                     99: {
                    100:        print "Entering path test...";
                    101:        pm1 =  / 4 3 2 1 /;
                    102:        pm2 = [= 3..6 3 2 1..2 =];
                    103:        print "Testing path masks: ", pm1, " ", pm2;
                    104:        p2 = prepend( + empty +, 1 );
                    105:        p2 = prepend( p2, 2 );
                    106:        p2 = prepend( p2, 3 );
                    107:        p2 = prepend( p2, 4 );
                    108:        print "Testing path: (4 3 2 1) = ", p2;
                    109:        print "Should be true: ", p2 ~ pm1, " ", p2 ~ pm2, " ", 3 ~ p2, " ", p2 ~ [2, 10..20], " ", p2 ~ [4, 10..20];
                    110:        print "4 = ", p2.len;
                    111:        p2 = prepend( p2, 5 );
                    112:        print "Testing path: (5 4 3 2 1) = ", p2;
                    113:        print "Should be false: ", p2 ~ pm1, " ", p2 ~ pm2, " ", 10 ~ p2, " ", p2 ~ [8, ten..(2*ten)], " ", p2 ~ [= 1..4 4 3 2 1 =], " ",  p2 ~ [= 5 4 4..100 2 1 =];
                    114:        print "Should be true: ", p2 ~  / ? 4 3 2 1 /,  " ", p2, " ",  / ? 4 3 2 1 /;
                    115:        print "Should be true: ", p2 ~ [= * 4 3 * 1 =], " ", p2, " ", [= * 4 3 * 1 =];
                    116:        print "Should be true: ", p2 ~ [= 5..6 4..10 1..3 1..3 1..65536 =];
                    117:        print "Should be true: ", p2 ~ [= (3+2) (2*2) 3 2 1 =], " ", p2 ~ mkpath(5, 4);
                    118:        print "Should be true: ", p2.len = 5, " ", p2.first = 5, " ", p2.last = 1;
                    119:        print "Should be true: ", pm1 = [= 4 3 2 1 =], " ", pm1 != [= 4 3 1 2 =], " ",
                    120:                                pm2 = [= 3..6 3 2 1..2 =], " ", pm2 != [= 3..6 3 2 1..3 =], " ",
                    121:                                [= 1 2 (1+2) =] = [= 1 2 (1+2) =], " ", [= 1 2 (1+2) =] != [= 1 2 (2+1) =];
                    122:        print "5 = ", p2.len;
                    123:        print "Delete 3:   ", delete(p2, 3);
                    124:        print "Filter 1-3: ", filter(p2, [1..3]);
                    125: 
                    126:        pm1 = [= 1 2 * 3 4 5 =];
                    127:        p2 = prepend( + empty +, 5 );
                    128:        p2 = prepend( p2, 4 );
                    129:        p2 = prepend( p2, 3 );
                    130:        p2 = prepend( p2, 3 );
                    131:        p2 = prepend( p2, 2 );
                    132:        p2 = prepend( p2, 1 );
                    133:        print "Should be true: ", p2 ~ pm1, " ", p2, " ", pm1;
                    134:        print "Delete 3:   ", delete(p2, 3);
                    135:        print "Delete 4-5: ", delete(p2, [4..5]);
                    136: 
                    137:        l = - empty -;
                    138:        print "Should be false in this special case: ", l ~ [(*,*)];
                    139:        l = add( l, (one,2) );
                    140:        print "Should be always true: ", l ~ [(*,*)];
                    141:        l = add( l, (2,one+2) );
                    142:        print "Community list (1,2) (2,3) ", l;
                    143:        print "Should be true: ", (2,3) ~ l, " ", l ~ [(1,*)], " ", l ~ [p23]," ", l ~ [(2,2..3)], " ", l ~ [(1,1..2)], " ", l ~ [(1,1)..(1,2)];
                    144:        l = add( l, (2,5) );
                    145:        l = add( l, (5,one) );
                    146:        l = add( l, (6,one) );
                    147:        l = add( l, (one,one) );
                    148:        l = delete( l, [(5,1),(6,one),(one,1)] );
                    149:        l = delete( l, [(5,one),(6,one)] );
                    150:        l = filter( l, [(1,*)] );
                    151:        print "Community list (1,2) ", l;
                    152:        print "Should be false: ", (2,3) ~ l, " ", l ~ [(2,*)], " ", l ~ [(one,3..6)];
                    153:        print "Should be always true: ", l ~ [(*,*)];
                    154:        l = add( l, (3,one) );
                    155:        l = add( l, (one+one+one,one+one) );
                    156:        l = add( l, (3,3) );
                    157:        l = add( l, (3,4) );
                    158:        l = add( l, (3,5) );
                    159:        l2 = filter( l, [(3,*)] );
                    160:        l = delete( l, [(3,2..4)] );
                    161:        print "Community list (1,2) (3,1) (3,5) ", l, " len: ", l.len;
                    162:        l = add( l, (3,2) );
                    163:        l = add( l, (4,5) );
                    164:        print "Community list (1,2) (3,1) (3,5) (3,2) (4,5) ", l, " len: ", l.len;
                    165:        print "Should be true: ", l ~ [(*,2)], " ", l ~ [(*,5)], " ", l ~ [(*, one)];
                    166:        print "Should be false: ", l ~ [(*,3)], " ", l ~ [(*,(one+6))], " ", l ~ [(*, (one+one+one))];
                    167:        l = delete( l, [(*,(one+onef(3)))] );
                    168:        l = delete( l, [(*,(4+one))] );
                    169:        print "Community list (3,1) ", l;
                    170:        l = delete( l, [(*,(onef(5)))] );
                    171:        print "Community list empty ", l;
                    172:        l2 = add( l2, (3,6) );
                    173:        l = filter( l2, [(3,1..4)] );
                    174:        l2 = filter( l2, [(3,3..6)] );
                    175:        print "clist A (1..4): ", l;
                    176:        print "clist B (3..6): ", l2;
                    177:        print "clist A union B: ", add( l2, l );
                    178:        print "clist A isect B: ", filter( l, l2 );
                    179:        print "clist A \ B: ", delete( l, l2 );
                    180: 
                    181:        el = -- empty --;
                    182:        el = add(el, (rt, 10, 20));
                    183:        el = add(el, (ro, 10.20.30.40, 100));
                    184:        el = add(el, (ro, 11.21.31.41.mask(16), 200));
                    185:        print "EC list (rt, 10, 20) (ro, 10.20.30.40, 100) (ro, 11.21.0.0, 200):";
                    186:        print el;
                    187:        print "EC len: ", el.len;
                    188:        el = delete(el, (rt, 10, 20));
                    189:        el = delete(el, (rt, 10, 30));
                    190:        el = add(el, (unknown 2, ten, 1));
                    191:        el = add(el, (unknown 5, ten, 1));
                    192:        el = add(el, (rt, ten, one+one));
                    193:        el = add(el, (rt, 10, 3));
                    194:        el = add(el, (rt, 10, 4));
                    195:        el = add(el, (rt, 10, 5));
                    196:        el = add(el, (generic, 0x2000a, 3*ten));
                    197:        el = delete(el, [(rt, 10, 2..ten)]);
                    198:        print "EC list (ro, 10.20.30.40, 100) (ro, 11.21.0.0, 200) (rt, 10, 1) (unknown 0x5, 10, 1) (rt, 10, 30):";
                    199:        print el;
                    200:        el = filter(el, [(rt, 10, *)]);
                    201:        print "EC list (rt, 10, 1) (rt, 10, 30): ", el;
                    202:        print "Testing EC list, true: ", (rt, 10, 1) ~ el, " ", el ~ [(rt, 10, ten..40)];
                    203:        print "Testing EC list, false: ", (rt, 10, 20) ~ el, " ", (ro, 10.20.30.40, 100) ~ el, " ", el ~ [(rt, 10, 35..40)], " ", el ~ [(ro, 10, *)];
                    204:        el = add(el, (rt, 10, 40));
                    205:        el2 = filter(el, [(rt, 10, 20..40)] );
                    206:        el2 = add(el2, (rt, 10, 50));
                    207:        print "eclist A (1,30,40): ", el;
                    208:        print "eclist B (30,40,50): ", el2;
                    209:        print "eclist A union B: ", add( el2, el );
                    210:        print "eclist A isect B: ", filter( el, el2 );
                    211:        print "eclist A \ B: ", delete( el, el2 );
                    212: 
                    213:        ll = --- empty ---;
                    214:        ll = add(ll, (ten, 20, 30));
                    215:        ll = add(ll, (1000, 2000, 3000));
                    216:        ll = add(ll, mktrip(100000));
                    217:        print "LC list (10, 20, 30) (1000, 2000, 3000) (100000, 200000, 300000):";
                    218:        print ll;
                    219:        print "LC len: ", el.len;
                    220:        print "Should be true: ", mktrip(1000) ~ ll, " ", ll ~ [(5,10,15), (10,20,30)], " ", ll ~ [(10,15..25,*)], " ", ll ~ [(ten, *, *)];
                    221:        print "Should be false: ", mktrip(100) ~ ll, " ", ll ~ [(5,10,15), (10,21,30)], " ", ll ~ [(10,21..25,*)], " ", ll ~ [(11, *, *)];
                    222:        print "LC filtered: ", filter(ll, [(5..15, *, *), (100000, 500..500000, *)]);
                    223: 
                    224:        ll = --- empty ---;
                    225:        ll = add(ll, (10, 10, 10));
                    226:        ll = add(ll, (20, 20, 20));
                    227:        ll = add(ll, (30, 30, 30));
                    228: 
                    229:        ll2 = --- empty ---;
                    230:        ll2 = add(ll2, (20, 20, 20));
                    231:        ll2 = add(ll2, (30, 30, 30));
                    232:        ll2 = add(ll2, (40, 40, 40));
                    233: 
                    234:        print "lclist A (10,20,30): ", ll;
                    235:        print "lclist B (20,30,40): ", ll2;
                    236:        print "lclist A union B: ", add(ll, ll2);
                    237:        print "lclist A isect B: ", filter(ll, ll2);
                    238:        print "lclist A \ B: ", delete(ll, ll2);
                    239: 
                    240: #      test_roa();
                    241: }
                    242: 
                    243: function bla()
                    244: {
                    245:        print "fifteen called";
                    246:        return 15;
                    247: }
                    248: 
                    249: define four=4;
                    250: define onetwo=1.2.3.4;
                    251: 
                    252: function __test1()
                    253: {
                    254:         if source ~ [ RTS_BGP, RTS_STATIC ] then {                     
                    255: #                       ospf_metric1 = 65535;                                                                     
                    256: #                       ospf_metric2 = 1000;                                            
                    257:                         ospf_tag = 0x12345678;                              
                    258:                         accept;                                             
                    259:         }                                                                                                                                                                                                                reject;                                                                                                                                                                                          
                    260: }
                    261: 
                    262: function __test2()
                    263: {
                    264:         if source ~ [ RTS_BGP, RTS_STATIC ] then {                     
                    265: #                       ospf_metric1 = 65535;                                                                     
                    266: #                       ospf_metric2 = 1000;                                            
                    267:                         ospf_tag = 0x12345678;                              
                    268:                         accept;                                             
                    269:                 }                                                                                                                                                                                                                reject;                                                                                                                                                                                          
                    270: }
                    271: 
                    272: function test_pxset(prefix set pxs)
                    273: {
                    274:        print pxs;
                    275:        print "  must be true:  ",      10.0.0.0/8  ~ pxs, ",", 10.0.0.0/10  ~ pxs, ",", 10.0.0.0/12 ~ pxs, ",",
                    276:                                        20.0.0.0/24 ~ pxs, ",", 20.0.40.0/24 ~ pxs, ",", 20.0.0.0/26 ~ pxs, ",",
                    277:                                        20.0.100.0/26 ~ pxs, ",", 20.0.0.0/28 ~ pxs, ",", 20.0.255.0/28 ~ pxs;
                    278:        print "  must be false: ",      10.0.0.0/7 ~ pxs,  ",", 10.0.0.0/13 ~ pxs, ",", 10.0.0.0/16 ~ pxs, ",",
                    279:                                        20.0.0.0/16 ~ pxs, ",", 20.0.0.0/23 ~ pxs, ",", 20.0.0.0/29 ~ pxs, ",",
                    280:                                        11.0.0.0/10 ~ pxs, ",", 20.1.0.0/26 ~ pxs;
                    281: }
                    282: 
                    283: function test_undef(int a)
                    284: int b;
                    285: {
                    286:        if a = 3
                    287:        then b = 4;
                    288:        print "Defined: ", a, " ", b, " ", defined(b);
                    289: }
                    290: 
                    291: define is1 = [ one, (2+1), (6-one), 8, 11, 15, 17, 19];
                    292: define is2 = [(17+2), 17, 15, 11, 8, 5, 3, 2];
                    293: define is3 = [5, 17, 2, 11, 8, 15, 3, 19];
                    294: 
                    295: define pxs2 = [ 10.0.0.0/16{8,12}, 20.0.0.0/16{24,28} ];
                    296: 
                    297: define ecs2 = [(rt, ten, (one+onef(0))*10), (ro, 100000, 100..200), (rt, 12345, *)];
                    298: 
                    299: 
                    300: function __startup() 
                    301: int i;
                    302: bool b;
                    303: prefix px;
                    304: ip p;
                    305: pair pp;
                    306: quad qq;
                    307: ec cc;
                    308: int set is;
                    309: pair set ps;
                    310: ec set ecs;
                    311: ip set ips;
                    312: prefix set pxs;
                    313: string st;
                    314: {
                    315:        print "1a-a1 = 30: ", '1a-a1'; 
                    316:        print "Testing filter language:";
                    317:        i = four; 
                    318:        i = 12*100 + 60/2 + i; 
                    319:        i = ( i + 0 );
                    320:        print "  arithmetics: 1234 = ", i;
                    321:        printn "  if statements ";
                    322:        print "what happens here?";
                    323:        printn ".";
                    324:        if (i = 4) then { print "*** FAIL: if 0"; quitbird; } else printn ".";
                    325: #      if !(i = 3) then { print "*** FAIL: if 0"; quitbird; } else printn ".";
                    326:        if 1234 = i then printn "."; else { print "*** FAIL: if 1 else"; }
                    327: #      if 1 <= 1 then printn "."; else { print "*** FAIL: test 3"; }
                    328:        if 1234 < 1234 then { print "*** FAIL: test 4"; quitbird; } else print "ok";
                    329:        is = [ 2, 3, 4, 7..11 ];
                    330: 
                    331:        print "must be true:  ", 1 = 1, " ", 1 != (0,1), " ", 1 != "a", " ", +empty+ = +empty+, " ", -empty- = -empty-, " ", --empty-- = --empty-- ,
                    332:                        " ", [1,4..10,20] = [1,4..10,20] , " ", [ 10.0.0.0/8{ 15 , 17 } ] = [ 10.0.0.0/8{ 15 , 17 } ];
                    333:        print "must be false: ", 1 != 1, " ", 1 = (0,1), " ", 1 = "a", " ", +empty+ = -empty-, " ", -empty- = --empty--, " ", --empty-- = +empty+ ,
                    334:                        " ", [1,2] = [1,3], " ", [ 10.0.0.0/8{ 15 , 17 } ] = [ 11.0.0.0/8{ 15 , 17 } ];
                    335: 
                    336:        print "  must be true: ", 1.2.0.0/16 ~ [ 1.0.0.0/8{ 15 , 17 } ];
                    337:        print "  data types; must be true: ", 1.2.3.4 = 1.2.3.4, ",", 1 ~ [1,2,3], ",", 5 ~ [1..20], ",", 10 ~ is, ",", 2 ~ [ 1, 2, 3 ], ",", 5 ~ [ 4 .. 7 ], ",", 1.2.3.4 ~ [ 1.2.3.3..1.2.3.5 ], ",", 1.2.3.4 ~ 1.0.0.0/8, ",", 1.0.0.0/8 ~ 1.0.0.0/8, ",", 1.0.0.0/8 ~ [ 1.0.0.0/8+ ];
                    338:        print "  must be true: ", true && true, ",", true || false, ",", ! false && ! false && true, ",", 1 < 2 && 1 != 3, ",", true && true && ! false, ",", true || 1+"a", ",", !(false && 1+"a");
                    339: 
                    340:        print "  must be true: ", defined(1), ",", defined(1.2.3.4), ",", 1 != 2, ",", 1 <= 2;
                    341:        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;
                    342: 
                    343: 
                    344:        print "  must be true:  ", 1 ~ is1, "  ", 3 ~ is1, "  ", 5 ~ is1;
                    345:        print "  must be true:  ", (one+2) ~ is1, "  ", 2 ~ is2, "  ", 2 ~ is3;
                    346:        print "  must be false: ", 4 ~ is1, " ", 4 ~ is2, " ", 4 ~ is3;
                    347:        print "  must be false: ", 10 ~ is1, " ", 10 ~ is2, " ", 10 ~ is3;
                    348:        print "  must be true:  ", 15 ~ is1, "  ", 15 ~ is2, "  ", 15 ~ is3;
                    349:        print "  must be false: ", 18 ~ is1, " ", 18 ~ is2, " ", 18 ~ is3;
                    350:        print "  must be true:  ", 19 ~ is1, "  ", 19 ~ is2, "  ", 19 ~ is3;
                    351:        print "  must be false: ", 20 ~ is1, " ", 20 ~ is2, " ", 20 ~ is3;
                    352: 
                    353:        px = 1.2.0.0/18;
                    354:        print "Testing prefixes: 1.2.0.0/18 = ", px;
                    355:        print "  must be true:  ",      192.168.0.0/16 ~ 192.168.0.0/16, " ", 192.168.0.0/17 ~ 192.168.0.0/16, " ", 192.168.254.0/24 ~ 192.168.0.0/16;
                    356:        print "  must be false: ",      192.168.0.0/15 ~ 192.168.0.0/16, " ", 192.160.0.0/17 ~ 192.168.0.0/16;
                    357: 
                    358:        p = 127.1.2.3;
                    359:        print "Testing mask : 127.0.0.0 = ", p.mask(8);
                    360:        
                    361:        pp = (1, 2);
                    362:        print "Testing pairs: (1,2) = ", (1,2), " = ", pp, " = ", (1,1+1), " = ", 'mkpair-a'(2);
                    363:        print "  must be true:  ", (1,2) = (1,1+1);
                    364:        print "Testing enums: ", RTS_DUMMY, " ", RTS_STATIC, " ",
                    365:                ", true: ", RTS_STATIC ~ [RTS_STATIC, RTS_DEVICE],
                    366:                ", false: ", RTS_BGP ~ [RTS_STATIC, RTS_DEVICE];
                    367: 
                    368:        ps = [(1,(one+one)), (3,4)..(4,8), (5,*), (6,3..6)];
                    369:        print "Pair set: ", ps;
                    370:        print "Testing pair set, true:  ", pp ~ ps,  "  ", (3,5) ~ ps, "  ", (4,1) ~ ps, "  ", (5,4) ~ ps, "  ", (5,65535) ~ ps, "  ", (6,4) ~ ps, "  ", (3, 10000) ~ ps;
                    371:        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, " ", (1,1) ~ ps;
                    372: 
                    373:        ps = [(20..150, 200..300), (50100..50200, 1000..50000), (*, 5+5)];
                    374:        print "Pair set: .. too long ..";
                    375:        print "Testing pair set, true:  ", (100,200) ~ ps,  "  ", (150,300) ~ ps, "  ", (50180,1200) ~ ps, "  ", (50110,49000) ~ ps, "  ", (0,10) ~ ps, "  ", (64000,10) ~ ps;
                    376:        print "Testing pair set, false: ", (20,199) ~ ps, " ", (151,250) ~ ps, " ", (50050,2000) ~ ps, " ", (50150,50050) ~ ps, " ", (10,9) ~ ps, " ", (65535,11) ~ ps ;
                    377: 
                    378:        qq = 1.2.3.4;
                    379:        print "Testinq quad: 1.2.3.4 = ", qq,
                    380:                ", true: ", qq = 1.2.3.4, " ", qq ~ [1.2.3.4, 5.6.7.8],
                    381:                ", false: ", qq = 4.3.2.1, " ", qq ~ [1.2.1.1, 1.2.3.5];
                    382: 
                    383:        cc = (rt, 12345, 200000);
                    384:        print "Testing EC: (rt, 12345, 200000) = ", cc;
                    385:        print "Testing EC: (ro, 100000, 20000) = ", (ro, 100000, 20000);
                    386:        print "Testing EC: (rt, 10.20.30.40, 20000) = ", (rt, 10.20.30.40, 20000);
                    387:        print "  true: ", cc = (rt, 12345, 200000), " ", cc < (rt, 12345, 200010),
                    388:                ", false: ", cc = (rt, 12346, 200000), " ", cc = (ro, 12345, 200000), " ",  cc > (rt, 12345, 200010);
                    389: 
                    390:        ecs = [(rt, ten, (one+onef(0))*10), (ro, 100000, 100..200), (rt, 12345, *)];
                    391:        print "EC set: ", ecs;
                    392:        print "EC set: ", ecs2;
                    393:        print "Testing EC set, true:  ",  (rt, 10, 20) ~ ecs, "  ", (ro, 100000, 100) ~ ecs, "  ", (ro, 100000, 200) ~ ecs,
                    394:                "  ", (rt, 12345, 0) ~ ecs, "  ", cc ~ ecs,  "  ", (rt, 12345, 4000000) ~ ecs;
                    395:        print "Testing EC set, false: ", (ro, 10, 20) ~ ecs, " ", (rt, 10, 21) ~ ecs, " ", (ro, 100000, 99) ~ ecs,
                    396:                " ", (ro, 12345, 10) ~ ecs, " ", (rt, 12346, 0) ~ ecs, " ", (ro, 0.1.134.160, 150) ~ ecs;
                    397: 
                    398:        st = "Hello";
                    399:        print "Testing string: ", st, " true: ", st ~ "Hell*", " false: ", st ~ "ell*";
                    400:        
                    401:        b = true;
                    402:        print "Testing bool: ", b, ", ", !b;
                    403: 
                    404:         if ( b = true ) then print "Testing bool comparison b = true: ", b;
                    405:        else { print "*** FAIL: TRUE test failed" ; quitbird; }
                    406:        
                    407:        ips = [ 1.1.1.0 .. 1.1.1.255, ip1222];
                    408:        print "Testing IP sets: ";
                    409:        print ips;
                    410:        print "  must be true:  ",      1.1.1.0 ~ ips, ",", 1.1.1.100 ~ ips, ",", 1.2.2.2 ~ ips;
                    411:        print "  must be false: ",      1.1.0.255 ~ ips, ",", 1.1.2.0  ~ ips, ",", 1.2.2.3 ~ ips, ",", 192.168.1.1 ~ ips;
                    412: 
                    413:        pxs = [ 1.2.0.0/16, 1.4.0.0/16+];
                    414:        print "Testing prefix sets: ";
                    415:        print pxs;
                    416:        print "  must be true:  ",      1.2.0.0/16 ~ pxs, ",", 1.4.0.0/16 ~ pxs, ",", 1.4.0.0/18 ~ pxs, ",", 1.4.0.0/32 ~ pxs;
                    417:        print "  must be false: ",      1.1.0.0/16 ~ pxs, ",", 1.3.0.0/16 ~ pxs, ",", 1.2.0.0/15 ~ pxs, ",", 1.2.0.0/17 ~ pxs, ",",
                    418:                                        1.2.0.0/32 ~ pxs, ",", 1.4.0.0/15 ~ pxs;
                    419: 
                    420:        test_pxset(pxs2);
                    421:        test_pxset([ 10.0.0.0/16{8,12}, 20.0.0.0/16{24,28} ]);
                    422:        print "What will this do? ", [ 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 5 ];
                    423: 
                    424:        print "Testing functions...";
                    425:        callme ( 1, 2 );
                    426:        callme ( 2, 2 );
                    427:        callme ( 2, 2 );
                    428:        callme ( 3, 2 );
                    429:        callme ( 4, 4 );
                    430:        callme ( 7, 2 );
                    431: 
                    432:        i = fifteen();
                    433:        print "Testing function calls: 15 = ", i;
                    434: 
                    435:        path_test();
                    436: 
                    437:        print "1.2.3.4 = ", onetwo;
                    438: 
                    439:        i = 4200000000;
                    440:        print "4200000000 = ", i, "   false: ", i = 4200000000, " ", i > 4100000000, "   false: ", i > 4250000000;
                    441: 
                    442:        test_undef(2);
                    443:        test_undef(3);
                    444:        test_undef(2);
                    445: 
                    446:        print "Testing include";
                    447:        include "test.conf.inc";
                    448: 
                    449:        print "done";
                    450:        quitbird;
                    451: #      print "*** FAIL: this is unreachable"; 
                    452: }
                    453: 
                    454: filter testf 
                    455: int j; 
                    456: { 
                    457:        print "Heya, filtering route to ", net.ip, " prefixlen ", net.len, " source ", source;
                    458:        print "This route was from ", from;
                    459:        j = 7;
                    460:        j = 17;
                    461:        if rip_metric > 15 then {
                    462:                reject "RIP Metric is more than infinity";
                    463:        }
                    464:        rip_metric = 14;
                    465:        unset(rip_metric);
                    466:                
                    467:        accept "ok I take that";
                    468: }
                    469: 
                    470: eval __startup();

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>