Compare commits
2 Commits
a15fb1f389
...
4b4e5fdbfa
Author | SHA1 | Date | |
---|---|---|---|
4b4e5fdbfa | |||
0e80900426 |
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import cocotb
|
import cocotb
|
||||||
from cocotb.triggers import *
|
from cocotb.triggers import *
|
||||||
@ -13,6 +13,14 @@ import time
|
|||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
import fcntl
|
import fcntl
|
||||||
|
import zlib
|
||||||
|
|
||||||
|
'''
|
||||||
|
# Set up virtual device using
|
||||||
|
sudo ip link add virt0 type dummy
|
||||||
|
sudo ip link set up virt0
|
||||||
|
sudo ip addr add 192.168.2.10/24 dev virt0
|
||||||
|
'''
|
||||||
|
|
||||||
class MacDevReceiver():
|
class MacDevReceiver():
|
||||||
def __init__(self, dut, eth_tx, eth_rx, dev):
|
def __init__(self, dut, eth_tx, eth_rx, dev):
|
||||||
@ -28,13 +36,20 @@ class MacDevReceiver():
|
|||||||
ETH_P_ALL=3
|
ETH_P_ALL=3
|
||||||
self.macdev=socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
|
self.macdev=socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
|
||||||
self.macdev.bind((dev, 0))
|
self.macdev.bind((dev, 0))
|
||||||
fcntl.fcntl(self.macdev, fcntl.F_SETFL, os.O_NONBLOCK)
|
fcntl.fcntl(self.macdev, fcntl.F_SETFL, os.O_NONBLOCK) # Not the best way to poll, but I couldn't get asyncio to play nicely with threading...
|
||||||
|
|
||||||
|
def eth_fcs(self, data):
|
||||||
|
crc = zlib.crc32(data) & 0xFFFF_FFFF
|
||||||
|
return crc.to_bytes(4, byteorder='little')
|
||||||
|
|
||||||
async def main(self):
|
async def main(self):
|
||||||
ETH_HEAD = b'\x55\x55\x55\x55\xD5'
|
ETH_HEAD = b'\x55\x55\x55\x55\xD5'
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
r = self.macdev.recv(2000)
|
r = self.macdev.recv(2000)
|
||||||
|
if len(r) < 60:
|
||||||
|
r += b'\x00' * (60 - len(r))
|
||||||
|
r += self.eth_fcs(r)
|
||||||
await self.eth_tx.send(ETH_HEAD + r);
|
await self.eth_tx.send(ETH_HEAD + r);
|
||||||
except:
|
except:
|
||||||
await Timer(1, "us")
|
await Timer(1, "us")
|
||||||
|
Loading…
Reference in New Issue
Block a user