blob: 91c0e5737531314f14810d1299d1b459fdcb2e29 [file] [log] [blame]
Rich Lanea06d0c32013-03-25 08:52:03 -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
28##
29# @brief Process identifiers for updating of_g.identifiers
30#
31
32import sys
Rich Lanea06d0c32013-03-25 08:52:03 -070033from generic_utils import *
34import of_g
35
36##
37# The value to use when an identifier is not defined for a version
38UNDEFINED_IDENT_VALUE = 0
39
Rich Laneba7feb12013-04-08 14:07:00 -070040def add_identifier(name, ofp_name, ofp_group, value, version, all_idents, idents_by_group):
Rich Lanefe735bc2013-04-08 16:58:49 -070041 assert(isinstance(value, int))
Rich Laneba7feb12013-04-08 14:07:00 -070042 if name in all_idents:
43 all_idents[name]["values_by_version"][version] = value
44 if ((all_idents[name]["ofp_name"] != ofp_name or
45 all_idents[name]["ofp_group"] != ofp_group) and
46 ofp_name.find("OFPP_") != 0):
47 log("""
Rich Lanea06d0c32013-03-25 08:52:03 -070048NOTE: Identifier %s has different ofp name or group in version %s
49From ofp name %s, group %s to name %s, group %s.
50This could indicate a name collision in LOXI identifier translation.
51""" % (name, str(version), all_idents[name]["ofp_name"],
Rich Laneba7feb12013-04-08 14:07:00 -070052 all_idents[name]["ofp_group"], ofp_name, ofp_group))
53 # Update stuff assuming newer versions processed later
54 all_idents[name]["ofp_name"] = ofp_name
55 all_idents[name]["ofp_group"] = ofp_group
Rich Lanea06d0c32013-03-25 08:52:03 -070056
Rich Laneba7feb12013-04-08 14:07:00 -070057 else: # New name
58 all_idents[name] = dict(
59 values_by_version = {version:value},
60 common_value = value,
61 ofp_name = ofp_name,
62 ofp_group = ofp_group
63 )
64 if ofp_group not in idents_by_group:
65 idents_by_group[ofp_group] = []
66 if name not in idents_by_group[ofp_group]:
67 idents_by_group[ofp_group].append(name)
Rich Lanea06d0c32013-03-25 08:52:03 -070068
69def all_versions_agree(all_idents, version_list, name):
70 val_list = all_idents[name]["values_by_version"]
71 for version in version_list:
72 if not version in val_list:
73 return False
74 if str(val_list[version]) != str(all_idents[name]["common_value"]):
75 return False
76 return True
77
78def defined_versions_agree(all_idents, version_list, name):
79 val_list = all_idents[name]["values_by_version"]
80 for version in version_list:
81 if version in val_list:
82 if str(val_list[version]) != str(all_idents[name]["common_value"]):
83 return False
84 return True