blob: af3f223a61d0a11e06f7153a82c85b239991d4bf [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
Andreas Wundsamfef7d5f2013-08-01 22:15:44 -070028from generic_utils import find
Rich Lane4d9f0f62013-05-09 15:50:57 -070029from collections import namedtuple
30
Andreas Wundsamd30c1072013-11-15 13:36:57 -080031# This module is represents the frontend IR.
Rich Lane4d9f0f62013-05-09 15:50:57 -070032__all__ = [
33 'OFInput',
Rich Lane4d9f0f62013-05-09 15:50:57 -070034 'OFClass',
35 'OFDataMember',
36 'OFTypeMember',
Andreas Wundsam780e0c92013-08-02 17:48:27 -070037 'OFDiscriminatorMember',
Rich Lane4d9f0f62013-05-09 15:50:57 -070038 'OFLengthMember',
39 'OFFieldLengthMember',
40 'OFPadMember',
Rich Lane7bc23772013-11-29 17:47:46 -080041 'OFVersionMember',
Rich Lane4d9f0f62013-05-09 15:50:57 -070042 'OFEnum',
Andreas Wundsam4ee51462013-07-30 11:00:37 -070043 'OFEnumEntry'
Rich Lane4d9f0f62013-05-09 15:50:57 -070044]
45
46"""
47One input file
48
49@param wire_versions Set of integer wire versions this file applies to
50@param classes List of OFClass objects in the same order as in the file
51@param enums List of Enum objects in the same order as in the file
52"""
Andreas Wundsamd30c1072013-11-15 13:36:57 -080053OFInput = namedtuple('OFInput', ['filename', 'wire_versions', 'classes', 'enums'])
Rich Lane7c49d4e2013-10-02 15:57:46 -070054
Rich Lane4d9f0f62013-05-09 15:50:57 -070055"""
56An OpenFlow class
57
58All compound objects like messages, actions, instructions, etc are
59uniformly represented by this class.
60
61The members are in the same order as on the wire.
62
63@param name
Andreas Wundsam780e0c92013-08-02 17:48:27 -070064@param superclass name of the super class
Rich Lane4d9f0f62013-05-09 15:50:57 -070065@param members List of *Member objects
Andreas Wundsamfef7d5f2013-08-01 22:15:44 -070066@param params optional dictionary of parameters
Rich Lane4d9f0f62013-05-09 15:50:57 -070067"""
Andreas Wundsamd30c1072013-11-15 13:36:57 -080068OFClass = namedtuple('OFClass', ['name', 'superclass', 'members', 'virtual', 'params'])
Rich Lane4d9f0f62013-05-09 15:50:57 -070069
70"""
71Normal field
72
73@param name
74@param oftype C-like type string
75
76Example: packet_in.buffer_id
77"""
78OFDataMember = namedtuple('OFDataMember', ['name', 'oftype'])
79
80"""
Andreas Wundsam780e0c92013-08-02 17:48:27 -070081Field that declares that this is an abstract super-class and
82that the sub classes will be discriminated based on this field.
83E.g., 'type' is the discriminator member of the abstract superclass
84of_action.
85
86@param name
87"""
Andreas Wundsam7933beb2013-08-02 22:36:42 -070088OFDiscriminatorMember = namedtuple('OFDiscriminatorMember', ['name', 'oftype'])
Andreas Wundsam780e0c92013-08-02 17:48:27 -070089
90"""
Rich Lane4d9f0f62013-05-09 15:50:57 -070091Field used to determine the type of an OpenFlow object
92
93@param name
94@param oftype C-like type string
95@param value Fixed type value
96
97Example: packet_in.type, flow_add._command
98"""
99OFTypeMember = namedtuple('OFTypeMember', ['name', 'oftype', 'value'])
100
101"""
102Field with the length of the containing object
103
104@param name
105@param oftype C-like type string
106
107Example: packet_in.length, action_output.len
108"""
109OFLengthMember = namedtuple('OFLengthMember', ['name', 'oftype'])
110
111"""
112Field with the length of another field in the containing object
113
114@param name
115@param oftype C-like type string
116@param field_name Peer field whose length this field contains
117
118Example: packet_out.actions_len (only usage)
119"""
120OFFieldLengthMember = namedtuple('OFFieldLengthMember', ['name', 'oftype', 'field_name'])
121
122"""
123Zero-filled padding
124
125@param length Length in bytes
126
127Example: packet_in.pad
128"""
129OFPadMember = namedtuple('OFPadMember', ['length'])
130
131"""
Rich Lane7bc23772013-11-29 17:47:46 -0800132Field with the version of an OpenFlow object
133
134@param name
135@param oftype C-like type string
136
137Example: hello.version
138"""
139OFVersionMember = namedtuple('OFVersionMember', ['name', 'oftype'])
140
141"""
Rich Lane4d9f0f62013-05-09 15:50:57 -0700142An OpenFlow enumeration
143
144All values are Python ints.
145
146@param name
Andreas Wundsam4ee51462013-07-30 11:00:37 -0700147@param entries List of OFEnumEntry objects in input order
148@params dict of optional params. Currently defined:
149 - wire_type: the low_level type of the enum values (uint8,...)
Rich Lane4d9f0f62013-05-09 15:50:57 -0700150"""
Andreas Wundsamd30c1072013-11-15 13:36:57 -0800151OFEnum = namedtuple('OFEnum', ['name', 'entries', 'params'])
Andreas Wundsam4ee51462013-07-30 11:00:37 -0700152OFEnumEntry = namedtuple('OFEnumEntry', ['name', 'value', 'params'])