diff --git a/ryu/ofproto/ofproto_protocol.py b/ryu/ofproto/ofproto_protocol.py new file mode 100644 index 00000000..cf0495d0 --- /dev/null +++ b/ryu/ofproto/ofproto_protocol.py @@ -0,0 +1,56 @@ +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2014 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import ofproto_v1_0 +from . import ofproto_v1_0_parser +from . import ofproto_v1_2 +from . import ofproto_v1_2_parser +from . import ofproto_v1_3 +from . import ofproto_v1_3_parser +from . import ofproto_v1_4 +from . import ofproto_v1_4_parser + + +_versions = { + ofproto_v1_0.OFP_VERSION: (ofproto_v1_0, ofproto_v1_0_parser), + ofproto_v1_2.OFP_VERSION: (ofproto_v1_2, ofproto_v1_2_parser), + ofproto_v1_3.OFP_VERSION: (ofproto_v1_3, ofproto_v1_3_parser), + ofproto_v1_4.OFP_VERSION: (ofproto_v1_4, ofproto_v1_4_parser), +} + + +# OF versions supported by every apps in this process (intersection) +_supported_versions = set(_versions.keys()) + + +def set_app_supported_versions(vers): + _versions &= set(vers) + assert _versions, 'No OpenFlow version is available' + + +class ProtocolDesc(object): + """ + OpenFlow protocol version flavor descriptor + """ + + def __init__(self, version=None): + if version is None: + version = max(_supported_versions) + self.set_version(version) + + def set_version(self, version): + assert version in _supported_versions + (self.ofproto, self.ofproto_parser) = _versions[version]