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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428
|
AT_BANNER([packet-type-aware pipeline])
AT_SETUP([ptap - triangle bridge setup with L2 and L3 GRE tunnels])
########################
# GRE tunneling test setup for PTAP bridge
#
# 192.168.10.10 192.168.10.20 192.168.10.30
# n1 n2 n3
# |ovs-n1 |ovs-n2 |ovs-n3
# +------o------+ +------o------+ +------o------+
# | br-in1 | | br-in2 | | br-in3 |
# | | | (PTAP) | | |
# +------o------+ +------o------+ +------o------+
# gre gre gre
# 10.0.0.1 (10.0.0.2) (10.0.0.3)
# (20.0.0.1) 20.0.0.2 (20.0.0.3)
# (30.0.0.1) LOCAL (30.0.0.2) LOCAL 30.0.0.3 LOCAL
# +-----------o-+ +-----------o-+ +-----------o-+
# | br-p1 | | br-p2 | | br-p3 |
# +------o------+ +------o------+ +------o------+
# p1-0 | | p2-0 | p3-0
# p0-1 | | p0-2 | p0-3
# +--o------------------------o-------------------------o--+
# | br0 |
# +--------------------------------------------------------+
#"
# GRE tunnel ports:
# No Bridge Name Packet-type Remote bridge & ports
# -----------------------------------------------------------------------
# 1020 br-in1 gre-12 l2 br-in2 2010 (ptap)
# 1021 br-in1 gre-12_l3 l3 same
# 1030 br-in1 gre-13 l2 br-in3 3010 (l2)
# 2010 br-in2 gre-21 ptap br-in1 1020 (l2), 1021 (l3)
# 2030 br-in2 gre-23 ptap br-in3 3020 (l2), 3021 (l3)
# 3010 br-in3 gre-31 l2 br-in1 1030 (l2)
# 3020 br-in3 gre-32 l2 br-in2 2010 (ptap)
# 3021 br-in3 gre-32_l3 l3 same
AT_SKIP_IF([test $HAVE_NC = no])
OVS_TRAFFIC_VSWITCHD_START()
HWADDR_BRP1=aa:55:00:00:00:01
HWADDR_BRP2=aa:55:00:00:00:02
HWADDR_BRP3=aa:55:00:00:00:03
dnl Create veth ports to connect br0 with br-p1, br-p2 and br-p3
AT_CHECK([ip link add p1-0 type veth peer name p0-1])
AT_CHECK([ip link set p1-0 up])
AT_CHECK([ip link set p0-1 up])
AT_CHECK([ip link set dev p1-0 mtu 3300])
AT_CHECK([ip link set dev p0-1 mtu 3300])
on_exit 'ip link del p0-1'
AT_CHECK([ip link add p2-0 type veth peer name p0-2])
AT_CHECK([ip link set p2-0 up])
AT_CHECK([ip link set p0-2 up])
AT_CHECK([ip link set dev p2-0 mtu 3300])
AT_CHECK([ip link set dev p0-2 mtu 3300])
on_exit 'ip link del p0-2'
AT_CHECK([ip link add p3-0 type veth peer name p0-3])
AT_CHECK([ip link set p3-0 up])
AT_CHECK([ip link set p0-3 up])
AT_CHECK([ip link set dev p3-0 mtu 3300])
AT_CHECK([ip link set dev p0-3 mtu 3300])
on_exit 'ip link del p0-3'
# Setup bridge infrastructure
AT_CHECK([
ovs-vsctl add-br br-in1 -- \
set bridge br-in1 datapath_type=netdev fail-mode=standalone
ovs-vsctl add-br br-in2 -- \
set bridge br-in2 datapath_type=netdev fail-mode=standalone
ovs-vsctl add-br br-in3 -- \
set bridge br-in3 datapath_type=netdev fail-mode=standalone
ovs-vsctl add-br br-p1 -- \
set bridge br-p1 datapath_type=netdev fail-mode=standalone other-config:hwaddr=$HWADDR_BRP1
ovs-vsctl add-br br-p2 -- \
set bridge br-p2 datapath_type=netdev fail-mode=standalone other-config:hwaddr=$HWADDR_BRP2
ovs-vsctl add-br br-p3 -- \
set bridge br-p3 datapath_type=netdev fail-mode=standalone other-config:hwaddr=$HWADDR_BRP3
ovs-vsctl add-port br-p1 p1-0 -- set interface p1-0 ofport_request=2
ovs-vsctl add-port br-p2 p2-0 -- set interface p2-0 ofport_request=2
ovs-vsctl add-port br-p3 p3-0 -- set interface p3-0 ofport_request=2
ovs-vsctl add-port br0 p0-1 -- set interface p0-1 ofport_request=10
ovs-vsctl add-port br0 p0-2 -- set interface p0-2 ofport_request=20
ovs-vsctl add-port br0 p0-3 -- set interface p0-3 ofport_request=30
# Populate the MAC table of br0
ovs-ofctl del-flows br0
ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP1,actions=10
ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP2,actions=20
ovs-ofctl add-flow br0 dl_dst=$HWADDR_BRP3,actions=30
ovs-ofctl del-flows br-in1
ovs-ofctl del-flows br-in2
ovs-ofctl del-flows br-in3
ovs-ofctl del-flows br-p1
ovs-ofctl del-flows br-p2
ovs-ofctl del-flows br-p3
], [0])
### Setup GRE tunnels
AT_CHECK([
ovs-vsctl add-port br-in1 gre12 -- \
set interface gre12 type=gre options:remote_ip=10.0.0.2 ofport_request=1020
ovs-vsctl add-port br-in1 gre12_l3 -- \
set interface gre12_l3 type=gre options:remote_ip=10.0.0.2 ofport_request=1021 options:packet_type=legacy_l3
ovs-vsctl add-port br-in1 gre13 -- \
set interface gre13 type=gre options:remote_ip=10.0.0.3 ofport_request=1030
ovs-vsctl add-port br-in2 gre21 -- \
set interface gre21 type=gre options:remote_ip=20.0.0.1 ofport_request=2010 options:packet_type=ptap
ovs-vsctl add-port br-in2 gre23 -- \
set interface gre23 type=gre options:remote_ip=20.0.0.3 ofport_request=2030 options:packet_type=ptap
ovs-vsctl add-port br-in3 gre31 -- \
set interface gre31 type=gre options:remote_ip=30.0.0.1 ofport_request=3010
ovs-vsctl add-port br-in3 gre32 -- \
set interface gre32 type=gre options:remote_ip=30.0.0.2 ofport_request=3020
ovs-vsctl add-port br-in3 gre32_l3 -- \
set interface gre32_l3 type=gre options:remote_ip=30.0.0.2 ofport_request=3021 options:packet_type=legacy_l3
], [0], [stdout])
AT_CHECK([
ip addr add 10.0.0.1/24 dev br-p1
ip link set br-p1 up
], [0], [stdout])
OVS_WAIT_UNTIL([ovs-appctl ovs/route/show | grep -q br-p1])
AT_CHECK([
ovs-appctl ovs/route/add 10.0.0.0/24 br-p1
ovs-appctl tnl/arp/set br-p1 10.0.0.1 $HWADDR_BRP1
ovs-appctl tnl/arp/set br-p1 10.0.0.2 $HWADDR_BRP2
ovs-appctl tnl/arp/set br-p1 10.0.0.3 $HWADDR_BRP3
], [0], [stdout])
AT_CHECK([
ip addr add 20.0.0.2/24 dev br-p2
ip link set br-p2 up
], [0], [stdout])
OVS_WAIT_UNTIL([ovs-appctl ovs/route/show | grep -q br-p2])
AT_CHECK([
ovs-appctl ovs/route/add 20.0.0.0/24 br-p2
ovs-appctl tnl/arp/set br-p2 20.0.0.1 $HWADDR_BRP1
ovs-appctl tnl/arp/set br-p2 20.0.0.2 $HWADDR_BRP2
ovs-appctl tnl/arp/set br-p2 20.0.0.3 $HWADDR_BRP3
], [0], [stdout])
AT_CHECK([
ip addr add 30.0.0.3/24 dev br-p3
ip link set br-p3 up
], [0], [stdout])
OVS_WAIT_UNTIL([ovs-appctl ovs/route/show | grep -q br-p3])
AT_CHECK([
ovs-appctl ovs/route/add 30.0.0.0/24 br-p3
ovs-appctl tnl/arp/set br-p3 30.0.0.1 $HWADDR_BRP1
ovs-appctl tnl/arp/set br-p3 30.0.0.2 $HWADDR_BRP2
ovs-appctl tnl/arp/set br-p3 30.0.0.3 $HWADDR_BRP3
], [0], [stdout])
AT_CHECK([
ovs-appctl ovs/route/show | grep User:
], [0], [dnl
User: 10.0.0.0/24 dev br-p1 SRC 10.0.0.1
User: 20.0.0.0/24 dev br-p2 SRC 20.0.0.2
User: 30.0.0.0/24 dev br-p3 SRC 30.0.0.3
])
AT_CHECK([
ovs-appctl tnl/neigh/show | grep br-p | sort
], [0], [stdout])
### Flows in br-p<x>to twist TEP IP addresses in tunnel IP headers
AT_CHECK([
ovs-ofctl add-flow br-p1 in_port:LOCAL,ip,actions=2
ovs-ofctl add-flow br-p1 in_port:2,ip,nw_dst:20.0.0.1,actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.2,LOCAL
ovs-ofctl add-flow br-p1 in_port:2,ip,nw_dst:30.0.0.1,actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.3,LOCAL
ovs-ofctl add-flow br-p2 in_port:LOCAL,ip,actions=2
ovs-ofctl add-flow br-p2 in_port:2,ip,nw_dst:10.0.0.2,actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.1,LOCAL
ovs-ofctl add-flow br-p2 in_port:2,ip,nw_dst:30.0.0.2,actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.3,LOCAL
ovs-ofctl add-flow br-p3 in_port:LOCAL,ip,actions=2
ovs-ofctl add-flow br-p3 in_port:2,ip,nw_dst:10.0.0.3,actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.1,LOCAL
ovs-ofctl add-flow br-p3 in_port:2,ip,nw_dst:20.0.0.3,actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.2,LOCAL
], [0])
# Strips 'n_packets=...' from ovs-ofctl output.
strip_n_packets () {
sed 's/n_packets=[[0-9]]*, //'
}
# Strips 'n_bytes=...' from ovs-ofctl output.
strip_n_bytes () {
sed 's/n_bytes=[[0-9]]*, //'
}
AT_CHECK([
ovs-ofctl dump-flows br-p1 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
ovs-ofctl dump-flows br-p2 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
ovs-ofctl dump-flows br-p3 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
], [0], [dnl
ip,in_port=2,nw_dst=20.0.0.1 actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.2,LOCAL
ip,in_port=2,nw_dst=30.0.0.1 actions=mod_nw_dst:10.0.0.1,mod_nw_src:10.0.0.3,LOCAL
ip,in_port=LOCAL actions=output:2
ip,in_port=2,nw_dst=10.0.0.2 actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.1,LOCAL
ip,in_port=2,nw_dst=30.0.0.2 actions=mod_nw_dst:20.0.0.2,mod_nw_src:20.0.0.3,LOCAL
ip,in_port=LOCAL actions=output:2
ip,in_port=2,nw_dst=10.0.0.3 actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.1,LOCAL
ip,in_port=2,nw_dst=20.0.0.3 actions=mod_nw_dst:30.0.0.3,mod_nw_src:30.0.0.2,LOCAL
ip,in_port=LOCAL actions=output:2
])
### Setup test ports for traffic injection
N1_IP=192.168.10.10
N2_IP=192.168.10.20
N3_IP=192.168.10.30
N1_MAC=aa:55:aa:55:00:01
N2_MAC=aa:55:aa:55:00:02
N3_MAC=aa:55:aa:55:00:03
N1_OFPORT=10
N2_OFPORT=20
N3_OFPORT=30
ADD_NAMESPACES(ns1, ns2, ns3)
ADD_VETH(n1, ns1, br-in1, "$N1_IP/24", $N1_MAC)
ADD_VETH(n2, ns2, br-in2, "$N2_IP/24", $N2_MAC)
ADD_VETH(n3, ns3, br-in3, "$N3_IP/24", $N3_MAC)
NS_EXEC([ns1], [arp -s $N2_IP $N2_MAC])
NS_EXEC([ns1], [arp -s $N3_IP $N3_MAC])
NS_EXEC([ns2], [arp -s $N1_IP $N1_MAC])
NS_EXEC([ns2], [arp -s $N3_IP $N3_MAC])
NS_EXEC([ns3], [arp -s $N2_IP $N2_MAC])
NS_EXEC([ns3], [arp -s $N1_IP $N1_MAC])
AT_CHECK([
ovs-vsctl set interface ovs-n1 ofport_request=$N1_OFPORT
ovs-vsctl set interface ovs-n2 ofport_request=$N2_OFPORT
ovs-vsctl set interface ovs-n3 ofport_request=$N3_OFPORT
], [0])
#N1_DPPORT=$(ovs-appctl dpif/show | grep "n1 10" | sed 's|.*/\([[0-9]]*\):.*|\1|')
#N2_DPPORT=$(ovs-appctl dpif/show | grep "n2 20" | sed 's|.*/\([[0-9]]*\):.*|\1|')
#N3_DPPORT=$(ovs-appctl dpif/show | grep "n3 30" | sed 's|.*/\([[0-9]]*\):.*|\1|')
### Verify datapath configuration
AT_CHECK([
ovs-appctl dpif/show | grep -v hit
], [0], [dnl
br-in1:
br-in1 65534/2: (tap)
gre12 1020/14: (gre: remote_ip=10.0.0.2)
gre12_l3 1021/14: (gre: packet_type=legacy_l3, remote_ip=10.0.0.2)
gre13 1030/14: (gre: remote_ip=10.0.0.3)
ovs-n1 10/15: (system)
br-in2:
br-in2 65534/3: (tap)
gre21 2010/14: (gre: packet_type=ptap, remote_ip=20.0.0.1)
gre23 2030/14: (gre: packet_type=ptap, remote_ip=20.0.0.3)
ovs-n2 20/16: (system)
br-in3:
br-in3 65534/4: (tap)
gre31 3010/14: (gre: remote_ip=30.0.0.1)
gre32 3020/14: (gre: remote_ip=30.0.0.2)
gre32_l3 3021/14: (gre: packet_type=legacy_l3, remote_ip=30.0.0.2)
ovs-n3 30/17: (system)
br-p1:
br-p1 65534/5: (tap)
p1-0 2/8: (system)
br-p2:
br-p2 65534/6: (tap)
p2-0 2/9: (system)
br-p3:
br-p3 65534/7: (tap)
p3-0 2/10: (system)
br0:
br0 65534/1: (tap)
p0-1 10/11: (system)
p0-2 20/12: (system)
p0-3 30/13: (system)
])
### Test L3 forwarding flows
AT_CHECK([
ovs-ofctl add-flow br-in1 ip,nw_dst=$N1_IP,actions=mod_dl_dst:$N1_MAC,$N1_OFPORT # Local route to N1
ovs-ofctl add-flow br-in1 ip,nw_dst=$N2_IP,actions=1020 # Route to N2 via the L2 tunnel to br-in2
ovs-ofctl add-flow br-in1 ip,nw_dst=$N3_IP,actions=1030 # Route to N3 direct through L2 tunnel
ovs-ofctl add-flow br-in2 ip,nw_dst=$N2_IP,actions=mod_dl_dst:$N2_MAC,$N2_OFPORT # Local route to N2 for ethernet packets
ovs-ofctl add-flow br-in2 ip,nw_dst=$N1_IP,actions=2010 # Route to N1 for ethernet packet
ovs-ofctl add-flow br-in2 packet_type=\(1,0x800\),nw_dst=$N1_IP,actions=2010 # Route to N1 for IP packets
ovs-ofctl add-flow br-in2 ip,nw_dst=$N3_IP,actions=2010 # Indirect route to N3 via br-in1 for ethernet packet
ovs-ofctl add-flow br-in2 packet_type=\(1,0x800\),nw_dst=$N3_IP,actions=2030 # Direct route to N3 for IP packets
ovs-ofctl add-flow br-in3 ip,nw_dst=$N3_IP,actions=mod_dl_dst:$N3_MAC,$N3_OFPORT # Local route to N1
ovs-ofctl add-flow br-in3 ip,nw_dst=$N2_IP,actions=3020 # Route to N2 via the L2 tunnel
ovs-ofctl add-flow br-in3 ip,nw_dst=$N1_IP,actions=3021 # Route to N1 via br-in2 through L3 tunnel
], [0])
AT_CHECK([
ovs-ofctl dump-flows br-in1 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
], [0], [dnl
ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
ip,nw_dst=192.168.10.20 actions=output:1020
ip,nw_dst=192.168.10.30 actions=output:1030
])
AT_CHECK([
ovs-ofctl dump-flows br-in2 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
], [0], [dnl
ip,nw_dst=192.168.10.10 actions=output:2010
ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
ip,nw_dst=192.168.10.30 actions=output:2010
packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
packet_type=(1,0x800),nw_dst=192.168.10.30 actions=output:2030
])
AT_CHECK([
ovs-ofctl dump-flows br-in3 | ofctl_strip | strip_n_packets | strip_n_bytes | sort | grep actions
], [0], [dnl
ip,nw_dst=192.168.10.10 actions=output:3021
ip,nw_dst=192.168.10.20 actions=output:3020
ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
])
# Ping between N1 and N3, via the L2 GRE tunnel between br-in1 and br-in3
NS_CHECK_EXEC([ns1], [ping -q -c 3 -i 0.3 -W 2 $N3_IP | FORMAT_PING], [0], [dnl
3 packets transmitted, 3 received, 0% packet loss, time 0ms
])
sleep 1
AT_CHECK([
ovs-ofctl dump-flows br-in1 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=252, ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=output:1030
])
AT_CHECK([
ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=252, packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
])
AT_CHECK([
ovs-ofctl dump-flows br-in3 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:3021
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
])
# Ping between N1 and N2, via the L2 GRE tunnel between br-in1 and br-in2
NS_CHECK_EXEC([ns1], [ping -q -c 3 -i 0.3 -W 2 $N2_IP | FORMAT_PING], [0], [dnl
3 packets transmitted, 3 received, 0% packet loss, time 0ms
])
sleep 1
AT_CHECK([
ovs-ofctl dump-flows br-in1 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=output:1020
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=output:1030
n_packets=6, n_bytes=546, ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
])
AT_CHECK([
ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=252, packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:2010
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
])
AT_CHECK([
ovs-ofctl dump-flows br-in3 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:3021
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
])
# Ping between N3 and N2, via the L3 GRE tunnel between br-in3 and br-in2
NS_CHECK_EXEC([ns3], [ping -q -c 3 -i 0.3 -W 2 $N1_IP | FORMAT_PING], [0], [dnl
3 packets transmitted, 3 received, 0% packet loss, time 0ms
])
sleep 1
AT_CHECK([
ovs-ofctl dump-flows br-in1 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=output:1020
n_packets=6, n_bytes=588, ip,nw_dst=192.168.10.30 actions=output:1030
n_packets=9, n_bytes=798, ip,nw_dst=192.168.10.10 actions=mod_dl_dst:aa:55:aa:55:00:01,output:10
])
AT_CHECK([
ovs-ofctl dump-flows br-in2 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.10 actions=output:2010
n_packets=3, n_bytes=294, ip,nw_dst=192.168.10.20 actions=mod_dl_dst:aa:55:aa:55:00:02,output:20
n_packets=6, n_bytes=504, packet_type=(1,0x800),nw_dst=192.168.10.10 actions=output:2010
])
AT_CHECK([
ovs-ofctl dump-flows br-in3 | ofctl_strip | sort | grep n_packets
], [0], [dnl
n_packets=6, n_bytes=588, ip,nw_dst=192.168.10.10 actions=output:3021
n_packets=6, n_bytes=588, ip,nw_dst=192.168.10.30 actions=mod_dl_dst:aa:55:aa:55:00:03,output:30
])
OVS_TRAFFIC_VSWITCHD_STOP
AT_CLEANUP
|