We've had similar problems before. If you're going to use sockets, you need to 
be sure that you are setting the source IP address on the GBE module. 
Otherwise, you will see packets in Wireshark, but not in the sockets. You can 
do this in python with something like

fpga.write(gbe_block, source_ip, offset = 0x10)

(Here gbe_block is the name of the gbe yellow block). Also, it might be a good 
idea to set an arp entry on the roach, with something like the following:


def set_arp_entry(dev_name, last_ip_octet, mac):
    assert(last_ip_octet < 256)
    fpga.write(dev_name, mac, offset = 0x3002 + last_ip_octet*8)
...
set_arp_entry(gbe_block, 1, pc_mac_addr)


You will not get very high data rates through Python (it's too slow). I would 
suggest using similar code, but in C.

-Nevada

On Mar 23, 2010, at 14:21 PM, mch...@physics.ucsb.edu wrote:

> Hi Paul,
> 
> Thanks for the reply.  By "not working" I meant that no data appears and
> therefore the script stalls on the line
> data = s.recvfrom(1024)[0]
> 
> Also, currently I don't need very high data rates (~ 10Mb/s), but I will
> need them in the near future.
> 
> 
> Sean
> 
>> Hi Sean,
>> 
>> I've used python code almost identical to yours pretty successfully,
>> mainly for simple tests/debugging.  Whether or not this is the right way
>> to build a bigger application depends on things like the data rate you
>> need to support, any additional data processing/formatting that needs to
>> be done, etc.
>> 
>> What form of "not working" are you experiencing?  ie, an error message, no
>> data appears, data comes in but you can't keep up with it... or something
>> else?
>> 
>> -Paul
>> 
>> On Tue, 23 Mar 2010, mch...@physics.ucsb.edu wrote:
>> 
>>> Hi all,
>>> 
>>> I need to dump data from a ROACH board to a PC over the 10gbe.  Do any
>>> of
>>> you have any recommendations for what I should use as a client to handle
>>> the incoming data?
>>> 
>>> I've been trying to use a simple Python client like,
>>> 
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> s.bind((ip_address, port))
>>> data = s.recvfrom(1024)[0]
>>> 
>>> where "ip_address" is the address of the pc's 10gbe nic.  This has
>>> worked... only occasionally.  And I'm not sure why it fails.  Using
>>> Wireshark I can see the incoming packets are coming in with 1024 bytes
>>> from the ROACH as I expect.  Any thoughts?
>>> 
>>> Thanks a lot.
>>> 
>>> 
>>> Sean
>> 
> 
> 
> 


Reply via email to