]>
Commit | Line | Data |
---|---|---|
2af602f2 TLSC |
1 | AT_BANNER([tunnel_push_pop_ipv6]) |
2 | ||
3 | AT_SETUP([tunnel_push_pop_ipv6 - action]) | |
4 | ||
5 | OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 other-config:hwaddr=aa:55:aa:55:00:00]) | |
6 | AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0]) | |
7 | AT_CHECK([ovs-vsctl add-port int-br t2 -- set Interface t2 type=vxlan \ | |
8 | options:remote_ip=2001:cafe::92 options:key=123 ofport_request=2\ | |
9 | -- add-port int-br t1 -- set Interface t1 type=gre \ | |
10 | options:remote_ip=2001:cafe::92 options:key=456 ofport_request=3\ | |
11 | -- add-port int-br t3 -- set Interface t3 type=vxlan \ | |
12 | options:remote_ip=2001:cafe::93 options:out_key=flow options:csum=true ofport_request=4\ | |
13 | -- add-port int-br t4 -- set Interface t4 type=geneve \ | |
14 | options:remote_ip=flow options:key=123 ofport_request=5\ | |
15 | ], [0]) | |
16 | ||
17 | AT_CHECK([ovs-appctl dpif/show], [0], [dnl | |
18 | dummy@ovs-dummy: hit:0 missed:0 | |
19 | br0: | |
20 | br0 65534/100: (dummy) | |
21 | p0 1/1: (dummy) | |
22 | int-br: | |
23 | int-br 65534/2: (dummy) | |
24 | t1 3/3: (gre: key=456, remote_ip=2001:cafe::92) | |
25 | t2 2/4789: (vxlan: key=123, remote_ip=2001:cafe::92) | |
26 | t3 4/4789: (vxlan: csum=true, out_key=flow, remote_ip=2001:cafe::93) | |
27 | t4 5/6081: (geneve: key=123, remote_ip=flow) | |
28 | ]) | |
29 | ||
30 | dnl First setup dummy interface IP address, then add the route | |
31 | dnl so that tnl-port table can get valid IP address for the device. | |
32 | AT_CHECK([ovs-appctl netdev-dummy/ip6addr br0 2001:cafe::88/24], [0], [OK | |
33 | ]) | |
34 | AT_CHECK([ovs-appctl ovs/route/add 2001:cafe::92/24 br0], [0], [OK | |
35 | ]) | |
36 | ||
37 | AT_CHECK([ovs-ofctl add-flow br0 action=normal]) | |
38 | ||
39 | dnl Check ARP Snoop | |
40 | AT_CHECK([ovs-appctl tnl/arp/set br0 2001:cafe::92 f8:bc:12:44:34:b6], [0], [OK | |
41 | ]) | |
42 | AT_CHECK([ovs-appctl tnl/arp/set br0 2001:cafe::93 f8:bc:12:44:34:b7], [0], [OK | |
43 | ]) | |
44 | ||
45 | AT_CHECK([ovs-appctl tnl/arp/show], [0], [dnl | |
46 | IP MAC Bridge | |
47 | ========================================================================== | |
48 | 2001:cafe::92 f8:bc:12:44:34:b6 br0 | |
49 | 2001:cafe::93 f8:bc:12:44:34:b7 br0 | |
50 | ]) | |
51 | ||
52 | AT_CHECK([ovs-appctl tnl/ports/show |sort], [0], [dnl | |
53 | Listening ports: | |
54 | genev_sys_6081 (6081) | |
55 | gre_sys (3) | |
56 | vxlan_sys_4789 (4789) | |
57 | ]) | |
58 | ||
59 | dnl Check VXLAN tunnel pop | |
60 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=51283,dst=4789)'], [0], [stdout]) | |
61 | AT_CHECK([tail -1 stdout], [0], | |
62 | [Datapath actions: tnl_pop(4789) | |
63 | ]) | |
64 | ||
65 | dnl Check GRE tunnel pop | |
66 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=47,tclass=0x0,hlimit=64)'], [0], [stdout]) | |
67 | AT_CHECK([tail -1 stdout], [0], | |
68 | [Datapath actions: tnl_pop(3) | |
69 | ]) | |
70 | ||
71 | dnl Check Geneve tunnel pop | |
72 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:cafe::92,dst=2001:cafe::88,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=51283,dst=6081)'], [0], [stdout]) | |
73 | AT_CHECK([tail -1 stdout], [0], | |
74 | [Datapath actions: tnl_pop(6081) | |
75 | ]) | |
76 | ||
77 | dnl Check VXLAN tunnel push | |
78 | AT_CHECK([ovs-ofctl add-flow int-br action=2]) | |
79 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) | |
80 | AT_CHECK([tail -1 stdout], [0], | |
81 | [Datapath actions: tnl_push(tnl_port(4789),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7b)),out_port(100)) | |
82 | ]) | |
83 | ||
84 | dnl Check VXLAN tunnel push set tunnel id by flow and checksum | |
85 | AT_CHECK([ovs-ofctl add-flow int-br "actions=set_tunnel:124,4"]) | |
86 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) | |
87 | AT_CHECK([tail -1 stdout], [0], | |
88 | [Datapath actions: tnl_push(tnl_port(4789),header(size=70,type=4,eth(dst=f8:bc:12:44:34:b7,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::93,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=4789,csum=0xffff),vxlan(flags=0x8000000,vni=0x7c)),out_port(100)) | |
89 | ]) | |
90 | ||
91 | dnl Check GRE tunnel push | |
92 | AT_CHECK([ovs-ofctl add-flow int-br action=3]) | |
93 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) | |
94 | AT_CHECK([tail -1 stdout], [0], | |
95 | [Datapath actions: tnl_push(tnl_port(3),header(size=62,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=47,tclass=0x0,hlimit=64),gre((flags=0x2000,proto=0x6558),key=0x1c8)),out_port(100)) | |
96 | ]) | |
97 | ||
98 | dnl Check Geneve tunnel push | |
99 | AT_CHECK([ovs-ofctl add-flow int-br "actions=set_field:2001:cafe::92->tun_ipv6_dst,5"]) | |
100 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) | |
101 | AT_CHECK([tail -1 stdout], [0], | |
102 | [Datapath actions: tnl_push(tnl_port(6081),header(size=70,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0xffff),geneve(vni=0x7b)),out_port(100)) | |
103 | ]) | |
104 | ||
105 | dnl Check Geneve tunnel push with options | |
4e548ad9 | 106 | AT_CHECK([ovs-ofctl add-tlv-map int-br "{class=0xffff,type=0x80,len=4}->tun_metadata0"]) |
2af602f2 TLSC |
107 | AT_CHECK([ovs-ofctl add-flow int-br "actions=set_field:2001:cafe::92->tun_ipv6_dst,set_field:0xa->tun_metadata0,5"]) |
108 | AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout]) | |
109 | AT_CHECK([tail -1 stdout], [0], | |
110 | [Datapath actions: tnl_push(tnl_port(6081),header(size=78,type=5,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:00,dl_type=0x86dd),ipv6(src=2001:cafe::88,dst=2001:cafe::92,label=0,proto=17,tclass=0x0,hlimit=64),udp(src=0,dst=6081,csum=0xffff),geneve(crit,vni=0x7b,options({class=0xffff,type=0x80,len=4,0xa}))),out_port(100)) | |
111 | ]) | |
112 | ||
113 | dnl Check decapsulation of GRE packet | |
114 | AT_CHECK([ovs-appctl netdev-dummy/receive p0 'aa55aa550000001b213cab6486dd60000000006a2f402001cafe0000000000000000000000922001cafe00000000000000000000008820006558000001c8fe71d883724fbeb6f4e1494a080045000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637']) | |
115 | ovs-appctl time/warp 1000 | |
116 | ||
117 | AT_CHECK([ovs-ofctl dump-ports int-br | grep 'port 3'], [0], [dnl | |
118 | port 3: rx pkts=1, bytes=98, drop=0, errs=0, frame=0, over=0, crc=0 | |
119 | ]) | |
120 | ||
121 | dnl Check GRE only accepts encapsulated Ethernet frames | |
122 | AT_CHECK([ovs-appctl netdev-dummy/receive p0 'aa55aa550000001b213cab6486dd60000000006a2f402001cafe0000000000000000000000922001cafe00000000000000000000008820000800000001c8fe71d883724fbeb6f4e1494a080045000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637']) | |
123 | ovs-appctl time/warp 1000 | |
124 | ||
125 | AT_CHECK([ovs-ofctl dump-ports int-br | grep 'port 3'], [0], [dnl | |
126 | port 3: rx pkts=1, bytes=98, drop=0, errs=0, frame=0, over=0, crc=0 | |
127 | ]) | |
128 | ||
129 | dnl Check decapsulation of Geneve packet with options | |
130 | AT_CAPTURE_FILE([ofctl_monitor.log]) | |
131 | AT_CHECK([ovs-ofctl monitor int-br 65534 --detach --no-chdir --pidfile 2> ofctl_monitor.log]) | |
132 | ||
133 | AT_CHECK([ovs-ofctl del-flows int-br]) | |
134 | AT_CHECK([ovs-ofctl add-flow int-br "tun_metadata0=0xa/0xf,actions=5,controller"]) | |
135 | AT_CHECK([ovs-appctl netdev-dummy/receive p0 'aa55aa550000001b213cab6486dd60000000008211402001cafe0000000000000000000000922001cafe000000000000000000000088308817c1008200000400655800007b00ffff80010000000affff00010000000bfe71d883724fbeb6f4e1494a080045000054ba200000400184861e0000011e00000200004227e75400030af3195500000000f265010000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637']) | |
136 | ||
137 | OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` -ge 2]) | |
138 | OVS_APP_EXIT_AND_WAIT(ovs-ofctl) | |
139 | ||
140 | AT_CHECK([cat ofctl_monitor.log], [0], [dnl | |
141 | NXT_PACKET_IN (xid=0x0): cookie=0x0 total_len=98 tun_id=0x7b,tun_ipv6_src=2001:cafe::92,tun_ipv6_dst=2001:cafe::88,tun_metadata0=0xa,in_port=5 (via action) data_len=98 (unbuffered) | |
142 | icmp,vlan_tci=0x0000,dl_src=be:b6:f4:e1:49:4a,dl_dst=fe:71:d8:83:72:4f,nw_src=30.0.0.1,nw_dst=30.0.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,icmp_type=0,icmp_code=0 icmp_csum:4227 | |
143 | ]) | |
144 | ||
145 | AT_CHECK([ovs-ofctl dump-ports int-br | grep 'port 5'], [0], [dnl | |
146 | port 5: rx pkts=1, bytes=98, drop=0, errs=0, frame=0, over=0, crc=0 | |
147 | ]) | |
148 | AT_CHECK([ovs-appctl dpif/dump-flows int-br], [0], [dnl | |
fba633f1 | 149 | tunnel(tun_id=0x7b,ipv6_src=2001:cafe::92,ipv6_dst=2001:cafe::88,geneve({class=0xffff,type=0x80,len=4,0xa/0xf}{class=0xffff,type=0,len=4}),flags(-df-csum+key)),skb_mark(0),recirc_id(0),in_port(6081),eth_type(0x0800),ipv4(frag=no), packets:0, bytes:0, used:never, actions:userspace(pid=0,slow_path(controller)) |
2af602f2 TLSC |
150 | ]) |
151 | ||
152 | OVS_VSWITCHD_STOP | |
153 | AT_CLEANUP |