loxi-prep: subtype flow_mod classes
diff --git a/src/python/of10/message.py b/src/python/of10/message.py
index 6acb063..b52d40f 100644
--- a/src/python/of10/message.py
+++ b/src/python/of10/message.py
@@ -3448,3 +3448,32 @@
vendor
)
+
+_flow_mod = flow_mod
+flow_mod = None
+
+class flow_add(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_ADD
+
+class flow_modify(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_MODIFY
+
+class flow_modify_strict(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_MODIFY_STRICT
+
+class flow_delete(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_DELETE
+
+class flow_delete_strict(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_DELETE_STRICT
+
diff --git a/src/python/oftest/testutils.py b/src/python/oftest/testutils.py
index a14eab1..a1db2e0 100644
--- a/src/python/oftest/testutils.py
+++ b/src/python/oftest/testutils.py
@@ -40,10 +40,9 @@
"""
logging.info("Deleting all flows")
- msg = of10.message.flow_mod()
+ msg = of10.message.flow_delete()
msg.match.wildcards = of10.OFPFW_ALL
msg.out_port = of10.OFPP_NONE
- msg.command = of10.OFPFC_DELETE
msg.buffer_id = 0xffffffff
ctrl.message_send(msg)
return 0 # for backwards compatibility
@@ -574,7 +573,7 @@
else:
egr_port_list = [egr_ports]
- request = of10.message.flow_mod()
+ request = of10.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
if check_expire:
@@ -969,7 +968,7 @@
# Generate a simple "drop" flow mod
# If in_band is true, then only drop from first test port
def flow_mod_gen(port_map, in_band):
- request = of10.message.flow_mod()
+ request = of10.message.flow_add()
request.match.wildcards = of10.OFPFW_ALL
if in_band:
request.match.wildcards = of10.OFPFW_ALL - of10.OFPFW_IN_PORT
diff --git a/tests/FuncUtils.py b/tests/FuncUtils.py
index 92b3024..1aefae1 100644
--- a/tests/FuncUtils.py
+++ b/tests/FuncUtils.py
@@ -18,9 +18,8 @@
#################### Functions for various types of flow_mod ##########################################################################################
def match_send_flowadd(self, match, priority, port):
- msg = ofp.message.flow_mod()
+ msg = ofp.message.flow_add()
msg.out_port = ofp.OFPP_NONE
- msg.command = ofp.OFPFC_ADD
# msg.cookie = random.randint(0,9007199254740992)
msg.buffer_id = 0xffffffff
msg.match = match
@@ -323,10 +322,9 @@
# Strict Modify the flow Action
#Create a flow_mod message , command MODIFY_STRICT
- msg5 = ofp.message.flow_mod()
+ msg5 = ofp.message.flow_modify_strict()
msg5.match = match
msg5.cookie = random.randint(0,9007199254740992)
- msg5.command = ofp.OFPFC_MODIFY_STRICT
msg5.buffer_id = 0xffffffff
act5 = ofp.action.output()
act5.port = egress_port
@@ -343,10 +341,9 @@
# Modify the flow action
#Create a flow_mod message , command MODIFY
- msg8 = ofp.message.flow_mod()
+ msg8 = ofp.message.flow_modify()
msg8.match = match
msg8.cookie = random.randint(0,9007199254740992)
- msg8.command = ofp.OFPFC_MODIFY
#out_port will be ignored for flow adds and flow modify (here for test-case Add_Modify_With_Outport)
msg8.out_port = of_ports[3]
msg8.buffer_id = 0xffffffff
@@ -371,7 +368,7 @@
"Could not generate flow match from pkt")
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
act = ofp.action.enqueue()
@@ -516,9 +513,8 @@
# Issue Strict Delete
#Create flow_mod message, command DELETE_STRICT
- msg4 = ofp.message.flow_mod()
+ msg4 = ofp.message.flow_delete_strict()
msg4.out_port = ofp.OFPP_NONE
- msg4.command = ofp.OFPFC_DELETE_STRICT
msg4.buffer_id = 0xffffffff
msg4.match = match
@@ -533,9 +529,8 @@
# Issue Non_Strict Delete
#Create flow_mod message, command DELETE
- msg6 = ofp.message.flow_mod()
+ msg6 = ofp.message.flow_delete()
msg6.out_port = ofp.OFPP_NONE
- msg6.command = ofp.OFPFC_DELETE
msg6.buffer_id = 0xffffffff
msg6.match = match
diff --git a/tests/actions.py b/tests/actions.py
index 6bb6a8a..494d941 100644
--- a/tests/actions.py
+++ b/tests/actions.py
@@ -49,9 +49,8 @@
match.wildcards=ofp.OFPFW_ALL
match.in_port = of_ports[0]
- msg = ofp.message.flow_mod()
+ msg = ofp.message.flow_add()
msg.out_port = ofp.OFPP_NONE
- msg.command = ofp.OFPFC_ADD
msg.buffer_id = 0xffffffff
msg.match = match
self.controller.message_send(msg)
@@ -150,7 +149,7 @@
match.in_port = ingress_port
#Create a flow mod with action.port = OFPP_ALL
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.match.wildcards = ofp.OFPFW_ALL&~ofp.OFPFW_IN_PORT
act.port = ofp.OFPP_ALL
@@ -202,7 +201,7 @@
match.in_port = ingress_port
#Create a flow mod message
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
act.port = ofp.OFPP_CONTROLLER
request.actions.append(act)
@@ -253,7 +252,7 @@
match.in_port = ingress_port
#Create flow mod message
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
act.port = ofp.OFPP_LOCAL
request.actions.append(act)
@@ -301,7 +300,7 @@
match.in_port = ingress_port
#Create a flow mod with action.port = OFPP_ALL
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.match.wildcards = ofp.OFPFW_ALL&~ofp.OFPFW_IN_PORT
act.port = ofp.OFPP_FLOOD
@@ -351,7 +350,7 @@
match.in_port = ingress_port
# Create a flow mod message
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
act.port = ofp.OFPP_IN_PORT
diff --git a/tests/bsn_mirror.py b/tests/bsn_mirror.py
index 79e9b26..87ca463 100644
--- a/tests/bsn_mirror.py
+++ b/tests/bsn_mirror.py
@@ -141,7 +141,7 @@
act2.copy_stage = 0
act3 = ofp.action.output()
act3.port = ports[1]
- flow_mod = ofp.message.flow_mod()
+ flow_mod = ofp.message.flow_add()
flow_mod.match = match
flow_mod.actions.append(act1)
flow_mod.actions.append(act2)
diff --git a/tests/caps.py b/tests/caps.py
index 7a0b83f..7fceeaf 100644
--- a/tests/caps.py
+++ b/tests/caps.py
@@ -36,7 +36,7 @@
break;
match.in_port = port
match.ipv4_src = 1
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
count_check = 101 # fixme: better way to determine this.
if is_exact:
match.wildcards = 0
diff --git a/tests/detailed_contr_sw_messages.py b/tests/detailed_contr_sw_messages.py
index 65e7201..a32251d 100644
--- a/tests/detailed_contr_sw_messages.py
+++ b/tests/detailed_contr_sw_messages.py
@@ -52,8 +52,7 @@
match3.wildcards = ofp.OFPFW_ALL-ofp.OFPFW_IN_PORT
match3.in_port = of_ports[0]
- msg3 = ofp.message.flow_mod()
- msg3.command = ofp.OFPFC_ADD
+ msg3 = ofp.message.flow_add()
msg3.match = match3
msg3.flags |= ofp.OFPFF_CHECK_OVERLAP
msg3.cookie = random.randint(0,9007199254740992)
@@ -173,9 +172,8 @@
match = parse.packet_to_flow_match(pkt)
match.in_port = of_ports[0]
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
- request.command = ofp.OFPFC_ADD
request.flags = request.flags|ofp.OFPFF_EMERG
request.hard_timeout =9
request.idle_timeout =9
@@ -220,8 +218,7 @@
#Generate a flow-mod,command OFPC_MODIFY
- request = ofp.message.flow_mod()
- request.command = ofp.OFPFC_MODIFY
+ request = ofp.message.flow_modify()
request.match.wildcards = ofp.OFPFW_ALL-ofp.OFPFW_IN_PORT
request.match.in_port = of_ports[0]
request.cookie = random.randint(0,9007199254740992)
@@ -337,10 +334,9 @@
logging.info("Expecting switch to ignore the command , without generating errors")
# Issue a delete command
- msg = ofp.message.flow_mod()
+ msg = ofp.message.flow_delete()
msg.match.wildcards = ofp.OFPFW_ALL
msg.out_port = ofp.OFPP_NONE
- msg.command = ofp.OFPFC_DELETE
msg.buffer_id = 0xffffffff
# Verify no message or error is generated by polling the the control plane
@@ -389,7 +385,7 @@
'Received flow removed message for the flow with flow_rem flag not set')
# Insert another flow F' with OFPFF_SEND_FLOW_REM flag set.
- msg9 = ofp.message.flow_mod()
+ msg9 = ofp.message.flow_add()
msg9.match.wildcards = ofp.OFPFW_ALL
msg9.cookie = random.randint(0,9007199254740992)
msg9.buffer_id = 0xffffffff
@@ -432,9 +428,8 @@
pkt = simple_tcp_packet()
match = parse.packet_to_flow_match(pkt)
match.in_port = of_ports[0]
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
- request.command = ofp.OFPFC_ADD
request.flags = request.flags|ofp.OFPFF_EMERG|ofp.OFPFF_SEND_FLOW_REM
act = ofp.action.output()
act.port = of_ports[1]
@@ -564,9 +559,8 @@
verify_tablestats(self,expect_active=1)
#Send delete command matching the flow-1 but with contraint out_port = of_port[2]
- msg7 = ofp.message.flow_mod()
+ msg7 = ofp.message.flow_delete()
msg7.out_port = of_ports[2]
- msg7.command = ofp.OFPFC_DELETE
msg7.buffer_id = 0xffffffff
msg7.match = match
@@ -580,9 +574,8 @@
logging.info("Expecting switch to delete the flow")
#Send Delete command with contraint out_port = of_ports[1]
- msg7 = ofp.message.flow_mod()
+ msg7 = ofp.message.flow_delete()
msg7.out_port = of_ports[1]
- msg7.command = ofp.OFPFC_DELETE
msg7.buffer_id = 0xffffffff
msg7.match = match
@@ -612,7 +605,7 @@
logging.info("Expecting the flow entry to delete with given idle_timeout")
#Insert a flow entry with idle_timeout=1.Send_Flow_Rem flag set
- msg9 = ofp.message.flow_mod()
+ msg9 = ofp.message.flow_add()
msg9.match.wildcards = ofp.OFPFW_ALL
msg9.cookie = random.randint(0,9007199254740992)
msg9.buffer_id = 0xffffffff
@@ -694,7 +687,7 @@
logging.info("Expecting the flow entry to delete with given hard_timeout")
# Insert a flow entry with hardtimeout=1 and send_flow_removed flag set
- msg9 = ofp.message.flow_mod()
+ msg9 = ofp.message.flow_add()
msg9.match.wildcards = ofp.OFPFW_ALL
msg9.cookie = random.randint(0,9007199254740992)
msg9.buffer_id = 0xffffffff
@@ -745,9 +738,8 @@
self.assertTrue(match3 is not None, "Could not generate flow match from pkt")
match3.wildcards = ofp.OFPFW_ALL-ofp.OFPFW_IN_PORT
match3.in_port = of_ports[0]
- msg3 = ofp.message.flow_mod()
+ msg3 = ofp.message.flow_add()
msg3.out_port = of_ports[2] # ignored by flow add,flow modify
- msg3.command = ofp.OFPFC_ADD
msg3.cookie = random.randint(0,9007199254740992)
msg3.buffer_id = 0xffffffff
msg3.hard_timeout = 1
diff --git a/tests/flow_expire.py b/tests/flow_expire.py
index 70ab10e..0467e4b 100644
--- a/tests/flow_expire.py
+++ b/tests/flow_expire.py
@@ -55,7 +55,7 @@
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.cookie = random.randint(0,9007199254740992)
request.buffer_id = 0xffffffff
diff --git a/tests/flow_query.py b/tests/flow_query.py
index 68d4e1f..0e914fc 100644
--- a/tests/flow_query.py
+++ b/tests/flow_query.py
@@ -1348,8 +1348,7 @@
return (n > 0)
def flow_add(self, flow_cfg, overlapf = False):
- flow_mod_msg = ofp.message.flow_mod()
- flow_mod_msg.command = ofp.OFPFC_ADD
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.buffer_id = 0xffffffff
flow_cfg.to_flow_mod_msg(flow_mod_msg)
if overlapf:
@@ -1364,9 +1363,10 @@
return True
def flow_mod(self, flow_cfg, strictf):
- flow_mod_msg = ofp.message.flow_mod()
- flow_mod_msg.command = ofp.OFPFC_MODIFY_STRICT if strictf \
- else ofp.OFPFC_MODIFY
+ if strictf:
+ flow_mod_msg = ofp.message.flow_modify_strict()
+ else:
+ flow_mod_msg = ofp.message.flow_modify()
flow_mod_msg.buffer_id = 0xffffffff
flow_cfg.to_flow_mod_msg(flow_mod_msg)
flow_mod_msg.xid = random.randrange(1,0xffffffff)
@@ -1377,9 +1377,10 @@
return True
def flow_del(self, flow_cfg, strictf):
- flow_mod_msg = ofp.message.flow_mod()
- flow_mod_msg.command = ofp.OFPFC_DELETE_STRICT if strictf \
- else ofp.OFPFC_DELETE
+ if strictf:
+ flow_mod_msg = ofp.message.flow_delete_strict()
+ else:
+ flow_mod_msg = ofp.message.flow_delete()
flow_mod_msg.buffer_id = 0xffffffff
# TBD - "out_port" filtering of deletes needs to be tested
flow_mod_msg.out_port = ofp.OFPP_NONE
diff --git a/tests/flow_stats.py b/tests/flow_stats.py
index a1cadd5..906ad4e 100644
--- a/tests/flow_stats.py
+++ b/tests/flow_stats.py
@@ -133,7 +133,7 @@
logging.info("Ingress " + str(ingress_port) +
" to egress " + str(egress_port))
match.in_port = ingress_port
- flow_mod_msg = ofp.message.flow_mod()
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.match = copy.deepcopy(match)
flow_mod_msg.cookie = random.randint(0,9007199254740992)
flow_mod_msg.buffer_id = 0xffffffff
@@ -185,7 +185,7 @@
"Could not generate flow match from pkt")
match.in_port = ingress_port
- flow_mod_msg = ofp.message.flow_mod()
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.match = match
flow_mod_msg.cookie = random.randint(0,9007199254740992)
flow_mod_msg.buffer_id = 0xffffffff
@@ -310,7 +310,7 @@
"Could not generate flow match from pkt")
match.in_port = ingress_port
- flow_mod_msg = ofp.message.flow_mod()
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.match = match
flow_mod_msg.cookie = random.randint(0,9007199254740992)
flow_mod_msg.buffer_id = 0xffffffff
@@ -482,7 +482,7 @@
logging.info("Ingress " + str(ingress_port) +
" to egress " + str(egress_port))
match.in_port = ingress_port
- flow_mod_msg = ofp.message.flow_mod()
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.match = copy.deepcopy(match)
flow_mod_msg.cookie = random.randint(0,9007199254740992)
flow_mod_msg.buffer_id = 0xffffffff
diff --git a/tests/load.py b/tests/load.py
index 2f0c05f..58471e4 100644
--- a/tests/load.py
+++ b/tests/load.py
@@ -61,7 +61,7 @@
act = ofp.action.output()
act.port = lb_port + 1
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.hard_timeout = 2 * barrier_count
@@ -215,8 +215,7 @@
match.eth_dst = [0, 1, 2, 3, i / 256, i % 256]
act = ofp.action.output()
act.port = ofp.OFPP_CONTROLLER
- request = ofp.message.flow_mod()
- request.command = ofp.OFPFC_ADD
+ request = ofp.message.flow_add()
request.buffer_id = 0xffffffff
request.priority = num_flows - i
request.out_port = ofp.OFPP_NONE
diff --git a/tests/message_types.py b/tests/message_types.py
index 8e97b64..cac246a 100644
--- a/tests/message_types.py
+++ b/tests/message_types.py
@@ -358,7 +358,7 @@
for bytes in max_len :
#Insert a flow entry with action --output to controller
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
act = ofp.action.output()
@@ -457,7 +457,7 @@
match.in_port = of_ports[0]
#Insert a flow entry with action output to controller
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
act = ofp.action.output()
act.port = ofp.OFPP_CONTROLLER
diff --git a/tests/pktact.py b/tests/pktact.py
index ad98812..09f4d4b 100644
--- a/tests/pktact.py
+++ b/tests/pktact.py
@@ -116,7 +116,7 @@
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
@@ -180,7 +180,7 @@
ingress_port = of_ports[0]
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
@@ -267,7 +267,7 @@
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
@@ -396,7 +396,7 @@
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
@@ -514,7 +514,7 @@
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
request.actions.append(ofp.action.output(port=egress_port1))
@@ -564,7 +564,7 @@
" all non-ingress ports")
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
for egress_port in of_ports:
@@ -613,7 +613,7 @@
logging.info("Ingress " + str(ingress_port) + " to all ports")
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
for egress_port in of_ports:
@@ -670,7 +670,7 @@
logging.info("Ingress " + str(ingress_port) + " to all ports")
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
act.port = ofp.OFPP_FLOOD
@@ -715,7 +715,7 @@
logging.info("Ingress " + str(ingress_port) + " to all ports")
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
request.actions.append(ofp.action.output(port=ofp.OFPP_FLOOD))
@@ -758,7 +758,7 @@
logging.info("Ingress " + str(ingress_port) + " to all ports")
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
act.port = ofp.OFPP_ALL
@@ -803,7 +803,7 @@
logging.info("Ingress " + str(ingress_port) + " to all ports")
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
request.actions.append(ofp.action.output(port=ofp.OFPP_ALL))
@@ -860,7 +860,7 @@
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
act.port = ofp.OFPP_FLOOD
@@ -1022,10 +1022,10 @@
def removeFlow(self, prio):
if self.flowMsgs.has_key(prio):
- msg = self.flowMsgs[prio]
- msg.command = ofp.OFPFC_DELETE_STRICT
- # This *must* be set for DELETE
- msg.out_port = ofp.OFPP_NONE
+ old_msg = self.flowMsgs[prio]
+ msg = ofp.message.flow_delete_strict(out_port=ofp.OFPP_NONE,
+ match=old_msg.match,
+ priority=old_msg.priority)
logging.debug("Remove flow with priority " + str(prio))
self.controller.message_send(msg)
do_barrier(self.controller)
@@ -1758,13 +1758,12 @@
for toggle in range(2):
for f_idx in range(flow_count):
pkt = simple_tcp_packet(tcp_sport=f_idx)
- msg = ofp.message.flow_mod()
+ msg = ofp.message.flow_add()
match = packet_to_flow_match(self, pkt)
match.in_port = of_ports[2]
match.wildcards = wildcards
msg.match = match
msg.buffer_id = 0xffffffff
- msg.command = ofp.OFPFC_ADD
msg.actions.append(acts[toggle])
flows[toggle].append(msg)
@@ -1930,7 +1929,7 @@
else:
new = ~orig & mask
setattr(match, field, new)
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.buffer_id = 0xffffffff
request.priority = priority
@@ -2060,7 +2059,7 @@
match.in_port = ingress_port
- request = ofp.message.flow_mod()
+ request = ofp.message.flow_add()
request.match = match
request.priority = 1
@@ -2074,7 +2073,7 @@
# This flow speeds up negative tests
logging.info("Inserting catch-all flow")
- request2 = ofp.message.flow_mod()
+ request2 = ofp.message.flow_add()
request2.match = self.createMatch()
request2.match.wildcards &= ~ofp.OFPFW_IN_PORT
request2.match.in_port = ingress_port
diff --git a/tests/port_stats.py b/tests/port_stats.py
index 1df27f6..7fac164 100644
--- a/tests/port_stats.py
+++ b/tests/port_stats.py
@@ -163,7 +163,7 @@
logging.info("Ingress " + str(ingress_port) +
" to egress " + str(egress_port))
match.in_port = ingress_port
- flow_mod_msg = ofp.message.flow_mod()
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.match = match
flow_mod_msg.cookie = random.randint(0,9007199254740992)
flow_mod_msg.buffer_id = 0xffffffff
@@ -208,7 +208,7 @@
"Could not generate flow match from pkt")
match.in_port = ingress_port
- flow_mod_msg = ofp.message.flow_mod()
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.match = match
flow_mod_msg.cookie = random.randint(0,9007199254740992)
flow_mod_msg.buffer_id = 0xffffffff
@@ -285,7 +285,7 @@
"Could not generate flow match from pkt")
match.in_port = ingress_port
- flow_mod_msg = ofp.message.flow_mod()
+ flow_mod_msg = ofp.message.flow_add()
flow_mod_msg.match = match
flow_mod_msg.cookie = random.randint(0,9007199254740992)
flow_mod_msg.buffer_id = 0xffffffff
diff --git a/tools/munger/scripts/message_gen.py b/tools/munger/scripts/message_gen.py
index 5b6e27b..3e39bdf 100644
--- a/tools/munger/scripts/message_gen.py
+++ b/tools/munger/scripts/message_gen.py
@@ -806,6 +806,36 @@
)
"""
+ print """
+_flow_mod = flow_mod
+flow_mod = None
+
+class flow_add(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_ADD
+
+class flow_modify(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_MODIFY
+
+class flow_modify_strict(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_MODIFY_STRICT
+
+class flow_delete(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_DELETE
+
+class flow_delete_strict(_flow_mod):
+ def __init__(self, **kwargs):
+ _flow_mod.__init__(self, **kwargs)
+ self.command = OFPFC_DELETE_STRICT
+"""
+
#
# OFP match variants
# ICMP 0x801 (?) ==> icmp_type/code replace tp_src/dst