Skip to content

[strict yang] Add YANG based cfg_schema.h to schema.h #984

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion common/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

lib_LTLIBRARIES += common/libswsscommon.la

dist_swss_DATA = \
Expand All @@ -17,6 +16,16 @@ swsscommondir = /var/run/redis/sonic-db

bin_PROGRAMS += common/swssloglevel

# Generate cfg_schema.h before building the library
BUILT_SOURCES = common/cfg_schema.h

common/cfg_schema.h: FORCE
$(AM_V_GEN)$(PYTHON) $(srcdir)/gen_cfg_schema.py -o $@

# FORCE target to ensure cfg_schema.h is always regenerated
.PHONY: FORCE
FORCE:

common_libswsscommon_la_SOURCES = \
common/events_common.cpp \
common/events_service.cpp \
Expand Down
159 changes: 20 additions & 139 deletions common/schema.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef __SCHEMA__
#define __SCHEMA__

#include "cfg_schema.h"

#ifdef __cplusplus
namespace swss {
#endif
Expand Down Expand Up @@ -310,189 +312,76 @@ namespace swss {
#define FLEX_COUNTER_DELAY_STATUS_FIELD "FLEX_COUNTER_DELAY_STATUS"

/***** CONFIGURATION DATABASE *****/

#define CFG_PORT_TABLE_NAME "PORT"
/*
Stop adding CFG_* tables here. The CFG_* macro will be auto-generated by cfg_schema.h
and included in schema.h as long as YANG model is defined. The CFG_* table will all be
removed later.
To check how many tables are defined in cfg_schema.h, check common/cfg_schema.h
after libswsscommon deb make.
*/
#define CFG_PORT_CABLE_LEN_TABLE_NAME "CABLE_LENGTH"

#define CFG_SEND_TO_INGRESS_PORT_TABLE_NAME "SEND_TO_INGRESS_PORT"

#define CFG_GEARBOX_TABLE_NAME "GEARBOX"

#define CFG_INTF_TABLE_NAME "INTERFACE"
#define CFG_LOOPBACK_INTERFACE_TABLE_NAME "LOOPBACK_INTERFACE"
#define CFG_MGMT_INTERFACE_TABLE_NAME "MGMT_INTERFACE"
#define CFG_LAG_INTF_TABLE_NAME "PORTCHANNEL_INTERFACE"
#define CFG_VLAN_INTF_TABLE_NAME "VLAN_INTERFACE"
#define CFG_VLAN_SUB_INTF_TABLE_NAME "VLAN_SUB_INTERFACE"

#define CFG_ASIC_SENSORS_TABLE_NAME "ASIC_SENSORS"

#define CFG_LAG_TABLE_NAME "PORTCHANNEL"
#define CFG_LAG_MEMBER_TABLE_NAME "PORTCHANNEL_MEMBER"
#define CFG_VLAN_TABLE_NAME "VLAN"
#define CFG_VLAN_MEMBER_TABLE_NAME "VLAN_MEMBER"
#define CFG_VLAN_STACKING_TABLE_NAME "VLAN_STACKING"
#define CFG_VLAN_TRANSLATION_TABLE_NAME "VLAN_TRANSLATION"
#define CFG_FDB_TABLE_NAME "FDB"
#define CFG_SWITCH_TABLE_NAME "SWITCH"
#define CFG_VRF_TABLE_NAME "VRF"
#define CFG_CRM_TABLE_NAME "CRM"
#define CFG_MGMT_VRF_CONFIG_TABLE_NAME "MGMT_VRF_CONFIG"

#define CFG_DHCP_SERVER_TABLE_NAME "DHCP_SERVER"
#define CFG_NTP_GLOBAL_TABLE_NAME "NTP"
#define CFG_NTP_SERVER_TABLE_NAME "NTP_SERVER"
#define CFG_NTP_KEY_TABLE_NAME "NTP_KEY"
#define CFG_SYSLOG_SERVER_TABLE_NAME "SYSLOG_SERVER"
#define CFG_SYSLOG_CONFIG_TABLE_NAME "SYSLOG_CONFIG"

#define CFG_BGP_NEIGHBOR_TABLE_NAME "BGP_NEIGHBOR"
#define CFG_BGP_INTERNAL_NEIGHBOR_TABLE_NAME "BGP_INTERNAL_NEIGHBOR"
#define CFG_BGP_MONITORS_TABLE_NAME "BGP_MONITORS"
#define CFG_BGP_PEER_RANGE_TABLE_NAME "BGP_PEER_RANGE"
#define CFG_BGP_DEVICE_GLOBAL_TABLE_NAME "BGP_DEVICE_GLOBAL"
#define CFG_BMP_TABLE_NAME "BMP"

#define CFG_SWITCH_HASH_TABLE_NAME "SWITCH_HASH"
#define CFG_DEVICE_METADATA_TABLE_NAME "DEVICE_METADATA"

#define CFG_DEVICE_NEIGHBOR_TABLE_NAME "DEVICE_NEIGHBOR"
#define CFG_DEVICE_NEIGHBOR_METADATA_TABLE_NAME "DEVICE_NEIGHBOR_METADATA"

#define CFG_MIRROR_SESSION_TABLE_NAME "MIRROR_SESSION"
#define CFG_ACL_TABLE_TABLE_NAME "ACL_TABLE"
#define CFG_ACL_TABLE_TYPE_TABLE_NAME "ACL_TABLE_TYPE"
#define CFG_ACL_RULE_TABLE_NAME "ACL_RULE"
#define CFG_PFC_WD_TABLE_NAME "PFC_WD"
#define CFG_FLEX_COUNTER_TABLE_NAME "FLEX_COUNTER_TABLE"
#define CFG_WATERMARK_TABLE_NAME "WATERMARK_TABLE"

#define CFG_PBH_TABLE_TABLE_NAME "PBH_TABLE"
#define CFG_PBH_RULE_TABLE_NAME "PBH_RULE"
#define CFG_PBH_HASH_TABLE_NAME "PBH_HASH"
#define CFG_PBH_HASH_FIELD_TABLE_NAME "PBH_HASH_FIELD"

#define CFG_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP_TABLE_NAME "PFC_PRIORITY_TO_PRIORITY_GROUP_MAP"
#define CFG_TC_TO_PRIORITY_GROUP_MAP_TABLE_NAME "TC_TO_PRIORITY_GROUP_MAP"
#define CFG_PFC_PRIORITY_TO_QUEUE_MAP_TABLE_NAME "MAP_PFC_PRIORITY_TO_QUEUE"
#define CFG_TC_TO_QUEUE_MAP_TABLE_NAME "TC_TO_QUEUE_MAP"
#define CFG_DSCP_TO_TC_MAP_TABLE_NAME "DSCP_TO_TC_MAP"
#define CFG_MPLS_TC_TO_TC_MAP_TABLE_NAME "MPLS_TC_TO_TC_MAP"
#define CFG_SCHEDULER_TABLE_NAME "SCHEDULER"
#define CFG_PORT_QOS_MAP_TABLE_NAME "PORT_QOS_MAP"
#define CFG_WRED_PROFILE_TABLE_NAME "WRED_PROFILE"
#define CFG_QUEUE_TABLE_NAME "QUEUE"
#define CFG_DOT1P_TO_TC_MAP_TABLE_NAME "DOT1P_TO_TC_MAP"
#define CFG_DSCP_TO_FC_MAP_TABLE_NAME "DSCP_TO_FC_MAP"
#define CFG_EXP_TO_FC_MAP_TABLE_NAME "EXP_TO_FC_MAP"
#define CFG_TC_TO_DSCP_MAP_TABLE_NAME "TC_TO_DSCP_MAP"
#define CFG_TC_TO_DOT1P_MAP_TABLE_NAME "TC_TO_DOT1P_MAP"

#define CFG_BUFFER_POOL_TABLE_NAME "BUFFER_POOL"
#define CFG_BUFFER_PROFILE_TABLE_NAME "BUFFER_PROFILE"
#define CFG_BUFFER_QUEUE_TABLE_NAME "BUFFER_QUEUE"
#define CFG_BUFFER_PG_TABLE_NAME "BUFFER_PG"
#define CFG_BUFFER_PORT_INGRESS_PROFILE_LIST_NAME "BUFFER_PORT_INGRESS_PROFILE_LIST"
#define CFG_BUFFER_PORT_EGRESS_PROFILE_LIST_NAME "BUFFER_PORT_EGRESS_PROFILE_LIST"

#define CFG_DEFAULT_LOSSLESS_BUFFER_PARAMETER "DEFAULT_LOSSLESS_BUFFER_PARAMETER"

#define CFG_POLICER_TABLE_NAME "POLICER"

#define CFG_WARM_RESTART_TABLE_NAME "WARM_RESTART"

#define CFG_VXLAN_TUNNEL_TABLE_NAME "VXLAN_TUNNEL"
#define CFG_VXLAN_TUNNEL_MAP_TABLE_NAME "VXLAN_TUNNEL_MAP"
#define CFG_VXLAN_EVPN_NVO_TABLE_NAME "VXLAN_EVPN_NVO"
#define CFG_VNET_TABLE_NAME "VNET"
#define CFG_NEIGH_TABLE_NAME "NEIGH"
#define CFG_NEIGH_SUPPRESS_VLAN_TABLE_NAME "SUPPRESS_VLAN_NEIGH"

#define CFG_VNET_RT_TABLE_NAME "VNET_ROUTE"
#define CFG_VNET_RT_TUNNEL_TABLE_NAME "VNET_ROUTE_TUNNEL"

#define CFG_NVGRE_TUNNEL_TABLE_NAME "NVGRE_TUNNEL"
#define CFG_NVGRE_TUNNEL_MAP_TABLE_NAME "NVGRE_TUNNEL_MAP"

#define CFG_PASS_THROUGH_ROUTE_TABLE_NAME "PASS_THROUGH_ROUTE_TABLE"
#define CFG_SFLOW_TABLE_NAME "SFLOW"
#define CFG_SFLOW_SESSION_TABLE_NAME "SFLOW_SESSION"

#define CFG_DEBUG_COUNTER_TABLE_NAME "DEBUG_COUNTER"
#define CFG_DEBUG_COUNTER_DROP_REASON_TABLE_NAME "DEBUG_COUNTER_DROP_REASON"

#define CFG_STATIC_NAT_TABLE_NAME "STATIC_NAT"
#define CFG_STATIC_NAPT_TABLE_NAME "STATIC_NAPT"
#define CFG_NAT_POOL_TABLE_NAME "NAT_POOL"
#define CFG_NAT_BINDINGS_TABLE_NAME "NAT_BINDINGS"
#define CFG_NAT_GLOBAL_TABLE_NAME "NAT_GLOBAL"

#define CFG_STP_GLOBAL_TABLE_NAME "STP"
#define CFG_STP_VLAN_TABLE_NAME "STP_VLAN"
#define CFG_STP_VLAN_PORT_TABLE_NAME "STP_VLAN_PORT"
#define CFG_STP_PORT_TABLE_NAME "STP_PORT"

#define CFG_MCLAG_TABLE_NAME "MCLAG_DOMAIN"
#define CFG_MCLAG_INTF_TABLE_NAME "MCLAG_INTERFACE"
#define CFG_MCLAG_UNIQUE_IP_TABLE_NAME "MCLAG_UNIQUE_IP"

#define CFG_PORT_STORM_CONTROL_TABLE_NAME "PORT_STORM_CONTROL"
#define CFG_VRRP_TABLE_NAME "VRRP"
#define CFG_VRRP6_TABLE_NAME "VRRP6"
#define CFG_RATES_TABLE_NAME "RATES"

#define CFG_FEATURE_TABLE_NAME "FEATURE"

#define CFG_COPP_TRAP_TABLE_NAME "COPP_TRAP"
#define CFG_COPP_GROUP_TABLE_NAME "COPP_GROUP"

#define CFG_FG_NHG "FG_NHG"
#define CFG_FG_NHG_PREFIX "FG_NHG_PREFIX"
#define CFG_FG_NHG_MEMBER "FG_NHG_MEMBER"

#define CFG_MUX_CABLE_TABLE_NAME "MUX_CABLE"
#define CFG_MUX_LINKMGR_TABLE_NAME "MUX_LINKMGR"

#define CFG_PEER_SWITCH_TABLE_NAME "PEER_SWITCH"

#define CFG_TUNNEL_TABLE_NAME "TUNNEL"
#define CFG_SUBNET_DECAP_TABLE_NAME "SUBNET_DECAP"

#define CFG_SYSTEM_PORT_TABLE_NAME "SYSTEM_PORT"
#define CFG_VOQ_INBAND_INTERFACE_TABLE_NAME "VOQ_INBAND_INTERFACE"

#define CFG_MACSEC_PROFILE_TABLE_NAME "MACSEC_PROFILE"

#define CHASSIS_APP_SYSTEM_INTERFACE_TABLE_NAME "SYSTEM_INTERFACE"
#define CHASSIS_APP_SYSTEM_NEIGH_TABLE_NAME "SYSTEM_NEIGH"
#define CHASSIS_APP_LAG_TABLE_NAME "SYSTEM_LAG_TABLE"
#define CHASSIS_APP_LAG_MEMBER_TABLE_NAME "SYSTEM_LAG_MEMBER_TABLE"

#define CFG_CHASSIS_MODULE_TABLE "CHASSIS_MODULE"

#define CFG_TWAMP_SESSION_TABLE_NAME "TWAMP_SESSION"
#define CFG_BANNER_MESSAGE_TABLE_NAME "BANNER_MESSAGE"
#define CFG_LOGGING_TABLE_NAME "LOGGING"

#define CFG_DHCP_TABLE "DHCP_RELAY"
#define CFG_DPU_TABLE "DPU_TABLE"

#define CFG_FLOW_COUNTER_ROUTE_PATTERN_TABLE_NAME "FLOW_COUNTER_ROUTE_PATTERN"
#define CFG_LOGGER_TABLE_NAME "LOGGER"

#define CFG_SAG_TABLE_NAME "SAG"

#define CFG_SUPPRESS_ASIC_SDK_HEALTH_EVENT_NAME "SUPPRESS_ASIC_SDK_HEALTH_EVENT"

#define CFG_MEMORY_STATISTICS_TABLE_NAME "MEMORY_STATISTICS"

#define CFG_PAC_PORT_CONFIG_TABLE "PAC_PORT_CONFIG_TABLE"
#define CFG_PAC_GLOBAL_CONFIG_TABLE "PAC_GLOBAL_CONFIG_TABLE"
#define CFG_PAC_HOSTAPD_GLOBAL_CONFIG_TABLE "HOSTAPD_GLOBAL_CONFIG_TABLE"

#define CFG_SRV6_MY_SID_TABLE_NAME "SRV6_MY_SIDS"
#define CFG_SRV6_MY_LOCATOR_TABLE_NAME "SRV6_MY_LOCATORS"
#define CFG_DTEL_TABLE_NAME "DTEL"
#define CFG_DTEL_REPORT_SESSION_TABLE_NAME "DTEL_REPORT_SESSION"
#define CFG_DTEL_INT_SESSION_TABLE_NAME "DTEL_INT_SESSION"
#define CFG_DTEL_QUEUE_REPORT_TABLE_NAME "DTEL_QUEUE_REPORT"
#define CFG_DTEL_EVENT_TABLE_NAME "DTEL_EVENT"
#define CFG_FABRIC_MONITOR_DATA_TABLE_NAME "FABRIC_MONITOR"
#define CFG_FABRIC_MONITOR_PORT_TABLE_NAME "FABRIC_PORT"

#define CHASSIS_APP_SYSTEM_INTERFACE_TABLE_NAME "SYSTEM_INTERFACE"
#define CHASSIS_APP_SYSTEM_NEIGH_TABLE_NAME "SYSTEM_NEIGH"
#define CHASSIS_APP_LAG_TABLE_NAME "SYSTEM_LAG_TABLE"
#define CHASSIS_APP_LAG_MEMBER_TABLE_NAME "SYSTEM_LAG_MEMBER_TABLE"
/***** STATE DATABASE *****/

#define STATE_SWITCH_CAPABILITY_TABLE_NAME "SWITCH_CAPABILITY"
Expand Down Expand Up @@ -611,14 +500,6 @@ namespace swss {
#define DEL_COMMAND "DEL"
#define EMPTY_PREFIX ""

#define CFG_DTEL_TABLE_NAME "DTEL"
#define CFG_DTEL_REPORT_SESSION_TABLE_NAME "DTEL_REPORT_SESSION"
#define CFG_DTEL_INT_SESSION_TABLE_NAME "DTEL_INT_SESSION"
#define CFG_DTEL_QUEUE_REPORT_TABLE_NAME "DTEL_QUEUE_REPORT"
#define CFG_DTEL_EVENT_TABLE_NAME "DTEL_EVENT"

#define CFG_FABRIC_MONITOR_DATA_TABLE_NAME "FABRIC_MONITOR"
#define CFG_FABRIC_MONITOR_PORT_TABLE_NAME "FABRIC_PORT"
#define APP_FABRIC_MONITOR_DATA_TABLE_NAME "FABRIC_MONITOR_TABLE"
#define APP_FABRIC_MONITOR_PORT_TABLE_NAME "FABRIC_PORT_TABLE"

Expand Down
2 changes: 1 addition & 1 deletion debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Source: sonic
Maintainer: Shuotian Cheng <shuche@microsoft.com>
Section: net
Priority: optional
Build-Depends: dh-exec (>=0.3), debhelper (>= 12), autotools-dev, libboost-dev | libboost1.71-dev, libhiredis-dev, libgtest-dev, libgmock-dev, swig, nlohmann-json3-dev
Build-Depends: dh-exec (>=0.3), debhelper (>= 12), autotools-dev, libboost-dev | libboost1.71-dev, libhiredis-dev, libgtest-dev, libgmock-dev, swig, nlohmann-json3-dev, python3-yang, libyang-cpp
Standards-Version: 1.0.0

Package: libswsscommon
Expand Down
56 changes: 56 additions & 0 deletions gen_cfg_schema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import argparse
import sonic_yang

YANG_MODELS_DIR = "/usr/local/yang-models"
DEFAULT_OUTPUT_FILE = "common/cfg_schema.h"

def write_cfg_schema(keys, output_file="cfg_schema.h"):
header = """#ifndef CFG_SCHEMA_H
#define CFG_SCHEMA_H

// Macros for table names are autogenerated by gen_cfg_schema.py. Manual update will not be preserved.
#ifdef __cplusplus
namespace swss {
#endif
"""
footer = """
#ifdef __cplusplus
}
#endif
#endif"""

with open(output_file, "w") as f:
f.write(header)
f.write("\n")
for key in sorted(keys):
if '-' in key:
# Comment out keys with hyphens as they can't be valid C macros
f.write('// #define CFG_{}_TABLE_NAME "{}"\n'.format(key, key))
else:
f.write('#define CFG_{}_TABLE_NAME "{}"\n'.format(key, key))
f.write(footer)

def main():
parser = argparse.ArgumentParser()
parser.add_argument('-d',
dest='dir',
metavar='yang directory',
type=str,
help='the yang directory to generate cfg_schema.h',
default=YANG_MODELS_DIR)
parser.add_argument('-o',
dest='output',
metavar='output file',
type=str,
help='output file path for cfg_schema.h',
default=DEFAULT_OUTPUT_FILE)

args = parser.parse_args()
yang_dir = args.dir
sy = sonic_yang.SonicYang(yang_dir)
sy.loadYangModel()
keys = [k for k, v in sy.confDbYangMap.items() if "container" in v]
write_cfg_schema(keys, args.output)

if __name__ == "__main__":
main()
Loading