/
test.snabb
executable file
·86 lines (73 loc) · 2.61 KB
/
test.snabb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!../../../../snabb snsh
local vf0 = os.getenv("SNABB_AVF_PF0_VF0")
local vf1 = os.getenv("SNABB_AVF_PF1_VF0")
assert(vf0 ~= nil, "SNABB_AVF_PF0_VF0 is nil")
assert(vf1 ~= nil, "SNABB_AVF_PF1_VF0 is nil")
-- 1001 is an important test case, descriptors are written back in sets of 4
-- 1001, exercises the interrupt driven write back
local packet_count = 1001
local basic = require("apps.basic.basic_apps")
local intel_avf = require("apps.intel_avf.intel_avf")
local match = require("apps.test.match")
local npackets = require("apps.test.npackets")
local synth = require("apps.test.synth")
local counter = require("core.counter")
local c = config.new()
local src="02:00:00:00:00:00"
local dst="02:00:00:00:00:10"
config.app(c, "synth", synth.Synth, {
sizes = {64,128,192,256,384,512,1024},
src=src,
dst=dst
} )
config.app(c, "tee", basic.Tee)
config.app(c, "match", match.Match)
config.app(c, "npackets", npackets.Npackets, { npackets = packet_count })
config.app(c, "nic0", intel_avf.Intel_avf, { pciaddr = vf0 })
config.app(c, "nic1", intel_avf.Intel_avf, { pciaddr = vf1 })
config.link(c, "synth.output -> npackets.input")
config.link(c, "npackets.output -> tee.input")
config.link(c, "tee.output1 -> nic0.input")
config.link(c, "nic1.output -> match.rx")
config.link(c, "tee.output2 -> match.comparator")
engine.configure(c)
engine.main({ duration = 0.01, report = false })
engine.main({duration = 3, report = false})
function rx(l1, l2)
return counter.read(engine.link_table[l1 .. " -> " .. l2].stats.rxpackets)
end
function assert_eq(a,b,msg)
local an = tonumber(a)
local bn = tonumber(b)
assert(an == bn, msg .. " " .. an .. " ~= " .. bn)
end
local s = rx("tee.output1", "nic0.input")
local r = rx("nic1.output", "match.rx")
assert_eq(s, r, "packets_sr_1")
local n0 = engine.app_table['nic0']
local n1 = engine.app_table['nic1']
n0:mbox_sr_stats()
n1:mbox_sr_stats()
assert_eq(counter.read(n0.shm.tx_unicast), counter.read(n1.shm.rx_unicast), "mxbox_sr_stats_1")
assert_eq(counter.read(n0.shm.tx_unicast), packet_count, "mbox_sr_stats_2")
local c = config.new()
config.app(c, "synth", synth.Synth, {
sizes = {64,128,192,256,384,512,1024},
src=src,
dst=dst
} )
config.app(c, "nic0", intel_avf.Intel_avf, { pciaddr = vf0 })
config.app(c, "nic1", intel_avf.Intel_avf, { pciaddr = vf1 })
config.app(c, "sink", basic.Sink)
config.link(c, "synth.output -> nic0.input")
config.link(c, "nic1.output -> sink.input")
engine.configure(c)
while true do
local v = rx("synth.output", "nic0.input")
if v > 100 * 1000 * 1000 then
break
end
engine.main({ duration = 1, no_report = true })
end
engine.stop()
main.exit(0)