BSDIPLookup − Click element; IP routing lookup using a variant of PATRICIA trie
BSDIPLookup(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
Ports:
any number of inputs, any number of outputs
Processing: push
Package: ip (core)
Expects a destination IP address annotation with each packet. Looks up that address in its routing table, using longest-prefix-match, sets the destination annotation to the corresponding GW (if specified), and emits the packet on the indicated OUTput port.
Each argument is a route, specifying a destination and mask, an optional gateway IP address, and an output port. No destination-mask pair may occur more than once.
Uses the IPRouteTable(7) interface; see IPRouteTable(7) for description.
BSDIPLookup is optimized for fast database updates, while longest-prefix lookups are accomplished in at most O(W) time, where W is the width of the search key. The implementation is based on the historic PATRICIA trie lookup scheme borrowed from FreeBSD, described by Keith Sklower in the paper cited below.
table (read-only)
Outputs a human-readable version of the current routing table.
lookup (read-only) |
Reports the OUTput port and GW corresponding to an address.
add (write-only) |
Adds a route to the table. Format should be ‘ADDR/MASK [GW] OUT’. Fails if a route for ADDR/MASK already exists.
set (write-only) |
Sets a route, whether or not a route for the same prefix already exists.
remove (write-only) |
Removes a route from the table. Format should be ‘ADDR/MASK’.
ctrl (write-only) |
Adds or removes a group of routes. Write ‘add/set ADDR/MASK [GW] OUT’ to add a route, and ‘remove ADDR/MASK’ to remove a route. You can supply multiple commands, one per line; all commands are executed as one atomic operation.
flush (write-only) |
Clears the entire routing table in a single atomic operation.
stat (read-only) |
Outputs human-readable report on current database state.