-
Notifications
You must be signed in to change notification settings - Fork 60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multiple entries ARP table #1191
base: pre-release
Are you sure you want to change the base?
Conversation
Everything seems to work in simulation. Some possible criticalities (?):
|
I'll be un-drafting this PR once I'll hardware test it to make sure everything works like in simulation. In the meantime, if people have any thoughts about the points above, please let me know so I can fix them in the simulation environment before hw testing |
https://github.com/slaclab/surf/blob/main/.emacs
I think there would need to be a FSM that cycles through IP addresses in the ARP table that periodically checks if the ARP timeout has happen and need to issue a ARP request.
Is the intent of these "Multiple entries ARP table" to support UDP client only, UDP server only, or both types? |
Yeah, sorry about that.. maybe I should just add the SURF's .emacs file to my emacs conf file..
|
|
First version of multi-arp with expiring entries
Hi @ruck314, I've updated the code. Here's the changes
Does this make sense to you? Now the issue is to check thoroughly the new functionality. Ill try to come up with a nice testbench in order to make sure everything works as intended |
I've created a testbench in order to verify the functionalities of this PR. Currently it seems like everything is working as it is supposed to I do think though that an hw test is needed before un-drafting this PR Edit1: The test is not actually working as it is supposed to. There's a bug when entries on the ARP table expire. Working on solving it now Edit2: Everything should be fixed now |
@FilMarini I cloned the latest "Simple-10GbE-RUDP-KCU105-Example", update the submodule/surf to FilMarini:multi-arp, built the FW using your branch and programmed my KCU105 with this new FW. However, when I try to run the software, I got this error message Simple-10GbE-RUDP-KCU105-Example/software$ python scripts/devGui.py
Rogue/pyrogue version v6.4.0. https://github.com/slaclab/rogue
WARNING:pyrogue.Device.UdpRssiPack.SwRudpClient[1]:host=192.168.2.10, port=8193 -> Establishing link ...
Start: Started zmqServer on ports 9099-9101
To start a gui: python -m pyrogue gui --server='localhost:9099'
To use a virtual client: client = pyrogue.interfaces.VirtualClient(addr='localhost', port=9099)
terminate called after throwing an instance of 'rogue::GeneralError'
what(): JtagDriver::query(): General Error: Received invalid word size. If I comment out in the code listed below, then it runs (without the XVC support) and no errors observed. # Create XVC server and UDP client
self.udpClient = rogue.protocols.udp.Client( ip, 2542, False ) # Client(host, port, jumbo)
self.xvc = rogue.protocols.xilinx.Xvc ( 2542 ) # Server(port)
self.addProtocol( self.xvc )
# Connect the UDP Client to the XVC
self.udpClient == self.xvc If I switch the submodule/surf to latest pre-release branch on slaclab/surf, rebuild FW and revert the python code, I do not get this error message and software runs as expected. It appears that your changes in surf has broken this FW.UDP.Server/SW.UDP.client connection for XVC communication |
@ruck314 Hmmm, ok. Thanks for trying it out! Do you have any idea if its possible to exercise the XVC UDP traffic in simulation in some ways? |
@FilMarini Here's how the XVC UDP is connected to the KCU105: On the SW side, this is a UDP client. On the FW side, this would be yet another UDP server. In one terminal I tried to start the GUI: $ python scripts/devGui.py
Rogue/pyrogue version v6.4.0. https://github.com/slaclab/rogue
Start: Started zmqServer on ports 9099-9101
To start a gui: python -m pyrogue gui --server='localhost:9099'
To use a virtual client: client = pyrogue.interfaces.VirtualClient(addr='localhost', port=9099)
terminate called after throwing an instance of 'rogue::GeneralError'
what(): JtagDriver::query(): General Error: Received invalid word size. Please ensure the board is powered up.
Aborted (core dumped) And in the other terminal I capture the UDP port 2542 traffic between SW/FW: $ sudo tcpdump -i any udp dst port 2542 and dst host 192.168.2.10 -vvv -X -s 0 -tttt -n
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
2024-10-31 08:53:30.435555 eth2 Out IP (tos 0x0, ttl 64, id 57830, offset 0, flags [DF], proto UDP (17), length 32)
192.168.2.1.53486 > 192.168.2.10.2542: [bad udp cksum 0x8579 -> 0x9f9d!] UDP, length 4
0x0000: 4500 0020 e1e6 4000 4011 d38a c0a8 0201 E.....@.@.......
0x0010: c0a8 020a d0ee 09ee 000c 8579 0000 0000 ...........y.... It looks like it fails on the 1st UDP packet sent from SW to FW because it never got a response packet back. |
Adding ARP table with multiple entries
PULL REQUEST IS STILL A DRAFT! - Seems to work but more testing is needed
Description
Details