/projects/reference_nic/test/both_loopback_crc/run.py

https://github.com/Caustic/netfpga
Python | 120 lines | 81 code | 27 blank | 12 comment | 11 complexity | e5e37405c16a0fd1c9c5567f860a1dfc MD5 | raw file
  1. #!/bin/env python
  2. from NFTest import *
  3. import random
  4. import sys
  5. phy0loop4 = ('../connections/conn', ['nf2c0', 'nf2c1', 'nf2c2', 'nf2c3'])
  6. nftest_init(sim_loop = ['nf2c0', 'nf2c1', 'nf2c2', 'nf2c3'], hw_config = [phy0loop4])
  7. nftest_start()
  8. # set parameters
  9. DA = "00:ca:fe:00:00:01"
  10. SA = "aa:bb:cc:dd:ee:ff"
  11. TTL = 64
  12. DST_IP = "192.168.1.1"
  13. SRC_IP = "192.168.0.1"
  14. nextHopMAC = "dd:55:dd:66:dd:77"
  15. NUM_PKTS = 2
  16. print "Sending now: "
  17. pkts = [[], [], [], []]
  18. totalPktLengths = [0,0,0,0]
  19. # send NUM_PKTS from ports nf2c0...nf2c3
  20. for i in range(NUM_PKTS):
  21. sys.stdout.write('\r'+str(i))
  22. sys.stdout.flush()
  23. for port in range(4):
  24. DA = "00:ca:fe:00:00:%02x"%port
  25. pkts[port].append(make_IP_pkt(dst_MAC=DA, src_MAC=SA, dst_IP=DST_IP,
  26. src_IP=SRC_IP, TTL=TTL,
  27. pkt_len=random.randint(60,1514)))
  28. totalPktLengths[port] += len(pkts[port][i])
  29. nftest_send_dma('nf2c' + str(port), pkts[port][i])
  30. nftest_expect_dma('nf2c' + str(port), pkts[port][i])
  31. print ""
  32. nftest_barrier()
  33. print "Checking pkt errors on Normal Operation\n"
  34. # check counter values
  35. for i in range(4):
  36. nftest_regread_expect(reg_defines.MAC_GRP_0_RX_QUEUE_NUM_PKTS_STORED_REG() + i*0x40000, NUM_PKTS)
  37. nftest_regread_expect(reg_defines.MAC_GRP_0_TX_QUEUE_NUM_PKTS_SENT_REG() + i*0x40000, NUM_PKTS)
  38. nftest_regread_expect(reg_defines.MAC_GRP_0_RX_QUEUE_NUM_BYTES_PUSHED_REG() + i*0x40000, totalPktLengths[i])
  39. nftest_regread_expect(reg_defines.MAC_GRP_0_TX_QUEUE_NUM_BYTES_PUSHED_REG() + i*0x40000, totalPktLengths[i])
  40. print ""
  41. nftest_fpga_reset()
  42. # Disable CRC
  43. for i in range(4):
  44. nftest_regwrite(reg_defines.MAC_GRP_0_CONTROL_REG() + i*reg_defines.MAC_GRP_OFFSET(), 1 << reg_defines.MAC_GRP_MAC_DIS_CRC_GEN_BIT_NUM())
  45. nftest_barrier()
  46. # Send Packets with CRC disabled
  47. print "Sending now: "
  48. totalPktLengths = [0,0,0,0]
  49. # send NUM_PKTS from ports nf2c0...nf2c3
  50. for i in range(NUM_PKTS):
  51. sys.stdout.write('\r'+str(i))
  52. sys.stdout.flush()
  53. for port in range(4):
  54. totalPktLengths[port] += len(pkts[port][i])
  55. nftest_send_dma('nf2c' + str(port), pkts[port][i])
  56. print ""
  57. nftest_barrier()
  58. print "Checking pkt errors on Operation after CRC is disabled\n"
  59. # check counter values
  60. for i in range(4):
  61. nftest_regread_expect(reg_defines.MAC_GRP_0_RX_QUEUE_NUM_PKTS_STORED_REG() + i*0x40000, 0)
  62. nftest_regread_expect(reg_defines.MAC_GRP_0_TX_QUEUE_NUM_PKTS_SENT_REG() + i*0x40000, NUM_PKTS)
  63. nftest_regread_expect(reg_defines.MAC_GRP_0_RX_QUEUE_NUM_BYTES_PUSHED_REG() + i*0x40000, 0)
  64. nftest_regread_expect(reg_defines.MAC_GRP_0_TX_QUEUE_NUM_BYTES_PUSHED_REG() + i*0x40000, totalPktLengths[i])
  65. nftest_regread_expect(reg_defines.MAC_GRP_0_RX_QUEUE_NUM_PKTS_DROPPED_BAD_REG() + i*0x40000, NUM_PKTS)
  66. print ""
  67. nftest_fpga_reset()
  68. # Enable CRC
  69. for i in range(4):
  70. nftest_regwrite(reg_defines.MAC_GRP_0_CONTROL_REG() + i*reg_defines.MAC_GRP_OFFSET(), 0 << reg_defines.MAC_GRP_MAC_DIS_CRC_GEN_BIT_NUM())
  71. nftest_barrier()
  72. # Send packets normally again
  73. print "Sending now: "
  74. totalPktLengths = [0,0,0,0]
  75. # send NUM_PKTS from ports nf2c0...nf2c3
  76. for i in range(NUM_PKTS):
  77. sys.stdout.write('\r'+str(i))
  78. sys.stdout.flush()
  79. for port in range(4):
  80. totalPktLengths[port] += len(pkts[port][i])
  81. nftest_send_dma('nf2c' + str(port), pkts[port][i])
  82. nftest_expect_dma('nf2c' + str(port), pkts[port][i])
  83. print ""
  84. nftest_barrier()
  85. print "Checking pkt errors on Normal Operation after CRC is enabled\n"
  86. # check counter values
  87. for i in range(4):
  88. nftest_regread_expect(reg_defines.MAC_GRP_0_RX_QUEUE_NUM_PKTS_STORED_REG() + i*reg_defines.MAC_GRP_OFFSET(), NUM_PKTS)
  89. nftest_regread_expect(reg_defines.MAC_GRP_0_TX_QUEUE_NUM_PKTS_SENT_REG() + i*reg_defines.MAC_GRP_OFFSET(), NUM_PKTS)
  90. nftest_regread_expect(reg_defines.MAC_GRP_0_RX_QUEUE_NUM_BYTES_PUSHED_REG() + i*reg_defines.MAC_GRP_OFFSET(), totalPktLengths[i])
  91. nftest_regread_expect(reg_defines.MAC_GRP_0_TX_QUEUE_NUM_BYTES_PUSHED_REG() + i*reg_defines.MAC_GRP_OFFSET(), totalPktLengths[i])
  92. print ""
  93. nftest_finish()