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.. )