blob: d25108dbe8c94124d5f4e083218dc19e3a6bded7 [file] [log] [blame]
ShreyaPandita9306c772012-09-28 12:21:40 -04001
2"""These tests fall under Conformance Test-Suite (OF-SWITCH-1.0.0 TestCases).
3 Refer Documentation -- Detailed testing methodology
4 <Some of test-cases are directly taken from oftest> """
5
6"Test Suite 6 ---> Actions "
7
8
9import logging
10
11import unittest
12import random
Rich Laneb90a1c42012-10-05 09:16:05 -070013import time
ShreyaPandita9306c772012-09-28 12:21:40 -040014
Rich Lane477f4812012-10-04 22:49:00 -070015from oftest import config
ShreyaPandita9306c772012-09-28 12:21:40 -040016import oftest.controller as controller
Rich Laned7b0ffa2013-03-08 15:53:42 -080017import ofp
ShreyaPandita9306c772012-09-28 12:21:40 -040018import oftest.dataplane as dataplane
ShreyaPandita9306c772012-09-28 12:21:40 -040019import oftest.parse as parse
Rich Laneb90a1c42012-10-05 09:16:05 -070020import oftest.base_tests as base_tests
ShreyaPandita9306c772012-09-28 12:21:40 -040021
Rich Laneda3b5ad2012-10-03 09:05:32 -070022from oftest.testutils import *
ShreyaPandita9306c772012-09-28 12:21:40 -040023from time import sleep
24from FuncUtils import *
25
Rich Laneb90a1c42012-10-05 09:16:05 -070026class NoAction(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -040027
28 """NoActionDrop : no action added to flow , drops the packet."""
29
30 def runTest(self):
31
Rich Lane9a003812012-10-04 17:17:59 -070032 logging.info("Running No_Action test")
ShreyaPandita9306c772012-09-28 12:21:40 -040033
Rich Lane477f4812012-10-04 22:49:00 -070034 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -040035 of_ports.sort()
36 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
37
38 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -080039 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -040040
Rich Lane9a003812012-10-04 17:17:59 -070041 logging.info("Install a flow without action")
42 logging.info("Send packets matching that flow")
43 logging.info("Expecting switch to drop all packets")
ShreyaPandita9306c772012-09-28 12:21:40 -040044
45 # Insert a flow wildcard all without any action
46 pkt = simple_tcp_packet()
47 match = parse.packet_to_flow_match(pkt)
48 self.assertTrue(match is not None, "Could not generate flow match from pkt")
49 match.wildcards=ofp.OFPFW_ALL
50 match.in_port = of_ports[0]
51
Rich Laneba3f0e22013-03-11 16:43:57 -070052 msg = ofp.message.flow_add()
ShreyaPandita9306c772012-09-28 12:21:40 -040053 msg.out_port = ofp.OFPP_NONE
ShreyaPandita9306c772012-09-28 12:21:40 -040054 msg.buffer_id = 0xffffffff
55 msg.match = match
Rich Lane5c3151c2013-01-03 17:15:41 -080056 self.controller.message_send(msg)
Rich Lane3a261d52013-01-03 17:45:08 -080057 do_barrier(self.controller)
ShreyaPanditab46f8522012-09-28 15:12:15 -040058
ShreyaPandita9306c772012-09-28 12:21:40 -040059 #Sending N packets matching the flow inserted
60 for pkt_cnt in range(5):
61 self.dataplane.send(of_ports[0],str(pkt))
62
63 #Verify packets not recieved on any of the dataplane ports
ShreyaPandita7b9ec982012-09-28 14:43:08 -040064 (rcv_port, rcv_pkt, pkt_time) = self.dataplane.poll(timeout=1,exp_pkt=pkt)
65 self.assertTrue(rcv_pkt is None,
ShreyaPanditad4a42c62012-09-28 15:35:27 -040066 "Packet received on port " + str(rcv_port))
ShreyaPandita9306c772012-09-28 12:21:40 -040067
68 #Verify packets not sent on control plane either
Rich Lane4c504f32013-06-07 17:24:14 -070069 verify_no_packet_in(self, str(pkt), of_ports[0])
ShreyaPandita9306c772012-09-28 12:21:40 -040070
71
Rich Laneb90a1c42012-10-05 09:16:05 -070072class Announcement(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -040073
74 """Announcement : Get all supported actions by the switch.
75 Send OFPT_FEATURES_REQUEST to get features supported by sw."""
76
77 def runTest(self):
78
Rich Lane9a003812012-10-04 17:17:59 -070079 logging.info("Running Announcement test")
ShreyaPandita9306c772012-09-28 12:21:40 -040080
Rich Lane9a003812012-10-04 17:17:59 -070081 logging.info("Sending Features_Request")
82 logging.info("Expecting Features Reply with supported actions")
ShreyaPandita9306c772012-09-28 12:21:40 -040083
84 # Sending Features_Request
Rich Lane28fa9272013-03-08 16:00:25 -080085 request = ofp.message.features_request()
ShreyaPandita9306c772012-09-28 12:21:40 -040086 (reply, pkt) = self.controller.transact(request)
87 self.assertTrue(reply is not None, "Failed to get any reply")
Rich Laneb73808c2013-03-11 15:22:23 -070088 self.assertEqual(reply.type, ofp.OFPT_FEATURES_REPLY,'Response is not Features_reply')
ShreyaPandita9306c772012-09-28 12:21:40 -040089
90 supported_actions =[]
91 if(reply.actions &1<<ofp.OFPAT_OUTPUT):
92 supported_actions.append('OFPAT_OUTPUT')
93 if(reply.actions &1<<ofp.OFPAT_SET_VLAN_VID):
94 supported_actions.append('OFPAT_SET_VLAN_VID')
95 if(reply.actions &1<<ofp.OFPAT_SET_VLAN_PCP):
96 supported_actions.append('OFPAT_SET_VLAN_PCP')
97 if(reply.actions &1<<ofp.OFPAT_STRIP_VLAN):
98 supported_actions.append('OFPAT_STRIP_VLAN')
99 if(reply.actions &1<<ofp.OFPAT_SET_DL_SRC):
100 supported_actions.append('OFPAT_SET_DL_SRC')
101 if(reply.actions &1<<ofp.OFPAT_SET_DL_DST):
102 supported_actions.append('OFPAT_SET_NW_SRC')
103 if(reply.actions &1<<ofp.OFPAT_SET_NW_DST):
104 supported_actions.append('OFPAT_SET_NW_DST')
105 if(reply.actions &1<<ofp.OFPAT_SET_NW_TOS):
106 supported_actions.append('OFPAT_SET_NW_TOS')
107 if(reply.actions &1<<ofp.OFPAT_SET_TP_SRC):
108 supported_actions.append('OFPAT_SET_TP_SRC')
109 if(reply.actions &1<<ofp.OFPAT_SET_TP_DST):
110 supported_actions.append('OFPAT_SET_TP_DST')
111 if(reply.actions &1<<ofp.OFPAT_VENDOR):
112 supported_actions.append('OFPAT_VENDOR')
113 if(reply.actions &1<<ofp.OFPAT_ENQUEUE):
114 supported_actions.append('OFPAT_ENQUEUE')
115
Rich Lane9a003812012-10-04 17:17:59 -0700116 logging.info(supported_actions)
ShreyaPandita9306c772012-09-28 12:21:40 -0400117
118
Rich Laneb90a1c42012-10-05 09:16:05 -0700119class ForwardAll(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400120
121 """ForwardAll : Packet is sent to all dataplane ports
122 except ingress port when output action.port = OFPP_ALL"""
123
124 def runTest(self):
125
Rich Lane9a003812012-10-04 17:17:59 -0700126 logging.info("Running Forward_All test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400127
Rich Lane477f4812012-10-04 22:49:00 -0700128 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400129 of_ports.sort()
130 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
131
132 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800133 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400134
Rich Lane9a003812012-10-04 17:17:59 -0700135 logging.info("Insert a flow with output action port OFPP_ALL")
136 logging.info("Send packet matching the flow")
137 logging.info("Expecting packet on all dataplane ports except ingress_port")
ShreyaPandita9306c772012-09-28 12:21:40 -0400138
139 #Create a packet
140 pkt = simple_tcp_packet()
141 match = parse.packet_to_flow_match(pkt)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800142 act = ofp.action.output()
ShreyaPandita9306c772012-09-28 12:21:40 -0400143
144 #Delete all flows
Rich Lane32bf9482013-01-03 17:26:30 -0800145 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400146 ingress_port=of_ports[0]
147 match.in_port = ingress_port
148
149 #Create a flow mod with action.port = OFPP_ALL
Rich Laneba3f0e22013-03-11 16:43:57 -0700150 request = ofp.message.flow_add()
ShreyaPandita9306c772012-09-28 12:21:40 -0400151 request.match = match
152 request.match.wildcards = ofp.OFPFW_ALL&~ofp.OFPFW_IN_PORT
153 act.port = ofp.OFPP_ALL
Rich Lanec495d9e2013-03-08 17:43:36 -0800154 request.actions.append(act)
ShreyaPandita9306c772012-09-28 12:21:40 -0400155
Rich Lane9a003812012-10-04 17:17:59 -0700156 logging.info("Inserting flow")
Rich Lane5c3151c2013-01-03 17:15:41 -0800157 self.controller.message_send(request)
Rich Lane3a261d52013-01-03 17:45:08 -0800158 do_barrier(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400159
160 #Send Packet matching the flow
Rich Lane9a003812012-10-04 17:17:59 -0700161 logging.info("Sending packet to dp port " + str(ingress_port))
ShreyaPandita9306c772012-09-28 12:21:40 -0400162 self.dataplane.send(ingress_port, str(pkt))
163
164 #Verifying packets recieved on expected dataplane ports
165 yes_ports = set(of_ports).difference([ingress_port])
166 receive_pkt_check(self.dataplane, pkt, yes_ports, [ingress_port],
Rich Lane2014f9b2012-10-05 15:29:40 -0700167 self)
ShreyaPandita9306c772012-09-28 12:21:40 -0400168
169
Rich Laneb90a1c42012-10-05 09:16:05 -0700170class ForwardController(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400171
172 """ForwardController : Packet is sent to controller
173 output.port = OFPP_CONTROLLER"""
174
175 def runTest(self):
176
Rich Lane9a003812012-10-04 17:17:59 -0700177 logging.info("Running Forward_Controller test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400178
Rich Lane477f4812012-10-04 22:49:00 -0700179 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400180 of_ports.sort()
181 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
182
183 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800184 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400185
Rich Lane9a003812012-10-04 17:17:59 -0700186 logging.info("Insert a flow with output action port OFPP_CONTROLLER")
187 logging.info("Send packet matching the flow")
188 logging.info("Expecting packet on the control plane")
ShreyaPandita9306c772012-09-28 12:21:40 -0400189
190 #Create packet
191 pkt = simple_tcp_packet()
192 match = parse.packet_to_flow_match(pkt)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800193 act = ofp.action.output()
ShreyaPandita9306c772012-09-28 12:21:40 -0400194
195 for ingress_port in of_ports:
196 #Delete all flows
Rich Lane32bf9482013-01-03 17:26:30 -0800197 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400198
199 match.in_port = ingress_port
200
201 #Create a flow mod message
Rich Laneba3f0e22013-03-11 16:43:57 -0700202 request = ofp.message.flow_add()
ShreyaPandita9306c772012-09-28 12:21:40 -0400203 request.match = match
204 act.port = ofp.OFPP_CONTROLLER
Rich Lanec495d9e2013-03-08 17:43:36 -0800205 request.actions.append(act)
ShreyaPandita9306c772012-09-28 12:21:40 -0400206
Rich Lane9a003812012-10-04 17:17:59 -0700207 logging.info("Inserting flow")
Rich Lane5c3151c2013-01-03 17:15:41 -0800208 self.controller.message_send(request)
Rich Lane3a261d52013-01-03 17:45:08 -0800209 do_barrier(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400210
211 #Send packet matching the flow
Rich Lane9a003812012-10-04 17:17:59 -0700212 logging.info("Sending packet to dp port " + str(ingress_port))
ShreyaPandita9306c772012-09-28 12:21:40 -0400213 self.dataplane.send(ingress_port, str(pkt))
214
215 #Verifying packet recieved on the control plane port
Rich Lane4c504f32013-06-07 17:24:14 -0700216 verify_packet_in(self, str(pkt), ingress_port, ofp.OFPR_ACTION)
ShreyaPandita9306c772012-09-28 12:21:40 -0400217
218
219
Rich Laneb90a1c42012-10-05 09:16:05 -0700220class ForwardLocal(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400221
222 """ForwardLocal : Packet is sent to OFPP_LOCAL port .
223 TBD : To verify packet recieved in the local networking stack of switch"""
224
225 def runTest(self):
226
Rich Lane9a003812012-10-04 17:17:59 -0700227 logging.info("Running Forward_Local test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400228
Rich Lane477f4812012-10-04 22:49:00 -0700229 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400230 of_ports.sort()
231 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
232
233 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800234 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400235
Rich Lane9a003812012-10-04 17:17:59 -0700236 logging.info("Insert a flow with output action port OFPP_LOCAL")
237 logging.info("Send packet matching the flow")
238 logging.info("Expecting packet in the local networking stack of switch")
ShreyaPandita9306c772012-09-28 12:21:40 -0400239
240 #Clear switch state
241 pkt = simple_tcp_packet()
242 match = parse.packet_to_flow_match(pkt)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800243 act = ofp.action.output()
ShreyaPandita9306c772012-09-28 12:21:40 -0400244
245 for ingress_port in of_ports:
246 #Delete the flows
Rich Lane32bf9482013-01-03 17:26:30 -0800247 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400248
249 match.in_port = ingress_port
250 #Create flow mod message
Rich Laneba3f0e22013-03-11 16:43:57 -0700251 request = ofp.message.flow_add()
ShreyaPandita9306c772012-09-28 12:21:40 -0400252 request.match = match
253 act.port = ofp.OFPP_LOCAL
Rich Lanec495d9e2013-03-08 17:43:36 -0800254 request.actions.append(act)
ShreyaPandita9306c772012-09-28 12:21:40 -0400255
Rich Lane9a003812012-10-04 17:17:59 -0700256 logging.info("Inserting flow")
Rich Lane5c3151c2013-01-03 17:15:41 -0800257 self.controller.message_send(request)
Rich Lane3a261d52013-01-03 17:45:08 -0800258 do_barrier(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400259
260 #Send packet matching the flow
Rich Lane9a003812012-10-04 17:17:59 -0700261 logging.info("Sending packet to dp port " + str(ingress_port))
ShreyaPandita9306c772012-09-28 12:21:40 -0400262 self.dataplane.send(ingress_port, str(pkt))
263
264 #TBD: Verification of packets being recieved.
265
266
Rich Laneb90a1c42012-10-05 09:16:05 -0700267class ForwardFlood(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400268
269 """Forward:Flood : Packet is sent to all dataplane ports
270 except ingress port when output action.port = OFPP_FLOOD
271 TBD : Verification---Incase of STP being implemented, flood the packet along the minimum spanning tree,
272 not including the incoming interface. """
273
274 def runTest(self):
275
Rich Lane9a003812012-10-04 17:17:59 -0700276 logging.info("Running Forward_Flood test")
Rich Lane477f4812012-10-04 22:49:00 -0700277 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400278 of_ports.sort()
279 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
280
281 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800282 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400283
Rich Lane9a003812012-10-04 17:17:59 -0700284 logging.info("Insert a flow with output action port OFPP_FORWARD")
285 logging.info("Send packet matching the flow")
286 logging.info("Expecting packet on all the ports except the input port")
ShreyaPandita9306c772012-09-28 12:21:40 -0400287
288 #Create a packet
289 pkt = simple_tcp_packet()
290 match = parse.packet_to_flow_match(pkt)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800291 act = ofp.action.output()
ShreyaPandita9306c772012-09-28 12:21:40 -0400292
293 #Delete all flows
Rich Lane32bf9482013-01-03 17:26:30 -0800294 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400295 ingress_port=of_ports[0]
296 match.in_port = ingress_port
297
298 #Create a flow mod with action.port = OFPP_ALL
Rich Laneba3f0e22013-03-11 16:43:57 -0700299 request = ofp.message.flow_add()
ShreyaPandita9306c772012-09-28 12:21:40 -0400300 request.match = match
301 request.match.wildcards = ofp.OFPFW_ALL&~ofp.OFPFW_IN_PORT
302 act.port = ofp.OFPP_FLOOD
Rich Lanec495d9e2013-03-08 17:43:36 -0800303 request.actions.append(act)
ShreyaPandita9306c772012-09-28 12:21:40 -0400304
Rich Lane9a003812012-10-04 17:17:59 -0700305 logging.info("Inserting flow")
Rich Lane5c3151c2013-01-03 17:15:41 -0800306 self.controller.message_send(request)
Rich Lane3a261d52013-01-03 17:45:08 -0800307 do_barrier(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400308
309 #Send Packet matching the flow
Rich Lane9a003812012-10-04 17:17:59 -0700310 logging.info("Sending packet to dp port " + str(ingress_port))
ShreyaPandita9306c772012-09-28 12:21:40 -0400311 self.dataplane.send(ingress_port, str(pkt))
312
313 #Verifying packets recieved on expected dataplane ports
314 yes_ports = set(of_ports).difference([ingress_port])
315 receive_pkt_check(self.dataplane, pkt, yes_ports, [ingress_port],
Rich Lane2014f9b2012-10-05 15:29:40 -0700316 self)
ShreyaPandita9306c772012-09-28 12:21:40 -0400317
Rich Laneb90a1c42012-10-05 09:16:05 -0700318class ForwardInport(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400319
320 """ ForwardInPort : Packet sent to virtual port IN_PORT
321 If the output.port = OFPP.INPORT then the packet is sent to the input port itself"""
322
323 def runTest(self):
324
Rich Lane9a003812012-10-04 17:17:59 -0700325 logging.info("Running Forward_Inport test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400326
Rich Lane477f4812012-10-04 22:49:00 -0700327 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400328 of_ports.sort()
329 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
330
331 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800332 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400333
Rich Lane9a003812012-10-04 17:17:59 -0700334 logging.info("Insert a flow with output action port OFPP_INPORT")
335 logging.info("Send packet matching the flow")
336 logging.info("Expecting packet on the input port")
ShreyaPandita9306c772012-09-28 12:21:40 -0400337
338 #Create a packet
339 pkt = simple_tcp_packet()
340 match = parse.packet_to_flow_match(pkt)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800341 act = ofp.action.output()
ShreyaPandita9306c772012-09-28 12:21:40 -0400342
343 #Delete the flows
Rich Lane32bf9482013-01-03 17:26:30 -0800344 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400345 ingress_port=of_ports[0]
346 match.in_port = ingress_port
347
348 # Create a flow mod message
Rich Laneba3f0e22013-03-11 16:43:57 -0700349 request = ofp.message.flow_add()
ShreyaPandita9306c772012-09-28 12:21:40 -0400350 request.match = match
351 act.port = ofp.OFPP_IN_PORT
352
Rich Lanec495d9e2013-03-08 17:43:36 -0800353 request.actions.append(act)
Rich Lane9a003812012-10-04 17:17:59 -0700354 logging.info("Inserting flow")
Rich Lane5c3151c2013-01-03 17:15:41 -0800355 self.controller.message_send(request)
Rich Lane3a261d52013-01-03 17:45:08 -0800356 do_barrier(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400357
358 #Send packet matching the flow
Rich Lane9a003812012-10-04 17:17:59 -0700359 logging.info("Sending packet to dp port " + str(ingress_port))
ShreyaPandita9306c772012-09-28 12:21:40 -0400360 self.dataplane.send(ingress_port, str(pkt))
361 yes_ports = [ingress_port]
362
363 #Verfying packet recieved on expected dataplane ports
364 receive_pkt_check(self.dataplane, pkt, yes_ports,set(of_ports).difference([ingress_port]),
Rich Lane2014f9b2012-10-05 15:29:40 -0700365 self)
ShreyaPandita9306c772012-09-28 12:21:40 -0400366
Rich Laneb90a1c42012-10-05 09:16:05 -0700367class ForwardTable(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400368
369 """ForwardTable : Perform actions in flow table. Only for packet-out messages.
370 If the output action.port in the packetout message = OFP.TABLE , then
371 the packet implements the action specified in the matching flow of the FLOW-TABLE"""
372
373 def runTest(self):
374
Rich Lane9a003812012-10-04 17:17:59 -0700375 logging.info("Running Forward_Table test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400376
Rich Lane477f4812012-10-04 22:49:00 -0700377 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400378 of_ports.sort()
379 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
380
381 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800382 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400383
Rich Lane9a003812012-10-04 17:17:59 -0700384 logging.info("Insert a flow F with output action port set to some egress_port")
385 logging.info("Send packet out message (matching flow F) with action.port = OFP.TABLE")
386 logging.info("Expecting packet on the egress_port")
ShreyaPandita9306c772012-09-28 12:21:40 -0400387
388 #Insert a all wildcarded flow
ShreyaPandita8dab4662012-11-02 13:40:14 -0400389 (pkt,match) = wildcard_all(self,of_ports)
ShreyaPandita9306c772012-09-28 12:21:40 -0400390
391 #Create a packet out message
Rich Lane28fa9272013-03-08 16:00:25 -0800392 pkt_out =ofp.message.packet_out();
ShreyaPandita9306c772012-09-28 12:21:40 -0400393 pkt_out.data = str(pkt)
394 pkt_out.in_port = of_ports[0]
Rich Laneea8c4722013-04-04 15:30:20 -0700395 pkt_out.buffer_id = 0xffffffff
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800396 act = ofp.action.output()
ShreyaPandita9306c772012-09-28 12:21:40 -0400397 act.port = ofp.OFPP_TABLE
Rich Lanec495d9e2013-03-08 17:43:36 -0800398 pkt_out.actions.append(act)
Rich Lane5c3151c2013-01-03 17:15:41 -0800399 self.controller.message_send(pkt_out)
ShreyaPandita9306c772012-09-28 12:21:40 -0400400
401 #Verifying packet out message recieved on the expected dataplane port.
402 (of_port, pkt, pkt_time) = self.dataplane.poll(port_number=of_ports[1],
403 exp_pkt=pkt,timeout=3)
404 self.assertTrue(pkt is not None, 'Packet not received')
405
406
Rich Laneb90a1c42012-10-05 09:16:05 -0700407class AddVlanTag(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400408
409 """AddVlanTag : Adds VLAN Tag to untagged packet."""
410
411 def runTest(self):
412
Rich Lane9a003812012-10-04 17:17:59 -0700413 logging.info("Running Add_vlan_tag test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400414
Rich Lane477f4812012-10-04 22:49:00 -0700415 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400416 of_ports.sort()
417 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
418
419 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800420 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400421
Rich Lane9a003812012-10-04 17:17:59 -0700422 logging.info("Verify if switch supports the action -- set vlan id, if not skip the test")
423 logging.info("Insert a flow with set vid action")
424 logging.info("Send packet matching the flow , verify recieved packet has vid set")
ShreyaPandita9306c772012-09-28 12:21:40 -0400425
426 #Verify set_vlan_id is a supported action
427 sup_acts = sw_supported_actions(self)
428 if not(sup_acts & 1<<ofp.OFPAT_SET_VLAN_VID):
429 skip_message_emit(self, "Add VLAN tag test skipped")
430 return
431
432 #Create packet to be sent and an expected packet with vid set
433 new_vid = 2
434 len_wo_vid = 100
435 len_w_vid = 104
436 pkt = simple_tcp_packet(pktlen=len_wo_vid)
437 exp_pkt = simple_tcp_packet(pktlen=len_w_vid, dl_vlan_enable=True,
Rich Laned0478ff2013-03-11 12:46:58 -0700438 vlan_vid=new_vid,vlan_pcp=0)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800439 vid_act = ofp.action.set_vlan_vid()
ShreyaPandita9306c772012-09-28 12:21:40 -0400440 vid_act.vlan_vid = new_vid
441
442 #Insert flow with action -- set vid , Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700443 flow_match_test(self, config["port_map"], pkt=pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400444 exp_pkt=exp_pkt, action_list=[vid_act])
445
Rich Laneb90a1c42012-10-05 09:16:05 -0700446class ModifyVlanTag(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400447
448 """ModifyVlanTag : Modifies VLAN Tag to tagged packet."""
449
450 def runTest(self):
451
Rich Lane9a003812012-10-04 17:17:59 -0700452 logging.info("Running Modify_Vlan_Tag test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400453
Rich Lane477f4812012-10-04 22:49:00 -0700454 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400455 of_ports.sort()
456 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
457
458 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800459 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400460
Rich Lane9a003812012-10-04 17:17:59 -0700461 logging.info("Verify if switch supports the action -- modify vlan id, if not skip the test")
462 logging.info("Insert a flow with action --set vid ")
463 logging.info("Send tagged packet matching the flow , verify recieved packet has vid rewritten")
ShreyaPandita9306c772012-09-28 12:21:40 -0400464
465 #Verify set_vlan_id is a supported action
466 sup_acts = sw_supported_actions(self)
467 if not (sup_acts & 1 << ofp.OFPAT_SET_VLAN_VID):
468 skip_message_emit(self, "Modify VLAN tag test skipped")
469 return
470
471 #Create a tagged packet with old_vid to be sent, and expected packet with new_vid
472 old_vid = 2
473 new_vid = 3
Rich Laned0478ff2013-03-11 12:46:58 -0700474 pkt = simple_tcp_packet(dl_vlan_enable=True, vlan_vid=old_vid)
475 exp_pkt = simple_tcp_packet(dl_vlan_enable=True, vlan_vid=new_vid)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800476 vid_act = ofp.action.set_vlan_vid()
ShreyaPandita9306c772012-09-28 12:21:40 -0400477 vid_act.vlan_vid = new_vid
478
479 #Insert flow with action -- set vid , Send packet matching the flow.Verify recieved packet is expected packet.
Rich Lane477f4812012-10-04 22:49:00 -0700480 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400481 action_list=[vid_act])
482
Rich Laneb90a1c42012-10-05 09:16:05 -0700483class VlanPrio1(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400484
485 """AddVlanPrioUntaggedPkt : Add VLAN priority to untagged packet."""
486
487 def runTest(self):
488
Rich Lane9a003812012-10-04 17:17:59 -0700489 logging.info("Running vlan_Prio_1 test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400490
Rich Lane477f4812012-10-04 22:49:00 -0700491 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400492 of_ports.sort()
493 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
494
495 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800496 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400497
Rich Lane9a003812012-10-04 17:17:59 -0700498 logging.info("Verify if switch supports the action -- set vlan priority, if not skip the test")
499 logging.info("Insert a flow with action -- set vlan priority ")
500 logging.info("Send untagged packet matching the flow , verify recieved packet has specified VLAN priority and has vid set tO 0 ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400501
502 #Verify set_vlan_priority is a supported action
503 sup_acts = sw_supported_actions(self)
504 if not (sup_acts & 1 << ofp.OFPAT_SET_VLAN_PCP):
505 skip_message_emit(self, "Set VLAN priority test skipped")
506 return
507
508 #Create a untagged packet to be sent and an expected packet with vid = 0 , vlan_priority set.
509 vlan_id = 0
Rich Lane123928c2012-10-04 21:28:53 -0700510 vlan_pcp = 1
Dan Talayco3bfc8222013-02-13 18:18:57 -0800511 pktlen = 64 if config["minsize"] < 64 else config["minsize"]
512 pkt = simple_tcp_packet(pktlen=pktlen)
Rich Laned0478ff2013-03-11 12:46:58 -0700513 exp_pkt = simple_tcp_packet(dl_vlan_enable=True, vlan_vid=vlan_id,vlan_pcp=vlan_pcp, pktlen=pktlen + 4)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800514 act = ofp.action.set_vlan_pcp()
Rich Lane123928c2012-10-04 21:28:53 -0700515 act.vlan_pcp = vlan_pcp
ShreyaPandita9306c772012-09-28 12:21:40 -0400516
517 #Insert flow with action -- set vLAN priority, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700518 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400519 action_list=[act])
520
521
Rich Laneb90a1c42012-10-05 09:16:05 -0700522class VlanPrio2(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400523
524 """ModifyVlanPrio : Modify VLAN priority to tagged packet."""
525
526 def runTest(self):
527
Rich Lane9a003812012-10-04 17:17:59 -0700528 logging.info("Running Vlan_Prio_2 test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400529
Rich Lane477f4812012-10-04 22:49:00 -0700530 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400531 of_ports.sort()
532 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
533
534 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800535 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400536
Rich Lane9a003812012-10-04 17:17:59 -0700537 logging.info("Verify if switch supports the action -- set vlan priority, if not skip the test")
538 logging.info("Insert a flow with action -- set vlan priority ")
539 logging.info("Send tagged packet matching the flow, verify recieved packet has vlan priority rewritten")
ShreyaPandita9306c772012-09-28 12:21:40 -0400540
541 #Verify set_vlan_priority is a supported action
542 sup_acts = sw_supported_actions(self,"true")
543 if not (sup_acts & 1 << ofp.OFPAT_SET_VLAN_PCP):
544 skip_message_emit(self, "modify_vlan_prio test skipped")
545 return
546
547 #Create a tagged packet , and an expected packet with vlan_priority set to specified value
548 vid = 123
549 old_vlan_pcp = 2
550 new_vlan_pcp = 3
Rich Laned0478ff2013-03-11 12:46:58 -0700551 pkt = simple_tcp_packet(dl_vlan_enable=True, vlan_vid=vid, vlan_pcp=old_vlan_pcp)
552 exp_pkt = simple_tcp_packet(dl_vlan_enable=True, vlan_vid=vid, vlan_pcp=new_vlan_pcp)
Rich Lane9d3cc6b2013-03-08 16:33:08 -0800553 vid_act = ofp.action.set_vlan_pcp()
ShreyaPandita9306c772012-09-28 12:21:40 -0400554 vid_act.vlan_pcp = new_vlan_pcp
555
556 #Insert flow with action -- set vLAN priority, Send tagged packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700557 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400558 action_list=[vid_act])
559
560
Rich Laneb90a1c42012-10-05 09:16:05 -0700561class ModifyL2Src(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400562
563 """ModifyL2Src :Modify the source MAC address"""
564
565 def runTest(self):
566
Rich Lane9a003812012-10-04 17:17:59 -0700567 logging.info("Running Modify_L2_Src test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400568
Rich Lane477f4812012-10-04 22:49:00 -0700569 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400570 of_ports.sort()
571 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
572
573 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800574 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400575
Rich Lane9a003812012-10-04 17:17:59 -0700576 logging.info("Verify if switch supports the action -- modify_l2_src, if not skip the test")
577 logging.info("Insert a flow with action -- set etherent src address")
578 logging.info("Send packet matching the flow, verify recieved packet src address rewritten ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400579
580 #Verify set_dl_src is a supported action
581 sup_acts = sw_supported_actions(self,use_cache="true")
582 if not (sup_acts & 1 << ofp.OFPAT_SET_DL_SRC):
583 skip_message_emit(self, "modify_l2_src test skipped")
584 return
585
Rich Laned0478ff2013-03-11 12:46:58 -0700586 #Create packet to be sent and expected packet with eth_src set to specified value
587 (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['eth_src'],
ShreyaPandita9306c772012-09-28 12:21:40 -0400588 check_test_params=True)
589
590 #Insert flow with action -- set src address, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700591 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400592 action_list=acts, max_test=2)
593
594
Rich Laneb90a1c42012-10-05 09:16:05 -0700595class ModifyL2Dst(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400596
597 """ModifyL2SDSt :Modify the dest MAC address"""
598
599 def runTest(self):
600
Rich Lane9a003812012-10-04 17:17:59 -0700601 logging.info("Running Modify_L2_Dst test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400602
Rich Lane477f4812012-10-04 22:49:00 -0700603 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400604 of_ports.sort()
605 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
606
607 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800608 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400609
Rich Lane9a003812012-10-04 17:17:59 -0700610 logging.info("Verify if switch supports the action -- modify_l2_dst, if not skip the test")
611 logging.info("Insert a flow with action -- set etherent dst address ")
612 logging.info("Send packet matching the flow, verify recieved packet dst address rewritten ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400613
614 #Verify set_dl_dst is a supported action
615 sup_acts = sw_supported_actions(self)
616 if not (sup_acts & 1 << ofp.OFPAT_SET_DL_DST):
617 skip_message_emit(self, "modify_l2_dst test skipped")
618 return
619
Rich Laned0478ff2013-03-11 12:46:58 -0700620 #Create packet to be sent and expected packet with eth_src set to specified value
621 (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['eth_dst'],
ShreyaPandita9306c772012-09-28 12:21:40 -0400622 check_test_params=True)
623
624 #Insert flow with action -- set dst address, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700625 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400626 action_list=acts, max_test=2)
627
Rich Laneb90a1c42012-10-05 09:16:05 -0700628class ModifyL3Src(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400629
630 """ModifyL3Src : Modify the source IP address of an IP packet """
631
632 def runTest(self):
633
Rich Lane9a003812012-10-04 17:17:59 -0700634 logging.info("Running Modify_L3_Src test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400635
Rich Lane477f4812012-10-04 22:49:00 -0700636 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400637 of_ports.sort()
638 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
639
640 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800641 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400642
Rich Lane9a003812012-10-04 17:17:59 -0700643 logging.info("Verify if switch supports the action -- modify_l3_src, if not skip the test")
644 logging.info("Insert a flow with action -- set network src address ")
645 logging.info("Send packet matching the flow, verify recieved packet network src address rewritten ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400646
647 #Verify set_nw_src is a supported action
648 sup_acts = sw_supported_actions(self)
649 if not (sup_acts & 1 << ofp.OFPAT_SET_NW_SRC):
650 skip_message_emit(self, "modify_l3_src test")
651 return
652
Rich Laned0478ff2013-03-11 12:46:58 -0700653 #Create packet to be sent and expected packet with ipv4_src set to specified value
ShreyaPandita9306c772012-09-28 12:21:40 -0400654 (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['ip_src'],
655 check_test_params=True)
656
657 #Insert flow with action -- set nw src address, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700658 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400659 action_list=acts, max_test=2)
660
Rich Laneb90a1c42012-10-05 09:16:05 -0700661class ModifyL3Dst(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400662
663 """ModifyL3Dst :Modify the dest IP address of an IP packet"""
664
665 def runTest(self):
666
Rich Lane9a003812012-10-04 17:17:59 -0700667 logging.info("Running Modify_L3_Dst test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400668
Rich Lane477f4812012-10-04 22:49:00 -0700669 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400670 of_ports.sort()
671 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
672
673 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800674 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400675
Rich Lane9a003812012-10-04 17:17:59 -0700676 logging.info("Verify if switch supports the action -- modify_l3_dst, if not skip the test")
677 logging.info("Insert a flow with action -- set network dst address ")
678 logging.info("Send packet matching the flow, verify recieved packet network dst address rewritten ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400679
680 #Verify set_nw_dst is a supported action
681 sup_acts = sw_supported_actions(self,use_cache="true")
682 if not (sup_acts & 1 << ofp.OFPAT_SET_NW_DST):
683 skip_message_emit(self, "modify_l3_dst test skipped")
684 return
685
Rich Laned0478ff2013-03-11 12:46:58 -0700686 #Create packet to be sent and expected packet with ipv4_dst set to specified value
ShreyaPandita9306c772012-09-28 12:21:40 -0400687 (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['ip_dst'],
688 check_test_params=True)
689
690 #Insert flow with action -- set nw dst address, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700691 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400692 action_list=acts, max_test=2)
693
694
Rich Laneb90a1c42012-10-05 09:16:05 -0700695class ModifyL4Src(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400696
697 """ModifyL4Src : Modify the source TCP port of a TCP packet"""
698
699 def runTest(self):
700
Rich Lane9a003812012-10-04 17:17:59 -0700701 logging.info("Running Modify_L4_Src test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400702
Rich Lane477f4812012-10-04 22:49:00 -0700703 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400704 of_ports.sort()
705 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
706
707 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800708 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400709
Rich Lane9a003812012-10-04 17:17:59 -0700710 logging.info("Verify if switch supports the action -- modify_l4_src, if not skip the test")
711 logging.info("Insert a flow with action -- set src tcp port")
712 logging.info("Send packet matching the flow, verify recieved packet src tcp port is rewritten ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400713
714 #Verify set_tp_src is a supported action
715 sup_acts = sw_supported_actions(self,use_cache="true")
716 if not (sup_acts & 1 << ofp.OFPAT_SET_TP_SRC):
717 skip_message_emit(self, "modify_l4_src test skipped")
718 return
719
720 #Create packet to be sent and expected packet with tcp_src set to specified value
721 (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['tcp_sport'],
722 check_test_params=True)
723
724 #Insert flow with action -- set tcp src port, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700725 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400726 action_list=acts, max_test=2)
727
Rich Laneb90a1c42012-10-05 09:16:05 -0700728class ModifyL4Dst(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400729
730 """ ModifyL4Dst: Modify the dest TCP port of a TCP packet """
731
732 def runTest(self):
733
Rich Lane9a003812012-10-04 17:17:59 -0700734 logging.info("Running Modify_L4_Dst test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400735
Rich Lane477f4812012-10-04 22:49:00 -0700736 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400737 of_ports.sort()
738 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
739
740 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800741 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400742
Rich Lane9a003812012-10-04 17:17:59 -0700743 logging.info("Verify if switch supports the action -- modify_l4_dst, if not skip the test")
744 logging.info("Insert a flow with action -- set dst tcp port")
745 logging.info("Send packet matching the flow, verify recieved packet dst tcp port is rewritten ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400746
747 #Verify set_tp_dst is a supported action
748 sup_acts = sw_supported_actions(self,use_cache="true")
749 if not (sup_acts & 1 << ofp.OFPAT_SET_TP_DST):
750 skip_message_emit(self, "ModifyL4Dst test")
751 return
752
753 #Create packet to be sent and expected packet with tcp_dst set to specified value
754 (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['tcp_dport'],
755 check_test_params=True)
756
757 #Insert flow with action -- set tcp dst port, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700758 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400759 action_list=acts, max_test=2)
760
Rich Laneb90a1c42012-10-05 09:16:05 -0700761class ModifyTos(base_tests.SimpleDataPlane):
ShreyaPandita9306c772012-09-28 12:21:40 -0400762
763 """ModifyTOS :Modify the IP type of service of an IP packet"""
764
765 def runTest(self):
766
Rich Lane9a003812012-10-04 17:17:59 -0700767 logging.info("Running Modify_Tos test")
ShreyaPandita9306c772012-09-28 12:21:40 -0400768
Rich Lane477f4812012-10-04 22:49:00 -0700769 of_ports = config["port_map"].keys()
ShreyaPandita9306c772012-09-28 12:21:40 -0400770 of_ports.sort()
771 self.assertTrue(len(of_ports) > 1, "Not enough ports for test")
772
773 #Clear switch state
Rich Lane32bf9482013-01-03 17:26:30 -0800774 delete_all_flows(self.controller)
ShreyaPandita9306c772012-09-28 12:21:40 -0400775
Rich Lane9a003812012-10-04 17:17:59 -0700776 logging.info("Verify if switch supports the action -- modify_tos, if not skip the test")
777 logging.info("Insert a flow with action -- set type of service ")
778 logging.info("Send packet matching the flow, verify recieved packet has TOS rewritten ")
ShreyaPandita9306c772012-09-28 12:21:40 -0400779
780 #Verify set_tos is a supported action
781 sup_acts = sw_supported_actions(self,use_cache="true")
782 if not (sup_acts & 1 << ofp.OFPAT_SET_NW_TOS):
783 skip_message_emit(self, "ModifyTOS test")
784 return
785
786 #Create packet to be sent and expected packet with TOS set to specified value
787 (pkt, exp_pkt, acts) = pkt_action_setup(self, mod_fields=['ip_tos'],
788 check_test_params=True)
789
790 #Insert flow with action -- set TOS, Send packet matching the flow, Verify recieved packet is expected packet
Rich Lane477f4812012-10-04 22:49:00 -0700791 flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
ShreyaPandita9306c772012-09-28 12:21:40 -0400792 action_list=acts, max_test=2, egr_count=-1)