blob: 5862967165413e82b056f9b5e27c3e7a7fdd3cb5 [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 *
Rich Lanea06d0c32013-03-25 08:52:03 -070034
35##
36# The value to use when an identifier is not defined for a version
37UNDEFINED_IDENT_VALUE = 0
38
Rich Laneba7feb12013-04-08 14:07:00 -070039def add_identifier(name, ofp_name, ofp_group, value, version, all_idents, idents_by_group):
ederlf46abbb92013-04-24 17:07:50 -030040 assert(isinstance(value, (int,long)))
Rich Laneba7feb12013-04-08 14:07:00 -070041 if name in all_idents:
42 all_idents[name]["values_by_version"][version] = value
43 if ((all_idents[name]["ofp_name"] != ofp_name or
44 all_idents[name]["ofp_group"] != ofp_group) and
45 ofp_name.find("OFPP_") != 0):
46 log("""
Rich Lanea06d0c32013-03-25 08:52:03 -070047NOTE: Identifier %s has different ofp name or group in version %s
48From ofp name %s, group %s to name %s, group %s.
49This could indicate a name collision in LOXI identifier translation.
50""" % (name, str(version), all_idents[name]["ofp_name"],
Rich Laneba7feb12013-04-08 14:07:00 -070051 all_idents[name]["ofp_group"], ofp_name, ofp_group))
52 # Update stuff assuming newer versions processed later
53 all_idents[name]["ofp_name"] = ofp_name
54 all_idents[name]["ofp_group"] = ofp_group
Rich Lanea06d0c32013-03-25 08:52:03 -070055
Rich Laneba7feb12013-04-08 14:07:00 -070056 else: # New name
57 all_idents[name] = dict(
58 values_by_version = {version:value},
59 common_value = value,
60 ofp_name = ofp_name,
61 ofp_group = ofp_group
62 )
63 if ofp_group not in idents_by_group:
64 idents_by_group[ofp_group] = []
65 if name not in idents_by_group[ofp_group]:
66 idents_by_group[ofp_group].append(name)
Rich Lanea06d0c32013-03-25 08:52:03 -070067
68def all_versions_agree(all_idents, version_list, name):
69 val_list = all_idents[name]["values_by_version"]
70 for version in version_list:
71 if not version in val_list:
72 return False
73 if str(val_list[version]) != str(all_idents[name]["common_value"]):
74 return False
75 return True
76
77def defined_versions_agree(all_idents, version_list, name):
78 val_list = all_idents[name]["values_by_version"]
79 for version in version_list:
80 if version in val_list:
81 if str(val_list[version]) != str(all_idents[name]["common_value"]):
82 return False
83 return True