Hi all, I have a rather interesting in house networking tool that uses pcap to sniff packets, take them into twisted and replay them against a target.

Internally the tight loop for packet reassembly is currently run via twisted and some custom parsing and packet reconstruction code, I have been investigating if I can make this code faster _without_ reimplementing the capture part in C, as such I think I have two options:

* Pypy (which I would prefer as it means that I hopefully will gain performance improvements over time, as well as JIT acceleration throughout the code) * Cython (which will let me change the main loop to be mostly C without having to write a lot of C)

The tool currently uses an old style cPython c extension to bind python to pcap, since this will be slow in pypy I found the first semi implemented ctype pcap binding from google code here (http://code.google.com/p/pcap/) (I didnt write it so it may be broken)

The following test code works fine on cPython2.7

--------------- %< ---------------
from pycap import pycap
pp = pycap.open_live('eth0', 1596, True, 250)
bpf = pycap.compile(r'tcp dst port 80')
bpf = pycap.compile(pp, 'tcp', True, 0)

def process(user, pkthdr, packet):
    print 'callback'
    print 'pkthdr[0:7]', pkthdr.contents.len

cb = pycap.CALLBACK(process)
pycap.loop(pp, 100, cb, "greg")
--------------- >% ---------------

but fails with the following error on pypy trunk

--------------- %< ---------------
greg@localhost ~/projects/pcap-read-only/packet $ /home/greg/projects/pypy/pypy/translator/goal/pypy-c
Python 2.7.1 (ddff981df9d5, Sep 06 2011, 19:21:21)
[PyPy 1.6.0-dev1 with GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``this is a self-referential
channel topic''
>>>> import pycap
>>>> from pycap import pycap
>>>> pp = pycap.open_live('eth0', 1596, True, 250)
pycap/__buildin_funcs__/pcap_native_funcs.py:188: RuntimeWarning: C function without declared arguments called
  handle=pcap_c_funcs.pcap_open_live(source,snaplen,promisc,to_ms,error)
Segmentation fault
--------------- >% ---------------


The segmentation fault might be down to pcap being very twitchy about its inputs rather than pypy itself having a segfault

Any ideas whats wrong in the ctypes binding here ?

-- Greg
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
http://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to