Bugs : When no peer is avalaible without the --no-boot option, it crash => see below Once in a while, when exiting vifibnet ( not very properly, via Ctrl+C ), processes ( openvpn and babel ) still remain and disturb further attemps ( must be killed for vifibnet to work again ) To be done : Replace comments at the beginning of functions with docstrings & give all fn docstrings Do a clean-up in the import Remove the parameters to choose the number of clients To be discuss: Remove the --no-boot option since we know when no node is avalaible \=> the no-boot option is only useful when the server knows no peer, irl it should never happen, no-boot is a debug option The organisation of the code vifibnet.py Just contain the main loop and the init plib.py To launch server/client/routing processes utils.py Small functions to do some usefull job db.py Function to manage peers tunnelmanager.py To choose wich connection delete/keep/... upnpigd.py To open a port and find the external IP How we choose which protocol we use : IMO, we should use UDP. I've read many times than TCP other TCP can be catastrophic in terme of performance Every time a packet is lost, it is resend 2 times, one for each TCP tunnel And many GW allow UDP port forwarding (for bittorent, Xbox, ...) but not TCP port forwarding Use peers_db.populate(100) every once in a while ? -> yes but be warry of the refresh time ( populate the db once every 20s is bad.. )