-
Notifications
You must be signed in to change notification settings - Fork 321
LinearIPLookup
LinearIPLookup — Click element; simple IP routing table
LinearIPLookup(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
Ports: 1 input, any number of outputs
Processing: push
Note: Lookups and table updates with LinearIPLookup are extremely slow; the RadixIPLookup and DirectIPLookup elements should be preferred in almost all cases. See IPRouteTable for a performance comparison. We provide LinearIPLookup nevertheless for its simplicity.
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.
LinearIPLookup uses a linear search algorithm that may look at every route on each packet. It is therefore most suitable for small routing tables.
This example delivers broadcasts and packets addressed to the local host (18.26.4.24) to itself, packets to net 18.26.4 to the local interface, and all others via gateway 18.26.4.1:
... -> GetIPAddress(16) -> rt;
rt :: LinearIPLookup(18.26.4.24/32 0,
18.26.4.255/32 0,
18.26.4.0/32 0,
18.26.4/24 1,
0/0 18.26.4.1 1);
rt[0] -> ToHost;
rt[1] -> ... -> ToDevice(eth0);
- 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 forADDR/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.
RadixIPLookup, DirectIPLookup, RangeIPLookup, StaticIPLookup, SortedIPLookup, LinuxIPLookup, IPRouteTable
Generated by click-elem2man from ../elements/ip/lineariplookup.hh:7
on 2017/10/17.