Example of input commands for the driver of the forwarding table. The syntax of commands is somehow similar to the syntax of C, especially that of literal values.
// // C-style and C++-style comments are allowed. // ifconfig 2 price < 500, dest = "MXP", classes ** "Y" // ** means substring | alert = "connection refused", host = "www.example.com", port = 23 | auction_group =* "guitars/electric", // =* means prefix maker = "PRS", price < 2000 ; // // interface numbers do not have to be consecutive, // nor they have to always increasing. However, they have to be *unique*! // ifconfig 10 dest = "LGA", price < 300 | system = "Siena", new_release = true | team > "d", team < "s", score > 0 ; // // you can specify constaints for any value and/or any type. // ifconfig 20 dest any string, price < 300 | system = "Siena", release any any ; // // if an attribute name starts with a digit, or if it contains special // characters, you can quote it as a string. // ifconfig 30 dest = "LUG", price < 500, "30-day-cancellation" = true ; // // you can specify constaints for any value and/or any type. // // // before using the forwarding table to process messages, // we *must* consolidate its data structures. // %consolidate // // the driver has the ability to collect statistics regarding the // forwarding table, including the amount of processing (user) time // %timer_start select carrier = "UA" orig = "DEN" dest = "MXP" price = 700 stops = 1 classes = "Q,Y,P,F" ; select carrier = "UA" orig = "DEN" dest = "LGA" price = 200 stops = 0 classes = "Y,P" ; %timer_stop %print_statistics // // we can also change the number of pre-processing rounds here... // %pre_process_limit = 20 %timer_start select carrier = "UA" orig = "DEN" dest = "MXP" price = 700 stops = 1 classes = "Q,Y,P,QF" ; select carrier = "UA" orig = "DEN" dest = "LGA" price = 200 stops = 0 classes = "Y,P" ; %timer_stop // // we can clear the forwarding table using this command // %clear // // %clear also deallocates all the memory used by the forwarding table // in order to clear the table maintaining (i.e., recycling) the // allocated memory, we could use this: // // %clear_recycle // // // The following directives are supported: // // %print_statistics [format-string] // prints the current statistics using the given format string, or the // preconfigured format string if none is given // // %statistics_only // only reads and counts the input predicates and messages, without // compiling or a forwarding table. This might be useful to count the // number of filters, predicates, constraints, etc. in a particular // file. // // %timer_start // starts the performance timers // // %timer_stop // stops the performance timers // // %output_on // activates the normal output of the matcher // // %output_off // suppresses the normal output of the matcher // // %output_to [filename] // redirects the output of the matcher to the given file, or to // standard output if a name is not given // // %pre_process_limit = <N> // sets the number of preprocessing rounds for the FwdTable algorithm. // // %clear // clears the forwarding table. This is necessary to reconstruct the // table (from scratch). This operation also releases the memory allocated // for the forwwarding table. // // %clear_recycle // clears the forwarding table without releasing the allocated memory. // This means that the memory will be recycled for the new content of // the table. // // %consolidate // consolidates the current value of the forwarding table. This is // *necessary* before the forwarding table can be used for matching. //