The Nexus
Show navigation Hide navigation
  • BLOG
  • ABOUT
    • Ego Surfing
  • PROJECTS
    • n2
    • S2ajax
    • Condo
    • ezEdit
    • FreeBlog - Air
    • Tooredo Alpha
    • Tools
    • Journlr, Again!
2 Aug 2008 | 2 min. (317 words)

How To Make The EFF ISP Throttling Tool Work On Leopard

Switzerland
Logo I love the idea of Switzerland, the new EFF tool for checking ISP throttling ; unfortunately as of release Zero.0.5, Leopard seems to still be a mere afterthought. Here is how I worked around the few things that were not working out of the box.

First, Switzerland is written in Python and will require Psyco. It’s a good thing since Psyco is all about performance. If you do not have it already installed:

svn co http://codespeak.net/svn/psyco/dist/ psyco-dist  
cd psyco-dist/  
sudo python setup.py install  
cd ..  

Download Switzerland from https://sourceforge.net/project/showfiles.php?group_id=233013
Extract it and change to its directory; eg

tar zxvf switzerland-0.0.5.tgz  
cd switzerland-0.0.5  

The FastCollector provided doesn’t work. So…

rm bin/FastCollector.darwin  

Now when we build FastCollector, it will be available in /usr/local/bin/FastCollector

Here comes the only moderately scary thing for non-developers. Use the patch command to modify switzerland/client/PacketListener.py. This is the input for patch:

diff --git a/switzerland/client/PacketListener.py b/switzerland/client/PacketListener.py  
    index 211b68f..dc0bbcc 100755  
--- a/switzerland/client/PacketListener.py  
+++ b/switzerland/client/PacketListener.py  
@@ -93,8 +93,7 @@ class PacketListener(threading.Thread):  
            p = platform.system()  
            # Implementing the recommendations from  
            # http://www.net.t-labs.tu-berlin.de/research/hppc/  
-        if p[-3:] == "BSD" or p == "Darwin":  
-          print p  
+        if p[-3:] == "BSD":  
            cmd = ["sysctl","-w","net.bpf.bufsize=10485760"]  
            try:     # Recent FreeBSDs  
                proc = Popen(cmd, stdin=PIPE, stdout=PIPE)  
@@ -110,6 +109,14 @@ class PacketListener(threading.Thread):  
                proc = Popen(cmd, stdin=PIPE, stdout=PIPE)  
                assert proc.wait() == 0  
    
+        elif p == "Darwin":  
+          cmd = ["sysctl","-w","debug.bpf_bufsize=10485760"]  
+          proc = Popen(cmd, stdin=PIPE, stdout=PIPE)  
+          assert proc.wait() == 0  
+          cmd[2] = "debug.bpf_maxbufsize=10485760"  
+          proc = Popen(cmd, stdin=PIPE, stdout=PIPE)  
+          assert proc.wait() == 0  
+  
            elif p == "Linux":  
            vars = [("/proc/sys/net/core/rmem_default", "33554432"),  
                    ("/proc/sys/net/core/rmem_max", "33554432"),

Let’s build and install everything:

sudo python setup.py install  

Well, it was easy (if it worked!)

Let’s create a log directory for Switzerland:

sudo mkdir /var/log/switzerland-pcaps  
sudo chmod a+wx /var/log/switzerland-pcaps  

And finally let’s run it:

sudo switzerland-client  

or if you wish to run your own server (you need to advertise it too!)

sudo switzerland-client --server yourserveraddress  

Questions?

Comments powered by Talkyard.

How I setup networking for VirtualBox on Ubuntu

Twitterified…at last!

2022 The Nexus