The PBRD Project
Path Based Routing Daemon
for Linux 2.4+
   

Developer: Amir Guindehi
Core Team: Amir Guindehi, Ralph Keller, Philipp Blum

 

What's Happening?

Thursday, December 27, 2001:

I've released PBRD version 0.99 Release Candidate 1. It fixes the bug thread.c mentioned below.

Wednesday, December 26, 2001:

I fixed a small bug in thread.c which choose the actual hop instad of the next hop when installing the flow. This is not included in PBRD version 0.98 and renders it unusable. Please use the CVS release.

Thusday, December 25, 2001 - The PBRD day!

So, finally everything is implemented and works. I've released new binary packages which include everything you need to run COBRA and PBRD.

You can find PBRD 0.98 and COBRA 1.01 on their webservers.

Look at this:

First we create a path to an other host (this one is a direct neighbor) and install a plugin on the first hop. The flow will be bound to the plugin. This is the only application which works with only one PBRD on a central server. Longer paths can be created if you have more PBRD's running on one or more neighbors.

amir@host:~/cvs/pbrd/pbrd> ./pbr create 172.16.7.65:172.16.7.66 -s 172.16.100.1 --plugin 172.16.7.65:TEST:init
client: CREATE PATH SUCCESS!
You can renew a path with exactly the same command typed above!
Now we look at the status of our local PBRD:
amir@host:~/cvs/pbrd/pbrd> ./pbr status 172.16.7.65

Flow status:

Flow #1: src=172.16.100.1/32:0, dst=0.0.0.0/0:0, p=0, if=0.0.0.0
         ttl=3600, mark=2, nexthop=172.16.7.66

Plugin status:

Plugin #1: src=172.16.100.1/32:0, dst=0.0.0.0/0:0, p=0, if=0.0.0.0
         ttl=3600, plugin=TEST, init=init

Neighbor status:

Neighbor 1: 172.16.7.65
Neighbor 2: 172.16.7.66

Next we will will release the above path:

amir@host:~/cvs/pbrd/pbrd> ./pbr release 172.16.7.65:172.16.7.66 -s 172.16.100.1 --plugin 172.16.7.65:TEST:init      
client: RELEASE PATH SUCCESS!
Looking at the status of the local PBRD we see that the flow and it's related plugins have been released.
amir@host:~/cvs/pbrd/pbrd> ./pbr status 172.16.7.65 Flow status: No flows installed Plugin status: No plugins installed Neighbor status: Neighbor 1: 172.16.7.65 Neighbor 2: 172.16.7.66
The following output was generated by the server in the meantime when started in debug mode:
amir@host:/home/amir/cvs/pbrd/pbrd # ./pbrd -d -n 172.16.7.65 -n 172.16.7.66 daemon: startup... daemon: debug is set to yes daemon: server port is set to 4242 kernel: initializing kernel mutex kernel_ipt: init... kernel_ipt: creating chain pbrd... kernel_ipt: creating call to chain pbrd in mangle/PREROUTING chain... kernel_ipt: creating call to chain pbrd in mangle/OUTPUT chain... kernel_ipt: commiting changes... kernel_iptc: init... kernel_iptc: creating chain pbrd... kernel_iptc: creating call to chain pbrd in cobra/PREROUTING chain... kernel_iptc: creating call to chain pbrd in cobra/OUTPUT chain... kernel_iptc: commiting changes... kernel_ip: init... kernel_ip: installing neighbor 172.16.7.65 kernel_ip: adding table lookup rule for neighbor kernel_ip: adding routing table for neighbor kernel_ip: installing neighbor 172.16.7.66 kernel_ip: adding table lookup rule for neighbor kernel_ip: adding routing table for neighbor kernel: timer started server: socket listening on port 4242 server: connect on socket 10 thread#10: thread start for socket 10 io: receiving create path packet server: started new thread thread#10: packet received thread#10: processing create path packet thread#10: next hop is this node. processing packet further kernel: checking next hop on path thread#10: no flows nor plugins to install on last hop of path. skipping it thread#10: installing flow and plugins according to packet for local node thread#10: install/renew: src=172.16.100.1/32:0,dst=0.0.0.0/0:0,pro=0,if=0.0.0.0 kernel: locking kernel mutex kernel: installing flow... kernel_ipt: installing flow... kernel_ipt: appending mark rule for flow using mark 2 kernel_ipt: commiting changes... kernel: added flow to flow table kernel: unlocking kernel mutex kernel: locking kernel mutex kernel: installing plugin 'TEST' kernel_iptc: installing plugin 'TEST' with init 'init' kernel_iptc: trying to load module cobra_TEST kernel_iptc: got unique instance from kernel: 10 kernel_iptc: appending cobra rule for flow using plugin TEST kernel_iptc: commiting changes... kernel: added plugin to plugin table kernel: unlocking kernel mutex io: sending answer packet io: freeing answer packet io: freeing create path packet thread#10: closing connection to remote host thread#10: thread exit... server: connect on socket 10 thread#10: thread start for socket 10 server: started new thread io: receiving status packet thread#10: packet received thread#10: processing status packet kernel: locking kernel mutex kernel: sending server status kernel: unlocking kernel mutex io: sending status packet io: freeing status packet io: freeing status packet thread#10: closing connection to remote host thread#10: thread exit... kernel: alarm timer - decrementing all flow's ttl by 300 kernel-flow-ttl: ok: src=172.16.100.1/32:0,dst=0.0.0.0/0:0,pro=0,if=0.0.0.0 kernel-plugin-ttl: ok: src=172.16.100.1/32:0,dst=0.0.0.0/0:0,pro=0,if=0.0.0.0 server: connect on socket 10 server: started new thread thread#10: thread start for socket 10 io: receiving release path packet thread#10: packet received thread#10: processing release path packet thread#10: next hop is this node. processing packet further kernel: checking next hop on path thread#10: no flows nor plugins to install on last hop of path. skipping it thread#10: uninstalling flow and plugins according to packet for local node thread#10: uninstalling: src=172.16.100.1/32:0,dst=0.0.0.0/0:0,pro=0,if=0.0.0.0 kernel: locking kernel mutex kernel: uninstalling flow... kernel_ipt: uninstalling flow... kernel_ipt: removing mark rule for flow at index 0 kernel_ipt: commiting changes... kernel: removed flow from flow table kernel: unlocking kernel mutex kernel: locking kernel mutex kernel: uninstalling plugin 'TEST' kernel_iptc: uninstalling plugin 'TEST' kernel_iptc: removing cobra rule for flow at index 0 kernel_iptc: commiting changes... kernel: removed plugin from plugin table kernel: unlocking kernel mutex io: sending answer packet io: freeing answer packet io: freeing release path packet thread#10: closing connection to remote host thread#10: thread exit... server: connect on socket 10 server: started new thread thread#10: thread start for socket 10 io: receiving status packet thread#10: packet received thread#10: processing status packet kernel: locking kernel mutex kernel: sending server status kernel: unlocking kernel mutex io: sending status packet io: freeing status packet io: freeing status packet thread#10: closing connection to remote host thread#10: thread exit...

Last update: Thursday, 27 December, 2001 14:23
© 2001 by Digital Impact GmbH, Amir Guindehi