summaryrefslogtreecommitdiff
path: root/tests/dpif-netdev.at
blob: 6af0f64ae3e462499ad55c657da5f2289c9b429b (plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
AT_BANNER([dpif-netdev])

m4_divert_push([PREPARE_TESTS])
[
# Strips out uninteresting parts of flow output, as well as parts
# that vary from one run to another (e.g., timing and bond actions).
strip_xout () {
    sed '
    s/ufid:[-0-9a-f]* //
    s/used:[0-9]*\.[0-9]*/used:0.0/
    s/actions:.*/actions: <del>/
    s/packets:[0-9]*/packets:0/
    s/bytes:[0-9]*/bytes:0/
' | sort
}

strip_xout_keep_actions () {
    sed '
    s/ufid:[-0-9a-f]* //
    s/used:[0-9]*\.[0-9]*/used:0.0/
    s/packets:[0-9]*/packets:0/
    s/bytes:[0-9]*/bytes:0/
' | sort
}

filter_flow_install () {
    grep 'flow_add' | sed 's/.*flow_add: //' | sort | uniq
}

filter_flow_dump () {
    grep 'flow_dump ' | sed '
	s/.*flow_dump //
	s/used:[0-9]*\.[0-9]*/used:0.0/
    ' | sort | uniq
}

strip_metadata () {
    sed 's/metadata=0x[0-9a-f]*/metadata=0x0/'
}
]
m4_divert_pop([PREPARE_TESTS])

m4_define([DPIF_NETDEV_DUMMY_IFACE],
  [AT_SETUP([dpif-netdev - $1 interface])
   # Create br0 with interfaces p1 and p7
   #    and br1 with interfaces p2 and p8
   # with p1 and p2 connected via unix domain socket
   OVS_VSWITCHD_START(
     [add-port br0 p1 -- set interface p1 type=$1 options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
      add-port br0 p7 -- set interface p7 ofport_request=7 type=$1 -- \
      add-br br1 -- \
      set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
      set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
                     fail-mode=secure -- \
      add-port br1 p2 -- set interface p2 type=$1 options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
      add-port br1 p8 -- set interface p8 ofport_request=8 type=$1 --], [], [],
      [m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
   AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])

   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
   AT_CHECK([ovs-ofctl add-flow br1 action=normal])
   ovs-appctl time/stop
   ovs-appctl time/warp 5000
   AT_CHECK([ovs-appctl netdev-dummy/receive p7 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
   AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
   ovs-appctl time/warp 100
   sleep 1  # wait for forwarders process packets

   AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
recirc_id(0),in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
recirc_id(0),in_port(2),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
recirc_id(0),in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
recirc_id(0),in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(frag=no), actions: <del>
])

   OVS_VSWITCHD_STOP
   AT_CLEANUP])

DPIF_NETDEV_DUMMY_IFACE([dummy])
DPIF_NETDEV_DUMMY_IFACE([dummy-pmd])

m4_define([DPIF_NETDEV_MISS_FLOW_INSTALL],
  [AT_SETUP([dpif-netdev - miss upcall key matches flow_install - $1])
   OVS_VSWITCHD_START(
     [add-port br0 p1 -- set interface p1 type=$1 options:pstream=punix:$OVS_RUNDIR/p0.sock
      set bridge br0 datapath-type=dummy other-config:datapath-id=1234 fail-mode=secure], [], [],
      [m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
   AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])

   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
   AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
   sleep 1

   AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
])
   AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
recirc_id(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
])

   # Now, the same again without megaflows.
   AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
])
   AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
   sleep 1

   AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
])
   AT_CHECK([filter_flow_install < ovs-vswitchd.log | strip_xout], [0], [dnl
recirc_id(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(frag=no), actions: <del>
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), actions: <del>
])

   OVS_VSWITCHD_STOP
   AT_CLEANUP])

DPIF_NETDEV_MISS_FLOW_INSTALL([dummy])
DPIF_NETDEV_MISS_FLOW_INSTALL([dummy-pmd])

m4_define([DPIF_NETDEV_MISS_FLOW_DUMP],
  [AT_SETUP([dpif-netdev - miss upcall key matches flow_dump - $1])
   OVS_VSWITCHD_START(
     [add-port br0 p1 -- set interface p1 type=$1 options:pstream=punix:$OVS_RUNDIR/p0.sock
      set bridge br0 datapath-type=dummy other-config:datapath-id=1234 fail-mode=secure], [], [],
      [m4_if([$1], [dummy-pmd], [--dummy-numa="0,0,0,0,1,1,1,1"], [])])
   AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
], [])
   AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg])

   AT_CHECK([ovs-ofctl add-flow br0 action=normal])
   AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
   sleep 1

   AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
])
   AT_CHECK([filter_flow_dump < ovs-vswitchd.log | strip_xout], [0], [dnl
skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions: <del>
])

   # Now, the same again without megaflows.
   AT_CHECK([ovs-appctl upcall/disable-megaflows], [0], [megaflows disabled
])
   AT_CHECK([ovs-appctl upcall/disable-ufid], [0], [Datapath dumping tersely using UFID disabled
], [])
   AT_CHECK([ovs-appctl netdev-dummy/receive p1 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
   sleep 1

   AT_CHECK([grep -A 1 'miss upcall' ovs-vswitchd.log | tail -n 1], [0], [dnl
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)
])
   AT_CHECK([filter_flow_dump < ovs-vswitchd.log | strip_xout], [0], [dnl
skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0), packets:0, bytes:0, used:never, actions: <del>
skb_priority(0/0),skb_mark(0/0),recirc_id(0),dp_hash(0/0),in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2/0.0.0.0,dst=10.0.0.1/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), packets:0, bytes:0, used:never, actions: <del>
])

   OVS_VSWITCHD_STOP
   AT_CLEANUP])

DPIF_NETDEV_MISS_FLOW_DUMP([dummy])
DPIF_NETDEV_MISS_FLOW_DUMP([dummy-pmd])