1
# Copyright (C) 2014 VA Linux Systems Japan K.K.
2
# Copyright (C) 2014 YAMAMOTO Takashi <yamamoto at valinux co jp>
5
# Licensed under the Apache License, Version 2.0 (the "License"); you may
6
# not use this file except in compliance with the License. You may obtain
7
# a copy of the License at
9
# http://www.apache.org/licenses/LICENSE-2.0
11
# Unless required by applicable law or agreed to in writing, software
12
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
# License for the specific language governing permissions and limitations
17
from ryu.app.ofctl import api as ofctl_api
20
class OpenFlowSwitch(object):
21
def __init__(self, *args, **kwargs):
22
super(OpenFlowSwitch, self).__init__(*args, **kwargs)
24
# logically app doesn't belong here. just for convenience.
30
def set_app(self, app):
34
"""a convenient method for openflow message composers"""
36
return (dp, dp.ofproto, dp.ofproto_parser)
38
def _send_msg(self, msg):
39
return ofctl_api.send_msg(self._app, msg)
41
def delete_flows(self, table_id=None, strict=False, priority=0,
42
match=None, **match_kwargs):
43
(dp, ofp, ofpp) = self._get_dp()
45
table_id = ofp.OFPTT_ALL
47
match = ofpp.OFPMatch(**match_kwargs)
49
cmd = ofp.OFPFC_DELETE_STRICT
51
cmd = ofp.OFPFC_DELETE
52
msg = ofpp.OFPFlowMod(dp,
57
out_group=ofp.OFPG_ANY,
58
out_port=ofp.OFPP_ANY)
61
def install_default_drop(self, table_id):
62
(dp, _ofp, ofpp) = self._get_dp()
63
msg = ofpp.OFPFlowMod(dp,
68
def install_default_goto(self, table_id, dest_table_id):
69
(dp, _ofp, ofpp) = self._get_dp()
70
instructions = [ofpp.OFPInstructionGotoTable(table_id=dest_table_id)]
71
msg = ofpp.OFPFlowMod(dp,
74
instructions=instructions)
77
def install_default_goto_next(self, table_id):
78
self.install_default_goto(table_id, table_id + 1)