blob: 8f1e8224aa7644653d19a3e18232f49bdc082a65 [file] [log] [blame]
Rich Lane4d9f0f62013-05-09 15:50:57 -07001# Copyright 2013, Big Switch Networks, Inc.
2#
3# LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
4# the following special exception:
5#
6# LOXI Exception
7#
8# As a special exception to the terms of the EPL, you may distribute libraries
9# generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
10# that copyright and licensing notices generated by LoxiGen are not altered or removed
11# from the LoxiGen Libraries and the notice provided below is (i) included in
12# the LoxiGen Libraries, if distributed in source code form and (ii) included in any
13# documentation for the LoxiGen Libraries, if distributed in binary form.
14#
15# Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
16#
17# You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
18# a copy of the EPL at:
19#
20# http://www.eclipse.org/legal/epl-v10.html
21#
22# Unless required by applicable law or agreed to in writing, software
23# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
24# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
25# EPL for the specific language governing permissions and limitations
26# under the EPL.
27
28from collections import namedtuple
29
30# This module is intended to be imported like this: from loxi_ir import *
31# All public names are prefixed with 'OF'.
32__all__ = [
33 'OFInput',
34 'OFProtocol',
35 'OFClass',
36 'OFDataMember',
37 'OFTypeMember',
38 'OFLengthMember',
39 'OFFieldLengthMember',
40 'OFPadMember',
41 'OFEnum',
Andreas Wundsam4ee51462013-07-30 11:00:37 -070042 'OFEnumEntry'
Rich Lane4d9f0f62013-05-09 15:50:57 -070043]
44
45"""
46One input file
47
48@param wire_versions Set of integer wire versions this file applies to
49@param classes List of OFClass objects in the same order as in the file
50@param enums List of Enum objects in the same order as in the file
51"""
52OFInput = namedtuple('OFInput', ['wire_versions', 'classes', 'enums'])
53
54"""
55One version of the OpenFlow protocol
56
57Combination of multiple OFInput objects.
58
59@param wire_version
60@param classes List of OFClass objects
61@param enums List of Enum objects
62"""
63OFProtocol = namedtuple('OFProtocol', ['wire_version', 'classes', 'enums'])
64
65"""
66An OpenFlow class
67
68All compound objects like messages, actions, instructions, etc are
69uniformly represented by this class.
70
71The members are in the same order as on the wire.
72
73@param name
74@param members List of *Member objects
75"""
76OFClass = namedtuple('OFClass', ['name', 'members'])
77
78"""
79Normal field
80
81@param name
82@param oftype C-like type string
83
84Example: packet_in.buffer_id
85"""
86OFDataMember = namedtuple('OFDataMember', ['name', 'oftype'])
87
88"""
89Field used to determine the type of an OpenFlow object
90
91@param name
92@param oftype C-like type string
93@param value Fixed type value
94
95Example: packet_in.type, flow_add._command
96"""
97OFTypeMember = namedtuple('OFTypeMember', ['name', 'oftype', 'value'])
98
99"""
100Field with the length of the containing object
101
102@param name
103@param oftype C-like type string
104
105Example: packet_in.length, action_output.len
106"""
107OFLengthMember = namedtuple('OFLengthMember', ['name', 'oftype'])
108
109"""
110Field with the length of another field in the containing object
111
112@param name
113@param oftype C-like type string
114@param field_name Peer field whose length this field contains
115
116Example: packet_out.actions_len (only usage)
117"""
118OFFieldLengthMember = namedtuple('OFFieldLengthMember', ['name', 'oftype', 'field_name'])
119
120"""
121Zero-filled padding
122
123@param length Length in bytes
124
125Example: packet_in.pad
126"""
127OFPadMember = namedtuple('OFPadMember', ['length'])
128
129"""
130An OpenFlow enumeration
131
132All values are Python ints.
133
134@param name
Andreas Wundsam4ee51462013-07-30 11:00:37 -0700135@param entries List of OFEnumEntry objects in input order
136@params dict of optional params. Currently defined:
137 - wire_type: the low_level type of the enum values (uint8,...)
Rich Lane4d9f0f62013-05-09 15:50:57 -0700138"""
Andreas Wundsam4ee51462013-07-30 11:00:37 -0700139class OFEnum(namedtuple('OFEnum', ['name', 'entries', 'params'])):
140 @property
141 def values(self):
142 return [(e.name, e.value) for e in self.entries]
143
144OFEnumEntry = namedtuple('OFEnumEntry', ['name', 'value', 'params'])