Hi
Simple switch can't handle link failure, to handle that, we can add hard
timeout to every flow entry.
Signed-off-by: Takeshi <[email protected]>
---
ryu/app/simple_switch.py | 8 ++++----
ryu/app/simple_switch_12.py | 6 +++---
ryu/app/simple_switch_13.py | 10 +++++-----
ryu/app/simple_switch_14.py | 7 ++++---
4 files changed, 16 insertions(+), 15 deletions(-)
diff --git a/ryu/app/simple_switch.py b/ryu/app/simple_switch.py
index 8fd3d21..27986e8 100644
--- a/ryu/app/simple_switch.py
+++ b/ryu/app/simple_switch.py
@@ -38,7 +38,7 @@ class SimpleSwitch(app_manager.RyuApp):
super(SimpleSwitch, self).__init__(*args, **kwargs)
self.mac_to_port = {}
- def add_flow(self, datapath, in_port, dst, actions):
+ def add_flow(self, datapath, in_port, dst, actions, hard_timeout):
ofproto = datapath.ofproto
match = datapath.ofproto_parser.OFPMatch(
@@ -46,8 +46,8 @@ class SimpleSwitch(app_manager.RyuApp):
mod = datapath.ofproto_parser.OFPFlowMod(
datapath=datapath, match=match, cookie=0,
- command=ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0,
- priority=ofproto.OFP_DEFAULT_PRIORITY,
+ command=ofproto.OFPFC_ADD, idle_timeout=0,
+ hard_timeout=hard_timeout,
priority=ofproto.OFP_DEFAULT_PRIORITY,
flags=ofproto.OFPFF_SEND_FLOW_REM, actions=actions)
datapath.send_msg(mod)
@@ -80,7 +80,7 @@ class SimpleSwitch(app_manager.RyuApp):
# install a flow to avoid packet_in next time
if out_port != ofproto.OFPP_FLOOD:
- self.add_flow(datapath, msg.in_port, dst, actions)
+ self.add_flow(datapath, msg.in_port, dst, actions, 3)
data = None
if msg.buffer_id == ofproto.OFP_NO_BUFFER:
diff --git a/ryu/app/simple_switch_12.py b/ryu/app/simple_switch_12.py
index 3df74e0..bb9c212 100644
--- a/ryu/app/simple_switch_12.py
+++ b/ryu/app/simple_switch_12.py
@@ -32,7 +32,7 @@ class SimpleSwitch12(app_manager.RyuApp):
super(SimpleSwitch12, self).__init__(*args, **kwargs)
self.mac_to_port = {}
- def add_flow(self, datapath, port, dst, actions):
+ def add_flow(self, datapath, port, dst, actions, hard_timeout):
ofproto = datapath.ofproto
match = datapath.ofproto_parser.OFPMatch(in_port=port,
@@ -42,7 +42,7 @@ class SimpleSwitch12(app_manager.RyuApp):
mod = datapath.ofproto_parser.OFPFlowMod(
datapath=datapath, cookie=0, cookie_mask=0, table_id=0,
- command=ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0,
+ command=ofproto.OFPFC_ADD, idle_timeout=0,
hard_timeout=hard_timeout,
priority=0, buffer_id=ofproto.OFP_NO_BUFFER,
out_port=ofproto.OFPP_ANY,
out_group=ofproto.OFPG_ANY,
@@ -79,7 +79,7 @@ class SimpleSwitch12(app_manager.RyuApp):
# install a flow to avoid packet_in next time
if out_port != ofproto.OFPP_FLOOD:
- self.add_flow(datapath, in_port, dst, actions)
+ self.add_flow(datapath, in_port, dst, actions, 3)
data = None
if msg.buffer_id == ofproto.OFP_NO_BUFFER:
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index b9cbad0..f1be157 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -47,7 +47,7 @@ class SimpleSwitch13(app_manager.RyuApp):
ofproto.OFPCML_NO_BUFFER)]
self.add_flow(datapath, 0, match, actions)
- def add_flow(self, datapath, priority, match, actions, buffer_id=None):
+ def add_flow(self, datapath, priority, match, actions, hard_timeout,
buffer_id=None):
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
@@ -56,10 +56,10 @@ class SimpleSwitch13(app_manager.RyuApp):
if buffer_id:
mod = parser.OFPFlowMod(datapath=datapath, buffer_id=buffer_id,
priority=priority, match=match,
- instructions=inst)
+ instructions=inst,
hard_timeout=hard_timeout)
else:
mod = parser.OFPFlowMod(datapath=datapath, priority=priority,
- match=match, instructions=inst)
+ match=match, instructions=inst,
hard_timeout=hard_timeout)
datapath.send_msg(mod)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
@@ -102,10 +102,10 @@ class SimpleSwitch13(app_manager.RyuApp):
# verify if we have a valid buffer_id, if yes avoid to send
both
# flow_mod & packet_out
if msg.buffer_id != ofproto.OFP_NO_BUFFER:
- self.add_flow(datapath, 1, match, actions, msg.buffer_id)
+ self.add_flow(datapath, 1, match, actions, 3,
msg.buffer_id)
return
else:
- self.add_flow(datapath, 1, match, actions)
+ self.add_flow(datapath, 1, match, actions, 3)
data = None
if msg.buffer_id == ofproto.OFP_NO_BUFFER:
data = msg.data
diff --git a/ryu/app/simple_switch_14.py b/ryu/app/simple_switch_14.py
index 052740a..ca6dee8 100644
--- a/ryu/app/simple_switch_14.py
+++ b/ryu/app/simple_switch_14.py
@@ -47,7 +47,7 @@ class SimpleSwitch14(app_manager.RyuApp):
ofproto.OFPCML_NO_BUFFER)]
self.add_flow(datapath, 0, match, actions)
- def add_flow(self, datapath, priority, match, actions):
+ def add_flow(self, datapath, priority, match, actions, hard_timeout):
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
@@ -55,7 +55,8 @@ class SimpleSwitch14(app_manager.RyuApp):
actions)]
mod = parser.OFPFlowMod(datapath=datapath, priority=priority,
- match=match, instructions=inst)
+ match=match, instructions=inst,
+ hard_timeout=hard_timeout)
datapath.send_msg(mod)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
@@ -90,7 +91,7 @@ class SimpleSwitch14(app_manager.RyuApp):
# install a flow to avoid packet_in next time
if out_port != ofproto.OFPP_FLOOD:
match = parser.OFPMatch(in_port=in_port, eth_dst=dst)
- self.add_flow(datapath, 1, match, actions)
+ self.add_flow(datapath, 1, match, actions, 3)
data = None
if msg.buffer_id == ofproto.OFP_NO_BUFFER:
--
2.3.2 (Apple Git-55)
-----
Yi Tseng (Takeshi)
Taiwan National Chiao Tung University
Department of Computer Science
-----
------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel