test/model: improve presentation/readability
This commit is contained in:
parent
36c9951235
commit
91f0f4ce80
|
@ -1,4 +1,4 @@
|
|||
# This file is Copyright (c) 2015-2017 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# License: BSD
|
||||
|
||||
import math
|
||||
|
@ -9,6 +9,7 @@ from liteeth.common import *
|
|||
|
||||
from test.model import mac
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def print_arp(s):
|
||||
print_with_prefix(s, "[ARP]")
|
||||
|
@ -16,7 +17,8 @@ def print_arp(s):
|
|||
preamble = split_bytes(eth_preamble, 8)
|
||||
|
||||
|
||||
# ARP model
|
||||
# ARP Packet ---------------------------------------------------------------------------------------
|
||||
|
||||
class ARPPacket(Packet):
|
||||
def __init__(self, init=[]):
|
||||
Packet.__init__(self, init)
|
||||
|
@ -47,17 +49,18 @@ class ARPPacket(Packet):
|
|||
r += "{:02x}".format(d)
|
||||
return r
|
||||
|
||||
# ARP ----------------------------------------------------------------------------------------------
|
||||
|
||||
class ARP(Module):
|
||||
def __init__(self, mac, mac_address, ip_address, debug=False):
|
||||
self.mac = mac
|
||||
self.mac_address = mac_address
|
||||
self.ip_address = ip_address
|
||||
self.debug = debug
|
||||
self.tx_packets = []
|
||||
self.tx_packet = ARPPacket()
|
||||
self.rx_packet = ARPPacket()
|
||||
self.table = {}
|
||||
self.mac = mac
|
||||
self.mac_address = mac_address
|
||||
self.ip_address = ip_address
|
||||
self.debug = debug
|
||||
self.tx_packets = []
|
||||
self.tx_packet = ARPPacket()
|
||||
self.rx_packet = ARPPacket()
|
||||
self.table = {}
|
||||
self.request_pending = False
|
||||
|
||||
self.mac.set_arp_callback(self.callback)
|
||||
|
@ -68,8 +71,8 @@ class ARP(Module):
|
|||
print_arp(">>>>>>>>")
|
||||
print_arp(packet)
|
||||
mac_packet = mac.MACPacket(packet)
|
||||
mac_packet.target_mac = packet.target_mac
|
||||
mac_packet.sender_mac = packet.sender_mac
|
||||
mac_packet.target_mac = packet.target_mac
|
||||
mac_packet.sender_mac = packet.sender_mac
|
||||
mac_packet.ethernet_type = ethernet_type_arp
|
||||
self.mac.send(mac_packet)
|
||||
|
||||
|
@ -100,15 +103,15 @@ class ARP(Module):
|
|||
def process_request(self, request):
|
||||
if request.target_ip == self.ip_address:
|
||||
reply = ARPPacket([0]*(eth_min_len-arp_header.length))
|
||||
reply.hwtype = arp_hwtype_ethernet
|
||||
reply.proto = arp_proto_ip
|
||||
reply.opcode = arp_opcode_reply
|
||||
reply.hwsize = 6
|
||||
reply.protosize = 4
|
||||
reply.hwtype = arp_hwtype_ethernet
|
||||
reply.proto = arp_proto_ip
|
||||
reply.opcode = arp_opcode_reply
|
||||
reply.hwsize = 6
|
||||
reply.protosize = 4
|
||||
reply.sender_mac = self.mac_address
|
||||
reply.sender_ip = self.ip_address
|
||||
reply.sender_ip = self.ip_address
|
||||
reply.target_mac = request.sender_mac
|
||||
reply.target_ip = request.sender_ip
|
||||
reply.target_ip = request.sender_ip
|
||||
self.send(reply)
|
||||
|
||||
def process_reply(self, reply):
|
||||
|
@ -116,12 +119,12 @@ class ARP(Module):
|
|||
|
||||
def request(self, ip_address):
|
||||
request = ARPPacket([0]*(eth_min_len-arp_header.length))
|
||||
request.hwtype = arp_hwtype_ethernet
|
||||
request.proto = arp_proto_ip
|
||||
request.opcode = arp_opcode_request
|
||||
request.hwsize = 6
|
||||
request.protosize = 4
|
||||
request.hwtype = arp_hwtype_ethernet
|
||||
request.proto = arp_proto_ip
|
||||
request.opcode = arp_opcode_request
|
||||
request.hwsize = 6
|
||||
request.protosize = 4
|
||||
request.sender_mac = self.mac_address
|
||||
request.sender_ip = self.ip_address
|
||||
request.sender_ip = self.ip_address
|
||||
request.target_mac = 0xffffffffffff
|
||||
request.target_ip = ip_address
|
||||
request.target_ip = ip_address
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
# This file is Copyright (c) 2015 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# License: BSD
|
||||
|
||||
import re
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def format_dump(dump):
|
||||
return [int(s, 16) for s in re.split(r'[;,\s\n]\s*', dump) if s is not ""]
|
||||
|
@ -17,6 +18,8 @@ def verify_packet(packet, infos):
|
|||
errors += 1
|
||||
return errors
|
||||
|
||||
# ARP Dumps ----------------------------------------------------------------------------------------
|
||||
|
||||
arp_request = format_dump("""
|
||||
00 22 19 22 54 9e 00 12 3f 97 92 01 08 06 00 01
|
||||
08 00 06 04 00 01 00 12 3f 97 92 01 a9 fe ff 42
|
||||
|
@ -53,6 +56,8 @@ arp_reply_infos = {
|
|||
"target_ip": 0xa9feff42
|
||||
}
|
||||
|
||||
# UDP Dumps ----------------------------------------------------------------------------------------
|
||||
|
||||
udp = format_dump("""
|
||||
d0 7a b5 96 cd 0a 00 14 0b 33 33 27 08 00 45 00
|
||||
00 5f 31 16 00 00 80 11 87 77 c0 a8 01 65 b2 7b
|
||||
|
@ -72,6 +77,9 @@ udp_infos = {
|
|||
"dst_port": 0x690f
|
||||
}
|
||||
|
||||
|
||||
# Ping Dumps ---------------------------------------------------------------------------------------
|
||||
|
||||
ping_request = format_dump("""
|
||||
00 50 56 e0 14 49 00 0c 29 34 0b de 08 00 45 00
|
||||
00 3c d7 43 00 00 80 01 2b 73 c0 a8 9e 8b ae 89
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# This file is Copyright (c) 2015-2017 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# License: BSD
|
||||
|
||||
import math
|
||||
|
@ -10,19 +10,21 @@ from liteeth.common import *
|
|||
|
||||
from test.model import udp
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def print_etherbone(s):
|
||||
print_with_prefix(s, "[ETHERBONE]")
|
||||
|
||||
|
||||
# Etherbone model
|
||||
# Etherbone ----------------------------------------------------------------------------------------
|
||||
|
||||
class Etherbone(Module):
|
||||
def __init__(self, udp, debug=False):
|
||||
self.udp = udp
|
||||
self.udp = udp
|
||||
self.debug = debug
|
||||
self.tx_packets = []
|
||||
self.tx_packet = EtherbonePacket()
|
||||
self.rx_packet = EtherbonePacket()
|
||||
self.tx_packet = EtherbonePacket()
|
||||
self.rx_packet = EtherbonePacket()
|
||||
|
||||
udp.set_etherbone_callback(self.callback)
|
||||
|
||||
|
@ -34,7 +36,7 @@ class Etherbone(Module):
|
|||
udp_packet = udp.UDPPacket(packet)
|
||||
udp_packet.src_port = 0x1234 # XXX
|
||||
udp_packet.dst_port = 20000 # XXX
|
||||
udp_packet.length = len(packet)
|
||||
udp_packet.length = len(packet)
|
||||
udp_packet.checksum = 0
|
||||
self.udp.send(udp_packet)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# This file is Copyright (c) 2015-2017 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# License: BSD
|
||||
|
||||
import math
|
||||
|
@ -9,12 +9,14 @@ from liteeth.common import *
|
|||
|
||||
from test.model import ip
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def print_icmp(s):
|
||||
print_with_prefix(s, "[ICMP]")
|
||||
|
||||
|
||||
# ICMP model
|
||||
# ICMP Packet --------------------------------------------------------------------------------------
|
||||
|
||||
class ICMPPacket(Packet):
|
||||
def __init__(self, init=[]):
|
||||
Packet.__init__(self, init)
|
||||
|
@ -45,15 +47,16 @@ class ICMPPacket(Packet):
|
|||
r += "{:02x}".format(d)
|
||||
return r
|
||||
|
||||
# ICMP ---------------------------------------------------------------------------------------------
|
||||
|
||||
class ICMP(Module):
|
||||
def __init__(self, ip, ip_address, debug=False):
|
||||
self.ip = ip
|
||||
self.ip = ip
|
||||
self.ip_address = ip_address
|
||||
self.debug = debug
|
||||
self.debug = debug
|
||||
self.tx_packets = []
|
||||
self.tx_packet = ICMPPacket()
|
||||
self.rx_packet = ICMPPacket()
|
||||
self.tx_packet = ICMPPacket()
|
||||
self.rx_packet = ICMPPacket()
|
||||
|
||||
self.ip.set_icmp_callback(self.callback)
|
||||
|
||||
|
@ -63,17 +66,17 @@ class ICMP(Module):
|
|||
print_icmp(">>>>>>>>")
|
||||
print_icmp(packet)
|
||||
ip_packet = ip.IPPacket(packet)
|
||||
ip_packet.version = 0x4
|
||||
ip_packet.ihl = 0x5
|
||||
ip_packet.total_length = len(packet) + ip_packet.ihl
|
||||
ip_packet.identification = 0
|
||||
ip_packet.flags = 0
|
||||
ip_packet.version = 0x4
|
||||
ip_packet.ihl = 0x5
|
||||
ip_packet.total_length = len(packet) + ip_packet.ihl
|
||||
ip_packet.identification = 0
|
||||
ip_packet.flags = 0
|
||||
ip_packet.fragment_offset = 0
|
||||
ip_packet.ttl = 0x80
|
||||
ip_packet.sender_ip = self.ip_address
|
||||
ip_packet.target_ip = 0x12345678 # XXX
|
||||
ip_packet.checksum = 0
|
||||
ip_packet.protocol = icmp_protocol
|
||||
ip_packet.ttl = 0x80
|
||||
ip_packet.sender_ip = self.ip_address
|
||||
ip_packet.target_ip = 0x12345678 # XXX
|
||||
ip_packet.checksum = 0
|
||||
ip_packet.protocol = icmp_protocol
|
||||
self.ip.send(ip_packet)
|
||||
|
||||
def callback(self, packet):
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# This file is Copyright (c) 2015-2017 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# License: BSD
|
||||
|
||||
import math
|
||||
|
@ -9,6 +9,7 @@ from liteeth.common import *
|
|||
|
||||
from test.model import mac
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def print_ip(s):
|
||||
print_with_prefix(s, "[IP]")
|
||||
|
@ -27,7 +28,8 @@ def checksum(msg):
|
|||
return ~s & 0xffff
|
||||
|
||||
|
||||
# IP model
|
||||
# IP Packet ----------------------------------------------------------------------------------------
|
||||
|
||||
class IPPacket(Packet):
|
||||
def __init__(self, init=[]):
|
||||
Packet.__init__(self, init)
|
||||
|
@ -71,20 +73,21 @@ class IPPacket(Packet):
|
|||
r += "{:02x}".format(d)
|
||||
return r
|
||||
|
||||
# IP -----------------------------------------------------------------------------------------------
|
||||
|
||||
class IP(Module):
|
||||
def __init__(self, mac, mac_address, ip_address, debug=False, loopback=False):
|
||||
self.mac = mac
|
||||
self.mac_address = mac_address
|
||||
self.ip_address = ip_address
|
||||
self.debug = debug
|
||||
self.loopback = loopback
|
||||
self.rx_packet = IPPacket()
|
||||
self.table = {}
|
||||
self.mac = mac
|
||||
self.mac_address = mac_address
|
||||
self.ip_address = ip_address
|
||||
self.debug = debug
|
||||
self.loopback = loopback
|
||||
self.rx_packet = IPPacket()
|
||||
self.table = {}
|
||||
self.request_pending = False
|
||||
|
||||
self.udp_callback = None
|
||||
self.icmp_callback = None
|
||||
self.udp_callback = None
|
||||
self.icmp_callback = None
|
||||
|
||||
self.mac.set_ip_callback(self.callback)
|
||||
|
||||
|
@ -101,8 +104,8 @@ class IP(Module):
|
|||
print_ip(">>>>>>>>")
|
||||
print_ip(packet)
|
||||
mac_packet = mac.MACPacket(packet)
|
||||
mac_packet.target_mac = 0x12345678abcd # XXX
|
||||
mac_packet.sender_mac = self.mac_address
|
||||
mac_packet.target_mac = 0x12345678abcd # XXX
|
||||
mac_packet.sender_mac = self.mac_address
|
||||
mac_packet.ethernet_type = ethernet_type_ip
|
||||
self.mac.send(mac_packet)
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@ from litex.soc.interconnect.stream_sim import *
|
|||
|
||||
from liteeth.common import *
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def print_mac(s):
|
||||
print_with_prefix(s, "[MAC]")
|
||||
|
||||
preamble = split_bytes(eth_preamble, 8, "little")
|
||||
|
||||
|
||||
def crc32(l):
|
||||
crc = []
|
||||
crc_bytes = split_bytes(binascii.crc32(bytes(l)), 4, "little")
|
||||
|
@ -22,13 +22,13 @@ def crc32(l):
|
|||
crc.append(int(byte))
|
||||
return crc
|
||||
|
||||
# MAC Packet ---------------------------------------------------------------------------------------
|
||||
|
||||
# MAC model
|
||||
class MACPacket(Packet):
|
||||
def __init__(self, init=[]):
|
||||
Packet.__init__(self, init)
|
||||
self.preamble_error = False
|
||||
self.crc_error = False
|
||||
self.crc_error = False
|
||||
|
||||
def check_remove_preamble(self):
|
||||
if comp(self[0:8], preamble):
|
||||
|
@ -93,15 +93,16 @@ class MACPacket(Packet):
|
|||
r += "{:02x}".format(d)
|
||||
return r
|
||||
|
||||
# MAC ----------------------------------------------------------------------------------------------
|
||||
|
||||
class MAC(Module):
|
||||
def __init__(self, phy, debug=False, loopback=False):
|
||||
self.phy = phy
|
||||
self.debug = debug
|
||||
self.loopback = loopback
|
||||
self.rx_packet = MACPacket()
|
||||
self.phy = phy
|
||||
self.debug = debug
|
||||
self.loopback = loopback
|
||||
self.rx_packet = MACPacket()
|
||||
|
||||
self.ip_callback = None
|
||||
self.ip_callback = None
|
||||
self.arp_callback = None
|
||||
|
||||
phy.set_mac_callback(self.callback)
|
||||
|
|
|
@ -1,36 +1,40 @@
|
|||
# This file is Copyright (c) 2015-2016 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# License: BSD
|
||||
|
||||
from litex.soc.interconnect.stream_sim import *
|
||||
|
||||
from liteeth.common import *
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def print_phy(s):
|
||||
print_with_prefix(s, "[PHY]")
|
||||
|
||||
|
||||
# PHY model
|
||||
# PHY Source ---------------------------------------------------------------------------------------
|
||||
|
||||
class PHYSource(PacketStreamer):
|
||||
def __init__(self, dw):
|
||||
PacketStreamer.__init__(self, eth_phy_description(dw))
|
||||
|
||||
# PHY Sink -----------------------------------------------------------------------------------------
|
||||
|
||||
class PHYSink(PacketLogger):
|
||||
def __init__(self, dw):
|
||||
PacketLogger.__init__(self, eth_phy_description(dw))
|
||||
|
||||
# PHY ----------------------------------------------------------------------------------------------
|
||||
|
||||
class PHY(Module):
|
||||
def __init__(self, dw, debug=False):
|
||||
self.dw = dw
|
||||
self.dw = dw
|
||||
self.debug = debug
|
||||
|
||||
self.submodules.phy_source = PHYSource(dw)
|
||||
self.submodules.phy_sink = PHYSink(dw)
|
||||
self.submodules.phy_sink = PHYSink(dw)
|
||||
|
||||
self.source = self.phy_source.source
|
||||
self.sink = self.phy_sink.sink
|
||||
self.sink = self.phy_sink.sink
|
||||
|
||||
self.mac_callback = None
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# This file is Copyright (c) 2015-2017 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# License: BSD
|
||||
|
||||
import math
|
||||
|
@ -9,12 +9,14 @@ from liteeth.common import *
|
|||
|
||||
from test.model import ip
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def print_udp(s):
|
||||
print_with_prefix(s, "[UDP]")
|
||||
|
||||
|
||||
# UDP model
|
||||
# UDP Packet ---------------------------------------------------------------------------------------
|
||||
|
||||
class UDPPacket(Packet):
|
||||
def __init__(self, init=[]):
|
||||
Packet.__init__(self, init)
|
||||
|
@ -45,16 +47,17 @@ class UDPPacket(Packet):
|
|||
r += "{:02x}".format(d)
|
||||
return r
|
||||
|
||||
# UDP ----------------------------------------------------------------------------------------------
|
||||
|
||||
class UDP(Module):
|
||||
def __init__(self, ip, ip_address, debug=False, loopback=False):
|
||||
self.ip = ip
|
||||
self.ip = ip
|
||||
self.ip_address = ip_address
|
||||
self.debug = debug
|
||||
self.loopback = loopback
|
||||
self.debug = debug
|
||||
self.loopback = loopback
|
||||
self.tx_packets = []
|
||||
self.tx_packet = UDPPacket()
|
||||
self.rx_packet = UDPPacket()
|
||||
self.tx_packet = UDPPacket()
|
||||
self.rx_packet = UDPPacket()
|
||||
|
||||
self.etherbone_callback = None
|
||||
|
||||
|
@ -69,17 +72,17 @@ class UDP(Module):
|
|||
print_udp(">>>>>>>>")
|
||||
print_udp(packet)
|
||||
ip_packet = ip.IPPacket(packet)
|
||||
ip_packet.version = 0x4
|
||||
ip_packet.ihl = 0x5
|
||||
ip_packet.total_length = len(packet) + ip_packet.ihl
|
||||
ip_packet.identification = 0
|
||||
ip_packet.flags = 0
|
||||
ip_packet.version = 0x4
|
||||
ip_packet.ihl = 0x5
|
||||
ip_packet.total_length = len(packet) + ip_packet.ihl
|
||||
ip_packet.identification = 0
|
||||
ip_packet.flags = 0
|
||||
ip_packet.fragment_offset = 0
|
||||
ip_packet.ttl = 0x80
|
||||
ip_packet.sender_ip = self.ip_address
|
||||
ip_packet.target_ip = 0x12345678 # XXX
|
||||
ip_packet.checksum = 0
|
||||
ip_packet.protocol = udp_protocol
|
||||
ip_packet.ttl = 0x80
|
||||
ip_packet.sender_ip = self.ip_address
|
||||
ip_packet.target_ip = 0x12345678 # XXX
|
||||
ip_packet.checksum = 0
|
||||
ip_packet.protocol = udp_protocol
|
||||
self.ip.send(ip_packet)
|
||||
|
||||
def callback(self, packet):
|
||||
|
|
Loading…
Reference in New Issue